朴素贝叶斯

在网上看到的一个关于极大似然估计的解释,感觉通俗易懂。
其概率估计方法是极大似然估计,其实很好理解,就是从数据分布估计参数的分布,比如,你现在知道了全班一共50个人,30个男的,20个女的,那你就可以用数据估计出男生大致分布为五分之三,女生为五分之二,数据分布估计参数分布。
借用摘自的一个例子
https://blog.csdn.net/zhengzhenxian/article/details/79052185
如果一对男女朋友,男生想女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?

这是一个典型的分类问题,转为数学问题就是比较p(嫁|(不帅、性格不好、身高矮、不上进))与p(不嫁|(不帅、性格不好、身高矮、不上进))的概率,谁的概率大,我就能给出嫁或者不嫁的答案,哪个大选哪个。。。
这里我们联系到朴素贝叶斯公式:
在这里插入图片描述
因为特征是独立的所以可以如上转化
朴素贝叶斯是一种基于概率理论的分类算法,因为要比较不同类别在特征下的概率,分母都一样不用管。

如果特征是数值的,最好是正态分布的数值的,那么用

sklearn.naive_bayes.GaussianNB
如果特征是binary(2进制)的,那么用

sklearn.naive_bayes.BernoulliNB
如果特征是categorical(离散)的,那么用

sklearn.naive_bayes.MultinomialNB
网上给的手写代码的例子都是文本变为词向量,特征词都是0,1计算类别占总样本比例及如类别1的特征占类别1样本数的比例只用累加求有多少个1再求比例就可以。
https://www.cnblogs.com/lunge-blog/p/11618970.html
这篇文章很不错 介绍了手写离散数据及连续数据的朴素贝叶斯代码
df=data[data[attrs[-1](数据集最后一列类别)]==labels[i]](一个集合包含不重复的类别)i是类别数
在代码中通过循环所有类别,判断如果该样本的类别等于当前循环的i这个类别对应的类别则计算总样本中符合条件的样本数除以总样本
Dc=df[attrs[0]].count()这就是计算一列的数据个数 也就是符合条件的样本数
features=[data[i].unique() for i in attrs[:-1]]每个属性的可取值
for j in range(len(features)):
values=features[j] 第几个特征
Ni=values.size
c_attr=[]
for value in values:
Dc_xi=df[df[attrs[j]]==value].index.size这条计算了样本中等于这个特征中某个分类如色泽(青绿,浅白,乌黑)中的青绿的样本数。
通过这种方式我们计算出了特征中某个分支的样本数比该类别下样本数的比例即分子
这样我们求出了贝叶斯算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值