欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

weka中朴素贝叶斯的实现

程序员文章站 2022-03-26 20:33:10
朴素贝叶斯在实际的应用中有着很大帮助,之所以是朴素贝叶斯是因为,训练数据的属性之间独立的这样是为了好计算类条件属性的概率。朴素贝叶斯的公式如下: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
weka中朴素贝叶斯的实现

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