利用朴素贝叶斯算法进行分类-Java代码实现
http://www.crocro.cn/post/286.html
利用朴素贝叶斯算法进行分类-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代码实现的更多相关文章
- 【数据挖掘】朴素贝叶斯算法计算ROC曲线的面积
题记: 近来关于数据挖掘学习过程中,学习到朴素贝叶斯运算ROC曲线.也是本节实验课题,roc曲线的计算原理以及如果统计TP.FP.TN.FN.TPR.FPR.ROC面积等等.往往运用 ...
- 朴素贝叶斯算法java实现(多项式模型)
网上有很多对朴素贝叶斯算法的说明的文章,在对算法实现前,参考了一下几篇文章: NLP系列(2)_用朴素贝叶斯进行文本分类(上) NLP系列(3)_用朴素贝叶斯进行文本分类(下) 带你搞懂朴素贝叶斯分类 ...
- 朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)
朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...
- 【sklearn朴素贝叶斯算法】高斯分布/多项式/伯努利贝叶斯算法以及代码实例
朴素贝叶斯 朴素贝叶斯方法是一组基于贝叶斯定理的监督学习算法,其"朴素"假设是:给定类别变量的每一对特征之间条件独立.贝叶斯定理描述了如下关系: 给定类别变量\(y\)以及属性值向 ...
- 【十大算法实现之naive bayes】朴素贝叶斯算法之文本分类算法的理解与实现
关于bayes的基础知识,请参考: 基于朴素贝叶斯分类器的文本聚类算法 (上) http://www.cnblogs.com/phinecos/archive/2008/10/21/1315948.h ...
- Python机器学习笔记:朴素贝叶斯算法
朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比如决策树,KNN,逻辑回归,支持向 ...
- 朴素贝叶斯算法下的情感分析——C#编程实现
这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Language Pr ...
- C#编程实现朴素贝叶斯算法下的情感分析
C#编程实现 这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Lang ...
- 朴素贝叶斯算法 & 应用实例
转载请注明出处:http://www.cnblogs.com/marc01in/p/4775440.html 引 和师弟师妹聊天时经常提及,若有志于从事数据挖掘.机器学习方面的工作,在大学阶段就要把基 ...
随机推荐
- js实现的笛卡尔乘积-商品发布
//笛卡儿积组合 function descartes(list) { //parent上一级索引;count指针计数 var point = {}; var result = []; var pIn ...
- LeetCode 之 Triangle
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- mongo 初级使用
1.找到mongo所在地址 cd /usr/bin 2.进入mongo 命令:mongo mongo:端口(默认27017) ps:我用的是30005 3.选择使用的database 命令:use 自 ...
- HDU 3362 Fix(状压dp)
Fix Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- GreenPlum学习之(Share-nothing)架构
当今世界是一个信息化的世界,我们的生活中无论是生活.工作.学习都离不开信息系统的支撑.而信息系统的背后用于保存和处理最终结果的地方就是数据库.因此数据库系统就变得尤为重要,这意味着如果数据库如果面临问 ...
- Token验证失败的解决方法
Token验证失败 微信 微信公众平台开发 Token校验失败 URL Token原文 http://www.cnblogs.com/txw1958/p/token-verify.html Token ...
- C++构造与析构
C++语言构造函数与析构函数需要注意的地方. 构造 考虑以下定义 struct Node { char *name; int value; Node() { name = ]; strcpy(name ...
- marble 基本函数(一)
. 标记 GeoDataPlacemark *place = new GeoDataPlacemark( "Bucharest" ); place->setCoordinat ...
- 官方解答:Vultr VPS常见问题
VULTR VPS配置高,价格低廉,是非常优秀的vps品牌.今天我来翻译vultr官方FAQ,相信你能找到具体答案. Q 请介绍VULTR VPS机器硬件配置 Intel CPU 3+ GHz Cor ...
- java TCP并发实现文件上传---转载(PS:适合java1.6之前)
/** 客户端 1.服务端点 2.读取客户端已有的文件数据 3.通过socket输出流发给服务端 4.读取服务端反馈信息 5.关闭 **/ import java.io.*; import java. ...