贝叶斯算法,简单地说就是比较测试数据是各个类别的概率,概率最大的就判断为这个数据的类别。具体来说就是一个条件概率的计算,测试数据是X,某个类别是C,那么也就是求P(C|X)最大的C,等于P(X|C)P(C)/P(X),因为P(X)不变,所以不必引入计算。也就是说,比较的是P(X|C)P(C)。进一步,P(C)=C类数量/训练集总数,其中训练集总数不变,所以也可以忽略。P(X|C)=P(X1 | C).P(X2 | C).......也就是C类中X各个特征的值的条件概率。
首先需要一个测试集,然后求出各个类的数量和各个类的各个特征的各个值的条件概率(三层数组),接下来就可以对测试数据进行分类,使用上面的数据进行计算。
在本实验中,使用的是汽车数据集,分为四类。我将汽车封装为一个类,然后将数据集内容存储在一个txt中(放在项目根目录下,叫做a.txt),每一行对应一个汽车数据元素,然后在主类test类中还提供了txt转成汽车数组的方法。根据实验要求取数据集的部分作为训练集,全集作为测试集。由于全集数据其实都是已分类的数据,所以每次分完类后可以直接判断本次分类是否正确,从而得出正确率。
1.汽车类:
public class Car {
private int kind,buying,maint,door,Persons,Lug_boot,Safety;
public int getKind() {
return kind;
}
public void setKind(int kind) {
this.kind = kind;
}
public int getBuying() {
return buying;
}
public void setBuying(int buying) {
this.buying = buying;
}
public int getMaint() {
return maint;
}
public void setMaint(int