樸素貝葉斯算法的簡單機器學(xué)習(xí)應(yīng)用

機器學(xué)習(xí)顧名思義哗戈,就是讓機器具有學(xué)習(xí)的能力郊艘,能像人一樣在大量的學(xué)習(xí)過程中慢慢具備的一種分辨的能力,并且可以根據(jù)經(jīng)驗對未來做出預(yù)測。這是一種比較淺顯的理解暇仲。

機器是怎么樣學(xué)習(xí)的步做,假象你在教一個完全沒有認(rèn)知的小孩分辨哪個是西瓜副渴,面前有一堆東西奈附,大大小小的西瓜,蘋果煮剧、梨斥滤、手機、相機勉盅,在你教完他之后他可能就有一個認(rèn)知:圓的是西瓜佑颇,因為“圓”是區(qū)分其他物品最明顯的特征,這個認(rèn)知就留在了他的記憶中草娜,那么在給他一個菠蘿挑胸,他就會把菠蘿歸位非西瓜一類,因為菠蘿不是圓的宰闰,假如此時拿出一個皮球茬贵,他很可能會判斷錯,要想做出正確判斷移袍,必須加入新的特征進行學(xué)習(xí)——顏色解藻、紋理、重量葡盗。

機器的學(xué)習(xí)和人的學(xué)習(xí)是一樣的螟左,地圖導(dǎo)航可能大家都用過,它收集了很多路況信息觅够,假設(shè)我們有一組路況信息胶背,包括路的轉(zhuǎn)彎角度x,路的崎嶇程度y喘先,x钳吟、y應(yīng)該是一組離散數(shù)據(jù),和某路況下可以快行 O苹祟,和應(yīng)當(dāng)慢行X


圖中給出了多組特征向量值(x,y)砸抛,及對應(yīng)的是快行O or 慢行X,機器學(xué)習(xí)需要做的就是根據(jù)給定的數(shù)據(jù)找出一個規(guī)律树枫,對未來的數(shù)據(jù)進行預(yù)測分類直焙。很明顯這是一個線性分類模型,根據(jù)訓(xùn)練模型預(yù)測某數(shù)據(jù)屬于A還是B砂轻。

直覺上訓(xùn)練數(shù)據(jù)的目的是為了找出某個線性方程來表示這個規(guī)律奔誓,在這條線下方的是O,上方的是X,實際這是一個概率統(tǒng)計問題厨喂。如果只給兩個訓(xùn)練數(shù)據(jù)和措,對第三個進行預(yù)測是O or X,兩者皆有可能蜕煌,且概率近似派阱,錯誤概率較高。所以訓(xùn)練數(shù)據(jù)越多斜纪,預(yù)測正確率越高贫母。

預(yù)測下圖A的分類


在給定大數(shù)據(jù)集的基礎(chǔ)上,訓(xùn)練出來模型準(zhǔn)確率會較高盒刚,但也有少數(shù)情況是錯誤的腺劣。


貝葉斯分類是一個比較常用的算法,是統(tǒng)計學(xué)的一種分類方法因块,它是一類利用概率統(tǒng)計進行分類的算法橘原。貝葉斯公式用來描述兩個條件概率之間的關(guān)系,比如 P(A|B) 和 P(B|A)涡上。按照乘法法則趾断,可以立刻導(dǎo)出:P(A∩B) = P(A)P(B|A)=P(B)P(A|B)。如上公式也可變形為:P(B|A) = P(A|B)*P(B) / P(A)吓懈。

用python sklean庫的樸素貝葉斯算法實現(xiàn)這個分類器很容易

#!/usr/bin/python

from prep_terrain_data import makeTerrainData
from class_vis import prettyPicture
from ClassifyNB import classify

#生成訓(xùn)練特征值歼冰、標(biāo)簽
features_train, labels_train, features_test, labels_test = makeTerrainData()

print "features_train",features_train

print "labels_train",labels_train
##創(chuàng)建分類器,訓(xùn)練數(shù)據(jù)
clf = classify(features_train, labels_train)

print "features_test",features_test

print "labels_test",labels_test

# 繪圖
prettyPicture(clf, features_test, labels_test)
prep_terrain_data.py
#!/usr/bin/python
import random

