天天看点

weka 贝叶斯 java_weka中朴素贝叶斯的实现

朴素贝叶斯在实际的应用中有着很大帮助,之所以是朴素贝叶斯是因为,训练数据的属性之间独立的这样是为了好计算类条件属性的概率。

朴素贝叶斯的公式如下:

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

weka 贝叶斯 java_weka中朴素贝叶斯的实现

本文地址:https://blog.csdn.net/iamgoodboy11123/article/details/107594373

希望与广大网友互动??

点此进行留言吧!