在前面的几篇文章中,都对手写识别进行了一些讲解,这里主要是介绍一下通过另外一种方法来进行识别---------朴素贝叶斯。。自己也是处于机器学习路上的一名新手,如果有什么讲解不对的话,欢迎大家进行交流,可以把建议写到下面。。。。
好了,不多说,进入正题。。朴素贝叶斯,我相信,搞机器学习的人都不会陌生,关于它的一些基本概念我就不说了,如果还有什么不明白的地方,可以去百度查查它的理论知识。我主要就是对于手写识别来进行针对性的讲解。
就把朴素贝叶斯中,最为关键的公式贴出来:
一:关于训练集数据
这部分,我在前面的文章中,进行了讲解,而且数据集我也分享到了百度云,如果有需要的可以翻看一下前面的那篇神经网络的文章进行下载。
二:朴素贝叶斯的实践
这里讲解一下,大概的步骤吧。其实了解朴素贝叶斯的话,应该很好理解如何进行实施的,毕竟这算法的优点就是通过概率来预测的这么一种简单的方法。 (就把自己做课程报告中PPT写的东西贴出来)
我想,如果了解朴素贝叶斯的基本理念再加上上面的一些提示,那么应该就知道如何进行实施了。。下面就是代码(Java语言)::
1:读取训练集数据(.csv后缀的文件)
package beiyesifenleiqi;
/*
* 读取后缀为csv的excell文件
*
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class CSVFileUtil {
private String fileName = null;
private BufferedReader br = null;
private List<String> list = new ArrayList<String>();
public CSVFileUtil() {
}
public CSVFileUtil(String fileName) throws Exception {
this.fileName = fileName;
br = new BufferedReader(new FileReader(fileName));
String stemp;
while ((stemp = br.readLine()) != null) {
list.add(stemp);
}
}
public List getList() {
return list;
}
/**
* 获取行数
* @return
*/
public int getRowNum() {
return list.size();
}
/**
* 获取列数
* @return
*/
public int getColNum() {
if (!list.toString().equals("[]")) {
if (list.get(0).toString().contains(",")) {// csv为逗号分隔文件
return list.get(0).toString().split(",").length;
} else if (list.get(0).toString().trim().length() != 0) {
return 1;
} else {
return 0;
}
} else {
return 0;
}
}
/**
* 获取制定行
* @param index
* @return
*/
public String getRow(int index) {
if (this.list.size() != 0) {
return (String) list.get(index);
} else {
return null;
}
}
/**
* 获取指定列
* @param index
* @return
*/
public String getCol(int index) {
if (this.getColNum() == 0) {
return null;
}
StringBuffer sb = new StringBuffer();
String tmp = null;
int colnum = this.getColNum();
if (colnum > 1) {
for (Iterator it = list.iterator(); it.hasNext();) {
tmp = it.next().toString();
sb = sb.append(tmp.split(",")[index] + ",");
}
} else {
for (Iterator it = list.iterator(); it.hasNext();) {
tmp = it.next().toString();
sb &#