分类模型之朴素贝叶斯

朴素贝叶斯是基于概率的分类模型,通过训练集得到得到正负样例。 举例说明(参考西瓜书材料),比如西瓜的特征为,花纹,触感,纹理,敲声,色泽,根蒂等等,我们通过在测试集中,我们通过贝叶斯公式来计算得到在不同特征组合下好瓜的概率。
知识储备:
1.条件概率 P(A|B ):在B发生的条件下A发生概率
2.联合概率密度P(A,B):AB同时发生的概率
3.全概率公式P(C):在不同条件下C发生的概率。如B发生的条件下C发生的概率+B不发生的条件下C发生的概率 的和即为全概率P(C)
4.贝叶斯公式:1,3组合得之
5.朴素贝叶斯:在贝叶斯的基础上各个特征间相互独立。如P(A,B|C) = P(A|C)P(B|C)

常用的朴素贝叶斯:
1。高斯朴素贝叶斯
假设特征符合高斯分布
2。伯努利朴素贝叶斯
如果值为0,1,伯努利会有更好的表现,朴素贝叶斯要求的是值为离散值

涉及到的问题
拉普拉斯平滑:如计算P(A|B),若P(B)为0,那么值恒为0,P(A)无论怎么样变化概率都为0,这就失去了计算的意义。 所以引入拉普拉斯平滑,既将整体+1,对全部概率值影响都不大且可以保证所有计算出的概率均有意义。

生成模型和判别模型:
生成模型:通过求输入与输出的联合概率密度,再求解类别归类概率
判别模型:不需要通过联合概率密度

代码实践:
(对连续值不友好例子)
在这里插入图片描述

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/data2.txt', names=['S1', 'S2', 'target'])
df_0 = df[df['target'] == 0]
df_1 = df[df['target'] == 1]
plt.scatter(df_1['S1'], df_1['S2'], marker='o', c='r')
plt.scatter(df_0['S1'], df_0['S2'], marker='x', c='b')
plt.show()

X = df.drop('target',axis=1)
y = df['target']
print X.shape,y.shape

from sklearn.model_selection import train_test_split
X_tarin, X_test, y_tarin, y_test = train_test_split(X, y, test_size=0.3)
print X_tarin.shape,y_tarin.shape

from sklearn.metrics import accuracy_score, recall_score, f1_score
from sklearn.naive_bayes import GaussianNB, BernoulliNB
#
gn = GaussianNB()
gn.fit(X_tarin, y_tarin)
y_predict = gn.predict(X_test)
print "accuracy_score = %s" % accuracy_score(y_predict, y_test)
print "recall_score = %s" % recall_score(y_predict, y_test)
print "f1_score = %s" % f1_score(y_predict, y_test)
accuracy_score = 0.5555555555555556
recall_score = 0.6
f1_score = 0.5294117647058824

对离散值友好例子:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值