http://www.crocro.cn/post/286.html

利用朴素贝叶斯算法进行分类-Java代码实现

 鳄鱼  3个月前 (12-14)  分类:机器学习  阅读(44)  评论(0)
Java
package cn.crocro.classifier;

import java.util.ArrayList;

/**
* 朴素贝叶斯分类器,只能针对有限个情况的分类下面是实例代码
*
* @author 鳄鱼
*
*/
public class NaiveBayesClassifier {
/**
* 进行训练的内部数据
*/
private ArrayList<FiniteStateData> datas = new ArrayList<>();
/*
*
* 拉普拉斯平滑数值
*/
private double landa = 1; /**
* 进行初始化
*
* @param datas
* 初始化的数据
*/
public NaiveBayesClassifier(ArrayList<FiniteStateData> datas) {
this.datas = datas;
} /**
* 默认进行初始化
*/
public NaiveBayesClassifier() { } public void setLanda(double landa) {
this.landa = landa;
} /**
* 增加数据
*
* @param data
* 增加一组数据
*/
public void addData(FiniteStateData data) {
datas.add(data);
} /**
* 获取对应的类的默认概率
*
* @param classNum
* 想获取的分类
* @return
*/
private double getClassPercent(int classNum) {
int num = 0;
for (FiniteStateData data : datas) {
if (data.classfy == classNum) {
num++;
}
}
return (double) (num + landa) / (datas.size() + landa * FiniteStateData.getTotalClassNum());
} /**
* 获取某个维度某个值的概率
*
* @param dim
* 维度
* @param value
* 值
* @return 概率
*/
private double getValuePercent(int dim, int value, int classfy) {
int num = 0;
int classfyNum = 0;
for (FiniteStateData singleData : datas) {
if (singleData.data[dim] == value && singleData.classfy == classfy) {
num++;
}
if (singleData.classfy == classfy) {
classfyNum++;
}
} return (double) (num + landa) / (classfyNum + landa * FiniteStateData.getTotalDimDataNum(dim));
} /**
* 获取未知数据的内部分类概率
*
* @param data
* 未知数据
* @param classfy
* 可能分类
* @return 概率
*/
public double getClassifyPercent(int[] data, int classfy) {
double total = 0;
for (int oneClassfy : FiniteStateData.getClassArray()) {
total += getLocalClassifyPercent(data, oneClassfy);
}
return getLocalClassifyPercent(data, classfy) / total;
} /**
* 获取未知数据的内部分类概率
*
* @param data
* 未知数据
* @param classfy
* 可能分类
* @return 概率
*/
private double getLocalClassifyPercent(int[] data, int classfy) {
double percent = getClassPercent(classfy);
for (int i = 0; i < data.length; i++) {
percent = percent * getValuePercent(i, data[i], classfy);
}
return percent;
} /**
* 测试
*
* @param args
*/
public static void main(String[] args) {
// 设置分类的数值可能
int[] data1 = new int[] { 1, 3, 4, 5 };
int[] data2 = new int[] { 2, 2, 2, 2 };
int[] data3 = new int[] { 2, 2, 2, 2 };
FiniteStateData finiteStateData = new FiniteStateData(data1, 1);
FiniteStateData finiteStateData1 = new FiniteStateData(data2, 2);
FiniteStateData finiteStateData2 = new FiniteStateData(data3, 1);
NaiveBayesClassifier bayesClassifier = new NaiveBayesClassifier();
bayesClassifier.addData(finiteStateData);
bayesClassifier.addData(finiteStateData1);
bayesClassifier.addData(finiteStateData2);
System.out.println(bayesClassifier.getClassPercent(2));
System.out.println(bayesClassifier.getValuePercent(0, 2, 1));
System.out.println(bayesClassifier.getClassifyPercent(data1, 1));
} }