def makeTerrainData(n_points=1000):
    ### make the toy dataset
    random.seed(42)

    #生成3組含有1000個[0,1)的數(shù)據(jù)的數(shù)組
    grade = [random.random() for ii in range(0,n_points)]
    bumpy = [random.random() for ii in range(0,n_points)]
    error = [random.random() for ii in range(0,n_points)]

    #生成1000一個[0,1)的數(shù)耻警,都進行四舍五入
    y = [round(grade[ii]*bumpy[ii]+0.3+0.1*error[ii]) for ii in range(0,n_points)]
    for ii in range(0, len(y)):
        #如果下標(biāo)為ii的grade 或者 bumpy其一大于0.8,設(shè)置相應(yīng)的y值=1
        if grade[ii]>0.8 or bumpy[ii]>0.8:
            y[ii] = 1.0
    #生成二維數(shù)組X
    X = [[gg, ss] for gg, ss in zip(grade, bumpy)]
    print X
    split = int(0.75*n_points)
    # 0~750是訓(xùn)練特征值 751~999 是預(yù)測特征值
    X_train = X[0:split]
    X_test  = X[split:]
    print X_train
    print X_test
    y_train = y[0:split]
    y_test  = y[split:]
    return X_train, y_train, X_test, y_test

ClassifyNB.py
from sklearn.naive_bayes import GaussianNB
###分類器
def classify(features_train, labels_train):

    ### 創(chuàng)建高斯樸素貝葉斯分類器
    clf = GaussianNB()
    ### 擬合傳入的特征值隔嫡,然后可以用訓(xùn)練好的分類器進行預(yù)測
    return clf.fit(features_train,labels_train)

class_div.py
#!/usr/bin/python

import warnings
warnings.filterwarnings("ignore")

import matplotlib
matplotlib.use('agg')

import matplotlib.pyplot as plt
import pylab as pl
import numpy as np
 
def prettyPicture(clf, X_test, y_test):
    x_min = 0.0; x_max = 1.0
    y_min = 0.0; y_max = 1.0

    # Plot the decision boundary. For that, we will assign a color to each
    # point in the mesh [x_min, m_max]x[y_min, y_max].
    h = .01  # step size in the mesh
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

    # Put the result into a color plot
    Z = Z.reshape(xx.shape)
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())

    plt.pcolormesh(xx, yy, Z, cmap=pl.cm.seismic)

    # Plot also the test points
    grade_sig = [X_test[ii][0] for ii in range(0, len(X_test)) if y_test[ii]==0]
    bumpy_sig = [X_test[ii][1] for ii in range(0, len(X_test)) if y_test[ii]==0]
    grade_bkg = [X_test[ii][0] for ii in range(0, len(X_test)) if y_test[ii]==1]
    bumpy_bkg = [X_test[ii][1] for ii in range(0, len(X_test)) if y_test[ii]==1]

    plt.scatter(grade_sig, bumpy_sig, color = "b", label="fast")
    plt.scatter(grade_bkg, bumpy_bkg, color = "r", label="slow")
    plt.legend()
    plt.xlabel("bumpiness")
    plt.ylabel("grade")

    plt.savefig("test.png")

1000組訓(xùn)練數(shù)據(jù)結(jié)果如下:


50000組訓(xùn)練數(shù)據(jù)結(jié)果如下:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市甘穿,隨后出現(xiàn)的幾起案子腮恩,更是在濱河造成了極大的恐慌,老刑警劉巖温兼,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秸滴,死亡現(xiàn)場離奇詭異,居然都是意外死亡募判,警方通過查閱死者的電腦和手機荡含,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來届垫,“玉大人释液,你說我怎么就攤上這事∽按Γ” “怎么了误债?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我寝蹈,道長李命,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任箫老,我火速辦了婚禮封字,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘槽惫。我一直安慰自己周叮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布界斜。 她就那樣靜靜地躺著,像睡著了一般合冀。 火紅的嫁衣襯著肌膚如雪各薇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天君躺,我揣著相機與錄音峭判,去河邊找鬼。 笑死棕叫,一個胖子當(dāng)著我的面吹牛林螃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俺泣,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼疗认,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伏钠?” 一聲冷哼從身側(cè)響起横漏,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎熟掂,沒想到半個月后缎浇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡赴肚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年素跺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誉券。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡指厌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出横朋,到底是詐尸還是另有隱情仑乌,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站晰甚,受9級特大地震影響衙传,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜厕九,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一蓖捶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扁远,春花似錦俊鱼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谷羞,卻和暖如春帝火,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背湃缎。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工犀填, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嗓违。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓九巡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蹂季。 傳聞我的和親對象是個殘疾皇子冕广,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容