700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 朴素贝叶斯算法详解及python代码实现

朴素贝叶斯算法详解及python代码实现

时间:2019-08-23 16:46:36

相关推荐

朴素贝叶斯算法详解及python代码实现

朴素贝叶斯算法

算法原理对数据的要求算法的优缺点算法需要注意的点算法实现(python)(待更.......)

算法原理

P(Ck∣xi)=p(xi∣ck)∗p(ck)p(xi)=p(x1∣ck)∗p(x2∣ck)....p(ck)p(x1)p(x2)....P(C_k|x_i)=\frac{p(x_i|c_k)*p(c_k)}{p(x_i)}=\frac{p(x_1|c_k)*p(x_2|c_k)....p(c_k)}{p(x_1)p(x_2)....}P(Ck​∣xi​)=p(xi​)p(xi​∣ck​)∗p(ck​)​=p(x1​)p(x2​)....p(x1​∣ck​)∗p(x2​∣ck​)....p(ck​)​(条件是独立同分布)(原理给出先验求后验)

对数据的要求

1.能处理缺失值

2. 需要离散化连续性数据

3. 数据不需要标准化或者归一化处理

算法的优缺点

一、优点

1、有坚实的数学基础,以及稳定的分类效率

2、对小规模数据表现良好,能处理多分类问题,适合增量学习

3、 对于结果解释容易理解

4、能够处理缺失值

一、缺点

1、 对于输入数据敏感(离散、连续…)

2、 需要计算先验概率,分类决策存在错误率

3.、模型假设属性之间相互独立,但这个假设在实际中往往不成立

算法需要注意的点

1. 朴素贝叶斯为啥被称为朴素?

朴素体现在每个特征都是独立同分布(假设)避免求解时面临组合爆炸

2. p(xi∣ck)=0p(x_i|c_k)=0p(xi​∣ck​)=0时怎么办(或者特征没有取到样例)?

采用拉普拉斯平滑p(y=ck)=∑i=1NI(yi=ck)+λN+kλp(y=c_k)=\frac{\sum_{i=1}^NI(y_i=c_k)+\lambda}{N+k\lambda}p(y=ck​)=N+kλ∑i=1N​I(yi​=ck​)+λ​

3. 为什么独立性假设在实际中很难成立,但朴素贝叶斯效果仍很好?

1、建模之前排除了特征之间的共线性

2、对于分类任务,只要类别条件概率排序正确,无需精准P

3、如果属性间依赖对所有类别影响相同,或影响相互抵消,最后影响不大

算法实现(python)(待更…)

import numpy as np import pandas as pdfrom sklearn.naive_bayes import GaussianNBimport osos.chdir(r'E:/wyz/Desktop/data/')#读取数据data = pd.read_excel('lw.xlsx',sheet_name = 'Sheet2')#数据切分y = data_model['target']x = data_model.drop('target', axis=1)x_train, x_test, y_train, y_test = train_test_split(x, y,random_state=0,train_size=0.7)#训练clf = GaussianNB()clf = clf.fit(x_train, y_train)#预测y_pred=clf.predict(x_test)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。