利用朴素贝叶斯算法进行分类-Java代码实现的更多相关文章

  1. 【数据挖掘】朴素贝叶斯算法计算ROC曲线的面积

    题记:          近来关于数据挖掘学习过程中,学习到朴素贝叶斯运算ROC曲线.也是本节实验课题,roc曲线的计算原理以及如果统计TP.FP.TN.FN.TPR.FPR.ROC面积等等.往往运用 ...

  2. 朴素贝叶斯算法java实现(多项式模型)

    网上有很多对朴素贝叶斯算法的说明的文章,在对算法实现前,参考了一下几篇文章: NLP系列(2)_用朴素贝叶斯进行文本分类(上) NLP系列(3)_用朴素贝叶斯进行文本分类(下) 带你搞懂朴素贝叶斯分类 ...

  3. 朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)

    朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...

  4. 【sklearn朴素贝叶斯算法】高斯分布/多项式/伯努利贝叶斯算法以及代码实例

    朴素贝叶斯 朴素贝叶斯方法是一组基于贝叶斯定理的监督学习算法,其"朴素"假设是:给定类别变量的每一对特征之间条件独立.贝叶斯定理描述了如下关系: 给定类别变量\(y\)以及属性值向 ...

  5. 【十大算法实现之naive bayes】朴素贝叶斯算法之文本分类算法的理解与实现

    关于bayes的基础知识,请参考: 基于朴素贝叶斯分类器的文本聚类算法 (上) http://www.cnblogs.com/phinecos/archive/2008/10/21/1315948.h ...

  6. Python机器学习笔记:朴素贝叶斯算法

    朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比如决策树,KNN,逻辑回归,支持向 ...

  7. 朴素贝叶斯算法下的情感分析——C#编程实现

    这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Language Pr ...

  8. C#编程实现朴素贝叶斯算法下的情感分析

    C#编程实现 这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Lang ...

  9. 朴素贝叶斯算法 & 应用实例

    转载请注明出处:http://www.cnblogs.com/marc01in/p/4775440.html 引 和师弟师妹聊天时经常提及,若有志于从事数据挖掘.机器学习方面的工作,在大学阶段就要把基 ...

随机推荐

  1. 打印机服务器搭建 -cups

    系统:ubuntu 14.04 http://foo2zjs.rkkda.com/INSTALL 安装cups   sudo apt-get install cups 安装完成后,把打印机的数据线与服 ...

  2. Linux终端快捷操作汇总

    定位单词 在长段的命令中,使用 Ctrl + ← 和 Ctrl + → 可快速将光标定位到命令中单词的首字母或末尾,实现在各单词之间的快速跳动定位. 你可以试着在终端中输入 apt-get insta ...

  3. Linux 相关的error处理

    1  dpkg: error: duplicate file trigger interest for filename Notice the first and last lines of /var ...

  4. SSH综合练习-第1天

    SSH综合练习-仓库管理系统-第一天 综合练习的整体目的: 整合应用 Struts2 .Hibernate.Spring .Mysql . jQuery Ajax.java基础知识 熟悉企业SSH 基 ...

  5. (负)-margin在页面布局中的应用

    有关margin的原理可以看看这篇文章:http://www.cnblogs.com/2050/archive/2012/08/13/2636467.html#2457812 有关margin负值的几 ...

  6. Java 泛型 泛型代码和虚拟机

    Java 泛型 泛型代码和虚拟机 @author ixenos 类型擦除.原始类型.给JVM的指令.桥方法.Java泛型转换的事实 l  类型擦除(type erasure) n  Java泛型的处理 ...

  7. hdu_5036_Explosion(bitset优化传递闭包)

    题目链接:hdu_5036_Explosion 题意: 一个人要打开或者用炸弹砸开所有的门,每个门里面有一些钥匙,一个钥匙对应一个门,有了一个门的钥匙就能打开相应的门,告诉每个门里面有哪些门的钥匙,问 ...

  8. navicat 连接远程mysql

    01putty中session---远程地址(程序访问的域名) ,端口22--load加载进来 02SSH--Auth-Tunnels(隧道)-- putty端口映射SSH--Auth-Tunnels ...

  9. stl实现结构体排序关键语法要点(sort)

    sort函数,调用时使用函数头: #include <algorithm> sort(begin,end);用来表示一个范围. int _tmain(int argc, _TCHAR* a ...

  10. IIS7部署MVC站点后,打开无法正常跳转到首页

    产品拿到安装包后想在本地安装测试一下,但是管理工具里没有IIS. 后来在windows功能里添加iis服务. 添加后成功安装. 但是第一次打开时,页面提示要“启用目录浏览”. 启用后,打开的却是站点目 ...