Scikit Learn學習筆記 樸素貝葉斯

2021-08-25 05:55:38 字數 3462 閱讀 3996

樸素貝葉斯模型是一組非常簡單快速的分類方法啊,通常適用於維度非常高的資料集。因為執行速度快,而且可調引數少,因此非常適合為分類問題提供快速粗糙的基本方案。之所以成為「樸素」或「樸素貝葉斯」,是因為如果對每一種標籤的生成模型(用於計算每個標籤的p(

特徵|li)p

(特徵|

li)進行非常簡單的假設,就能找到每種型別生成模型的近似解,然後就可以使用貝葉斯分類。

高斯樸素貝葉斯
高斯樸素貝葉斯分類器假設每個標籤的資料都服從簡單的高斯分布,且變數無協方差(即線性無關)。只要找到每個標籤的所有的所有樣本點均值和標準差,在定義乙個高斯分布,就可以擬合模型了。

#生成實驗資料

#使用高斯樸素貝葉斯進行分類

from sklearn.*****_bayes import gaussiannb

model = gaussiannb()

model.fit(x, y)

rng = np.random.randomstate(0)

xnew = [-6, -14] + [14, 18]* rng.rand(2000, 2)

ynew = model.predict(xnew)

#將這些新資料畫出來,看看決策邊界的位置

多項式樸素貝葉斯

另外一種常用的假設是多項式樸素貝葉斯,它假設特徵是由乙個簡單的多項式分布生成的。多項式分布可以描述各種型別樣本出現的次數,因此多項式樸素貝葉斯非常適合描述出現次數或者出現次數比例的特徵。下面使用多項式樸素貝葉斯進行文字分類。

import seaborn as sns;sns.set()

#應用多項式樸素貝葉斯進行文字分類

from sklearn.datasets import fetch_20newsgroups

data = fetch_20newsgroups()

# data.target_names

categories = ['talk.religion.misc', 'soc.religion.christian', 'sci.space',

'comp.graphics']

train = fetch_20newsgroups(subset = 'train', categories=categories)

test = fetch_20newsgroups(subset='test', categories=categories)

# print(train.data[5])

#為了能讓這些資料用於機器學習,需要將每個字串的內容轉換成數值向量。可以建立乙個管道,

#將tf-idf(term frequency-inverse document frequency)向量化方法與多項式樸素貝葉斯分類器組合在一起

from sklearn.feature_extraction.text import tfidfvectorizer

from sklearn.*****_bayes import multinomialnb

from sklearn.pipeline import make_pipeline

model = make_pipeline(tfidfvectorizer(), multinomialnb())

#通過這個管道,就可以將模型應用到訓練資料上,**出每個測試資料的標籤

model.fit(train.data, train.target)

labels = model.predict(test.data)

#這樣就得到了每個測試資料的**標籤,可以進一步的評估評估器的效能了。

#用混淆矩陣統計測試資料的真實標籤與**標籤的結果

#定義函式,快速返回字串的**結果

defpredict_category

(s, train=train, model=model):

pred = model.predict([s])

return train.target_names[pred[0]]

#測試模型的**效果

print(predict_category('sending a payload to the iss'))

print(predict_category('discussing islam vs atheism'))

print(predict_category('determing the screen resolution'))

#輸出結果:

sci.space

soc.religion.christian

comp.graphics

雖然這個分類器不會比直接用字元內單詞(加權的)頻次構建的簡易概率模型更加複雜,但它的分類效果卻非常好。由此可見,即使是乙個非常簡單的演算法,只要能合理利用並進行大量高維的資料訓練,就可以獲得意想不到的效果。

Scikit Learn學習筆記系列

關於python中的機器學習模組scikit learn模組的學習 使用筆記,我要整理成乙個系列。每一篇學習筆記包括原始碼解析和例項展示。這個既敦促自己不斷的學習下去,也方便日後複習。1 scikit learn學習筆記 開啟旅行 2 scikit learn學習筆記 ordinary least ...

scikit learn文件學習筆記

一 獲取資料,處理資料 coding utf 8 一 載入資料 import numpy as np import urllib url raw data urllib.urlopen url dataset np.loadtxt raw data,delimiter 讀入資料,用逗號分隔 x da...

用scikit learn學習DBSCAN聚類

在dbscan密度聚類演算法中,我們對dbscan聚類演算法的原理做了總結,本文就對如何用scikit learn來學習dbscan聚類做乙個總結,重點講述引數的意義和需要調參的引數。在scikit learn中,dbscan演算法類為sklearn.cluster.dbscan。要熟練的掌握用db...