Machine Learning | (1) Scikit-learn與特征工程">Machine Learning | (1) Scikit-learn與特征工程
1481
2025-03-31
Machine Learning | 機器學習簡介
Machine Learning | (1) Scikit-learn與特征工程
Machine Learning | (2) sklearn數據集與機器學習組成
Machine Learning | (3) Scikit-learn的分類器算法-k-近鄰
Machine Learning | (4) Scikit-learn的分類器算法-邏輯回歸
Machine Learning | (5) Scikit-learn的分類器算法-樸素貝葉斯
樸素貝葉斯
樸素貝葉斯(Naive Bayes)是一個非常簡單,但是實用性很強的分類模型。樸素貝葉斯分類器的構造基礎是貝葉斯理論。
概率論基礎
概率定義為一件事情發生的可能性。事情發生的概率可以 通過觀測數據中的事件發生次數來計算,事件發生的概率等于改事件發生次數除以所有事件發生的總次數。舉一些例子:
扔出一個硬幣,結果頭像朝上
某天是晴天
某個單詞在未知文檔中出現
我們將事件的概率記作P(X),那么假設這一事件為X屬于樣本空間中的一個類別,那么0≤P(X)≤1。
聯合概率與條件概率
聯合概率
是指兩件事情同時發生的概率。那么我們假設樣本空間有一些天氣數據:
是指兩件事情同時發生的概率。那么我們假設樣本空間有一些天氣數據:
a = "life is short,i like python"
b = "life is too long,i dislike python"
c = "yes,i like python"
label=[1,0,1]
詞袋法的特征值計算
若使用詞袋法,且以訓練集中的文本為詞匯表,即將訓練集中的文本中出現的單詞(不重復)都統計出來作為詞典,那么記單詞的數目為n,這代表了文本的n個維度。以上三個文本在這8個特征維度上的表示為:
上面a',b'就是兩個文檔的詞向量的表現形式,對于貝葉斯公式,從label中我們可以得出兩個類別的概率為:
P(c i =1)=0.5,P(c i =0)=0.5
對于一個給定的文檔類別,每個單詞特征向量的概率是多少呢?
提供一種TF計算方法,為類別y_ky k 每個單詞出現的次數N_iN i ,除以文檔類別y_ky k 中所有單詞出現次數的總數NN:
P i = N /N i
首先求出現總數,對于1類別文檔,在a'中,就可得出總數為1+1+1+1+1+1=6,c'中,總共1+1+1+1=4,故在1類別文檔中總共有10次
每個單詞出現總數,假設是兩個列表,a'+c'就能得出每個單詞出現次數,比如P(w=python)= 2 /10=0.20000000,同樣可以得到其它的單詞概率。最終結果如下:
# 類別1文檔中的詞向量概率
p1 = [0.10000000,0.10000000,0.20000000,0.10000000,0,0.20000000,0,0,0.20000000,0.10000000]
# 類別0文檔中的詞向量概率
p0 = [0.16666667,0.16666667,0.16666667,0,0.16666667,0,0.16666667,0.16666667,0.16666667,0]
拉普拉斯平滑系數
為了避免訓練集樣本對一些特征的缺失,即某一些特征出現的次數為0,在計算P(X 1 ,X 2 ,X 3 ,...,X n ∣Y i )的時候,各個概率相乘最終結果為零,這樣就會影響結果。我們需要對這個概率計算公式做一個平滑處理:
P i = N+α?m / N i +α
其中mm為特征詞向量的個數,\alphaα為平滑系數,當\alpha{=}1α=1,稱為拉普拉斯平滑
sklearn.naive_bayes.MultinomialNB
class sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
"""
:param alpha:float,optional(default = 1.0)加法(拉普拉斯/ Lidstone)平滑參數(0為無平滑)
"""
互聯網新聞分類
讀取20類新聞文本的數據細節
from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(subset='all')
print news.data[0]
上述代碼得出該數據共有18846條新聞,但是這些文本數據既沒有被設定特征,也沒有數字化的亮度。因此,在交給樸素貝葉斯分類器學習之前,要對數據做進一步的處理。
20類新聞文本數據分割
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25,random_state=42)
文本轉換為特征向量進行TF特征抽取
from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer()
# 訓練數據輸入,并轉換為特征向量
X_train = vec.fit_transform(X_train)
# 測試數據轉換
X_test = vec.transform(X_test)
樸素貝葉斯分類器對文本數據進行類別預測
from sklearn.naive_bayes import MultinomialNB
# 使用平滑處理初始化的樸素貝葉斯模型
mnb = MultinomialNB(alpha=1.0)
# 利用訓練數據對模型參數進行估計
mnb.fit(X_train,y_train)
# 對測試驗本進行類別預測。結果存儲在變量y_predict中
y_predict = mnb.predict(X_test)
性能測試
特點分析
樸素貝葉斯模型被廣泛應用于海量互聯網文本分類任務。由于其較強的特征條件獨立假設,使得模型預測所需要估計的參數規模從冪指數量級想線性量級減少,極大的節約了內存消耗和計算時間。到那時,也正是受這種強假設的限制,模型訓練時無法將各個特征之間的聯系考量在內,使得該模型在其他數據特征關聯性較強的分類任務上的性能表現不佳
參考資料
Mac OS scikit-learn 機器學習 深度學習
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。