weka中朴素贝叶斯的实现
程序员文章站
2022-12-20 12:13:52
朴素贝叶斯在实际的应用中有着很大帮助,之所以是朴素贝叶斯是因为,训练数据的属性之间独立的这样是为了好计算类条件属性的概率。朴素贝叶斯的公式如下:P(C=c | X = x ) = (P(C=c)P(X=x | C=c))/(P(X=x))其中X是属性,C为类属性。朴素贝叶斯求得就是P(c|x)的后验概率。这个等式的右侧,分子p(c)为所属类别的概率,它是先验概率,我们是可以通过所属类的个数占总样本的比例计算分母P(X)是全概率公式,它是一个固定的值。最终就是计算条件概率,所类条件下的属性的概...
朴素贝叶斯在实际的应用中有着很大帮助,之所以是朴素贝叶斯是因为,训练数据的属性之间独立的这样是为了好计算类条件属性的概率。
朴素贝叶斯的公式如下:
P(C=c | X = x ) = (P(C=c)P(X=x | C=c))/(P(X=x))
其中X是属性,C为类属性。
朴素贝叶斯求得就是P(c|x)的后验概率。
这个等式的右侧,分子p(c)为所属类别的概率,它是先验概率,我们是可以通过所属类的个数占总样本的比例计算
分母P(X)是全概率公式,它是一个固定的值。
最终就是计算条件概率,所类条件下的属性的概率。
由于我们的属性之间是独立因此,P(Xi|Cj)= P(x1|cj)P(x2|cj)。。。P(xi|cj)概率的乘积。
如何分类呢?
加入二分类
是比较P(c1|x)和P(c2|x)之间的大小,谁的概率大,就是属性哪一类。
今天的样例是根据天气的各种属性是否决定出去玩
样本的数据库来自weka的weather.nominal.arrf 文件
@attribute outlook {sunny, overcast, rainy}
@attribute temperature {hot, mild, cool}
@attribute humidity {high, normal}
@attribute windy {TRUE, FALSE}
@attribute play {yes, no}
@data
sunny,hot,high,FALSE,no
sunny,hot,high,TRUE,no
overcast,hot,high,FALSE,yes
rainy,mild,high,FALSE,yes
rainy,cool,normal,FALSE,yes
rainy,cool,normal,TRUE,no
overcast,cool,normal,TRUE,yes
sunny,mild,high,FALSE,no
sunny,cool,normal,FALSE,yes
rainy,mild,normal,FALSE,yes
sunny,mild,normal,TRUE,yes
overcast,mild,high,TRUE,yes
overcast,hot,normal,FALSE,yes
rainy,mild,high,TRUE,no
这里面由于weka实现的NaiveBayesian的具体算法过程,我们只需要实例化,导入训练数据
//缺省的jar包
import java.io.File;
import weka.classifiers.Classifier;
import weka.classifier.Evaluation;
import weka.core.converters.ArffLoader;
public static void main(String[] argv) {
// runClassifier(new NaiveBayes(), argv);
Instances ins = null;
Classifier cfs = null;
try {
// 读入训练测试样本
File file = new File(
"D:\\weather.nominal.arff");
ArffLoader loader = new ArffLoader();
loader.setFile(file);
ins = loader.getDataSet();
ins.setClassIndex(ins.numAttributes() - 1);
// 初始化分类器
cfs = (Classifier) Class.forName(
"weka.classifiers.bayes.NaiveBayes").newInstance();
// 使用训练样本进行分类
cfs.buildClassifier(ins);
// 使用测试样本测试分类器的学习效果
Instance testInst;
Evaluation testingEvaluation = new Evaluation(ins);
int length = ins.numInstances();
for (int i = 0; i < length; i++) {
testInst = ins.instance(i);
testingEvaluation.evaluateModelOnceAndRecordPrediction(cfs,
testInst);
}
// 打印分类结果
System.out.println("分类的正确率" + (1 - testingEvaluation.errorRate()));
} catch (Exception e) {
e.printStackTrace();
}
}
需要导入weka的jar下载位置。
weka.jar
本文地址:https://blog.csdn.net/iamgoodboy11123/article/details/107594373