程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python實現機器學習算法——樸素貝葉斯

編輯:Python

一、NaiveBayes簡介

  1. 貝葉斯分類器是基於統計學方法的分類算法。
  2. 例如:你在大街上,迎面走過來一個黑人,在我們猜他來自哪裡。我們十有八九都會說來自非洲。為什麼呢?因為黑人在非洲人的比率最高,在沒有其它可用信息下,我們選擇條件概率最大的類別,這就是樸素貝葉斯的思想基礎。
  3. 公式:

 

二、Python代碼實現

案例:

  1. 根據天氣情況決策是否打球 如果給出新一天的氣象指標數據: sunny , cool , high , TRUE, 判斷一下會不會去打球?

 

1.導入package:

import pandas as pd
import numpy as np

2.創建實例數據集:

outlook=['sunny','sunny','overcast','rainy','rainy','rainy','overcast','sunny','sunny','rainy','sunny','overcast','overcast','rainy']
temperature=['hot','hot','hot','mild','cool','cool','cool','mild','cool','mild','mild','mild','hot','mild']
humdity=['high','high','high','high','normal','normal','normal','high','normal','normal','normal','high','normal','high']
windy=['FALSE','TRUE','FALSE','FALSE','FALSE','TRUE','TRUE','FALSE','FALSE','FALSE','TRUE','TRUE','FALSE','TRUE']
play=['no','no','yes','yes','yes','no','yes','no','yes','yes','yes','yes','yes','no']
data=pd.DataFrame({'outlook':outlook,'temperature':temperature,'humdity':humdity,'windy':windy,'play':play})
data.head()

3. 取出特征和標簽:

X=data.drop(['play'],axis=1)
y=data['play']

4.定義樸素貝葉斯訓練過程:

def nb_fit(X,y):
classes=y.unique()
class_count=y.value_counts()
class_prior=class_count/len(y)
prior=dict()
for col in X.columns:
for j in classes:
p_x_y=X[(y==j).values][col].value_counts()
for i in p_x_y.index:
prior[(col,i,j)]=p_x_y[i]/class_count[j]
return classes,class_prior,prior

擬合示例如下:

nb_fit(X,y)

 

 5.定義預測函數:

def predict(X_test):
result=dict()
for c in classes:
p_y=class_prior[c]
p_x_y=1
for i in X_test.items():
p_x_y*=prior[tuple(list(i)+[c])]
result[c]=p_y*p_x_y
return result

 6.給定測試實例並進行預測:

X_test={'outlook':'sunny','temperature':'cool','humdity':'high','windy':'TRUE'}

X_test.items()
result=predict(X_test)
result

結果如下:


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved