朴素贝叶斯算法详解及python代码实现
樸素貝葉斯算法
- 算法原理
- 對(duì)數(shù)據(jù)的要求
- 算法的優(yōu)缺點(diǎn)
- 算法需要注意的點(diǎn)
- 算法實(shí)現(xiàn)(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?)?(條件是獨(dú)立同分布)(原理給出先驗(yàn)求后驗(yàn))
對(duì)數(shù)據(jù)的要求
1.能處理 缺失值
2. 需要離散化連續(xù)性數(shù)據(jù)
3. 數(shù)據(jù)不需要標(biāo)準(zhǔn)化或者歸一化處理
算法的優(yōu)缺點(diǎn)
一、優(yōu)點(diǎn)
1、有堅(jiān)實(shí)的數(shù)學(xué)基礎(chǔ),以及穩(wěn)定的分類效率
2、對(duì)小規(guī)模數(shù)據(jù)表現(xiàn)良好,能處理多分類問題,適合增量學(xué)習(xí)
3、 對(duì)于結(jié)果解釋容易理解
4、能夠處理缺失值
一、缺點(diǎn)
1、 對(duì)于輸入數(shù)據(jù)敏感(離散、連續(xù)…)
2、 需要計(jì)算先驗(yàn)概率,分類決策存在錯(cuò)誤率
3.、模型假設(shè)屬性之間相互獨(dú)立,但這個(gè)假設(shè)在實(shí)際中往往不成立
算法需要注意的點(diǎn)
1. 樸素貝葉斯為啥被稱為樸素?
樸素體現(xiàn)在每個(gè)特征都是獨(dú)立同分布(假設(shè))避免求解時(shí)面臨組合爆炸
2. p(xi∣ck)=0p(x_i|c_k)=0p(xi?∣ck?)=0時(shí)怎么辦(或者特征沒有取到樣例)?
采用拉普拉斯平滑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. 為什么獨(dú)立性假設(shè)在實(shí)際中很難成立,但樸素貝葉斯效果仍很好?
1、建模之前排除了特征之間的共線性
2、對(duì)于分類任務(wù),只要類別條件概率排序正確,無需精準(zhǔn)P
3、如果屬性間依賴對(duì)所有類別影響相同,或影響相互抵消,最后影響不大
算法實(shí)現(xiàn)(python)(待更…)
import numpy as np import pandas as pd from sklearn.naive_bayes import GaussianNB i mport os os.chdir(r'E:/wyz/Desktop/data/') #讀取數(shù)據(jù) data = pd.read_excel('lw.xlsx',sheet_name = 'Sheet2') #數(shù)據(jù)切分 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) #訓(xùn)練 clf = GaussianNB() clf = clf.fit(x_train, y_train) #預(yù)測(cè) y_pred=clf.predict(x_test)總結(jié)
以上是生活随笔為你收集整理的朴素贝叶斯算法详解及python代码实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Xgboost算法原理详解及python
- 下一篇: OpenCV+python图像处理基础操