如何用java编写naivebayes1.关于贝叶斯分类
bayes 是一种统计学分类方法 , 它基于贝叶斯定理,它假定一个属性值对给定类的影响独立于其它属性点的值 。该假定称作类条件独立 。做次假定是为了简化所需计算,并在此意义下称为“朴素的” 。
bayes分类的算法大致如下:
(1)对于属性值是离散的 , 并且目标label值也是离散的情况下 。分别计算label不同取值的概率 , 以及样本在label情况下的概率值 , 然后将这些概率值相乘最后得到一个概率的乘积 , 选择概率乘积最大的那个值对应的label值就为预测的结果 。
例如以下:是预测苹果在给定属性的情况是甜还是不甜的情况:
color={0,1,2,3} weight={2,3,4};是属性序列 , 为离散型 。sweet={yes,no}是目标值 , 也为离散型;
这时我们要预测在color=3,weight=3的情况下的目标值,计算过程如下:
P{y=yes}=2/5=0.4; P{color=3|yes}=1/2=0.5;P{weight=3|yes}=1/2=0.5;故F{color=3,weight=3}取yesd的概率为 0.4*0.5*0.5=0.1;
P{y=no}=3/5=0.6; P{color=3|no}=1/3 P{weight=3|no}=1/3;故P{color=3,weight=3}取no为 0.6*1/3*1/3=1/15;
0.11/15 所以认为 F{color=3,weight=3}=yes;
(2)对于属性值是连续的情况,思想和离散是相同的,只是这时候我们计算属性的概率用的是高斯密度:
这里的Xk就是样本的取值,u是样本所在列的均值,kesi是标准差;
最后代码如下:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package auxiliary;
import java.util.ArrayList;
/**
*
* @author Michael Kong
*/
public class NaiveBayes extends Classifier {
boolean isClassfication[];
ArrayList DoublelblClass=new ArrayListDouble();//存储目标值的种类
ArrayListIntegerlblCount=new ArrayListInteger();//存储目标值的个数
ArrayListFloatlblProba=new ArrayListFloat();//存储对应的label的概率
CountProbility countlblPro;
/*@ClassListBasedLabel是将训练数组按照 label的顺序来分类存储*/
ArrayListArrayListArrayListDouble ClassListBasedLabel=newArrayListArrayListArrayListDouble ();
public NaiveBayes() {
}
@Override
【java标准差的代码 标准差编程】/**
* @train主要完成求一些概率
* 1.labels中的不同取值的概率f(Yi);对应28,29行两段代码
* 2.将训练数组按目标值分类存储第37行代码
* */
public void train(boolean[] isCategory, double[][] features, double[] labels){
isClassfication=isCategory;
countlblPro=new CountProbility(isCategory,features,labels);
countlblPro.getlblClass(lblClass, lblCount, lblProba);
ArrayListArrayListDouble trainingList=countlblPro.UnionFeaLbl(features, labels); //union the features[][] and labels[]
ClassListBasedLabel=countlblPro.getClassListBasedLabel(lblClass, trainingList);
}
@Override
/**3.在Y的条件下,计算Xi的概率 f(Xi/Y);
* 4.返回使得Yi*Xi*...概率最大的那个label的取值
* */
public double predict(double[] features) {
int max_index; //用于记录使概率取得最大的那个索引
int index=0; //这个索引是 标识不同的labels 所对应的概率
ArrayListDouble pro_=new ArrayListDouble(); //这个概率数组是存储features[] 在不同labels下对应的概率
for(ArrayListArrayListDouble elements: ClassListBasedLabel)//依次取不同的label值对应的元祖集合
{
ArrayListDouble pro=new ArrayListDouble();//存同一个label对应的所有概率,之后其中的元素自乘
double probility=1.0; //计算概率的乘积
for(int i=0;ifeatures.length;i++)
{
if(isClassfication[i]) //用于对属性的离散还是连续做判断
推荐阅读
- 挂件直播教程,直播挂件怎么使用
- 为什么视频发不了微信,为什么视频发不了微信朋友
- 幼儿角色扮演类游戏排行,幼儿角色扮演类游戏排行榜前十名
- 电影制作网站,电影制作网站免费
- 什么软件能搜索java语言代码 什么软件能搜索java语言代码信息
- 手机充电口怎么放汽车音响,汽车上给手机充电接口
- sap怎么查公司实收资本,sap资产年结步骤
- 中班体育游戏花样单脚跳,中班体育游戏活动单脚跳
- linux安装命令 linux常用命令安装