1、貝葉斯公式的本質: <u>由因到果,由果推因</u>
2、貝葉斯公式:
[圖片上傳中...(wps6.png-5fd624-1618488341725-0)]
1、樸素貝葉斯公式
x1,x2,...xn為特徵集合,y為分類結果
樸素貝葉斯假設各個特徵之間相互獨立
分母相同情況下,我們只要保證分子最大
訓練數據集
long,not_long,sweet,not_sweet,yellow,not_yellow,species
400,100,350,150,450,50,banana
0,300,150,150,300,0,orange
100,100,150,50,50,150,other_fruit
測試數據集
long,sweet,yellow
not_long,not_sweet,not_yellow
not_long,sweet,not_yellow
not_long,sweet,yellow
not_long,sweet,yellow
not_long,not_sweet,not_yellow
long,not_sweet,not_yellow
long,not_sweet,not_yellow
long,not_sweet,not_yellow
long,not_sweet,not_yellow
long,not_sweet,yellow
not_long,not_sweet,yellow
not_long,not_sweet,yellow
long,not_sweet,not_yellow
not_long,not_sweet,yellow
結果
特徵值:[not_long, not_sweet, not_yellow]
預測結果:{'banana': 0.003, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果類別:other_fruit
特徵值:[not_long, sweet, not_yellow]
預測結果:{'banana': 0.006999999999999999, 'orange': 0.0, 'other_fruit': 0.05625000000000001}
水果類別:other_fruit
特徵值:[not_long, sweet, yellow]
預測結果:{'banana': 0.063, 'orange': 0.15, 'other_fruit': 0.018750000000000003}
水果類別:orange
特徵值:[not_long, sweet, yellow]
預測結果:{'banana': 0.063, 'orange': 0.15, 'other_fruit': 0.018750000000000003}
水果類別:orange
特徵值:[not_long, not_sweet, not_yellow]
預測結果:{'banana': 0.003, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果類別:other_fruit
特徵值:[long, not_sweet, not_yellow]
預測結果:{'banana': 0.012, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果類別:other_fruit
特徵值:[long, not_sweet, not_yellow]
預測結果:{'banana': 0.012, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果類別:other_fruit
特徵值:[long, not_sweet, not_yellow]
預測結果:{'banana': 0.012, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果類別:other_fruit
特徵值:[long, not_sweet, not_yellow]
預測結果:{'banana': 0.012, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果類別:other_fruit
特徵值:[long, not_sweet, yellow]
預測結果:{'banana': 0.108, 'orange': 0.0, 'other_fruit': 0.00625}
水果類別:banana
特徵值:[not_long, not_sweet, yellow]
預測結果:{'banana': 0.027, 'orange': 0.15, 'other_fruit': 0.00625}
水果類別:orange
特徵值:[not_long, not_sweet, yellow]
預測結果:{'banana': 0.027, 'orange': 0.15, 'other_fruit': 0.00625}
水果類別:orange
特徵值:[long, not_sweet, not_yellow]
預測結果:{'banana': 0.012, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果類別:other_fruit
特徵值:[not_long, not_sweet, yellow]
預測結果:{'banana': 0.027, 'orange': 0.15, 'other_fruit': 0.00625}
水果類別:orange
⑵ python中有哪些簡單的演算法
首先謝謝邀請,
python中有的演算法還是比較多的?
python之所以火是因為人工智慧的發展,人工智慧的發展離不開演算法!
感覺有本書比較適合你,不過可惜的是這本書沒有電子版,只有紙質的。
這本書對於演算法從基本的入門到實現,循序漸進的介紹,比如裡面就涵蓋了數學建模的常用演算法。
第 1章從數學建模到人工智慧
1.1數學建模1.1.1數學建模與人工智慧1.1.2數學建模中的常見問題1.2人工智慧下的數學1.2.1統計量1.2.2矩陣概念及運算1.2.3概率論與數理統計1.2.4高等數學——導數、微分、不定積分、定積分
第2章 Python快速入門
2.1安裝Python2.1.1Python安裝步驟2.1.2IDE的選擇2.2Python基本操作2.2.1第 一個小程序2.2.2注釋與格式化輸出2.2.3列表、元組、字典2.2.4條件語句與循環語句2.2.5break、continue、pass2.3Python高級操作2.3.1lambda2.3.2map2.3.3filter
第3章Python科學計算庫NumPy
3.1NumPy簡介與安裝3.1.1NumPy簡介3.1.2NumPy安裝3.2基本操作3.2.1初識NumPy3.2.2NumPy數組類型3.2.3NumPy創建數組3.2.4索引與切片3.2.5矩陣合並與分割3.2.6矩陣運算與線性代數3.2.7NumPy的廣播機制3.2.8NumPy統計函數3.2.9NumPy排序、搜索3.2.10NumPy數據的保存
第4章常用科學計算模塊快速入門
4.1Pandas科學計算庫4.1.1初識Pandas4.1.2Pandas基本操作4.2Matplotlib可視化圖庫4.2.1初識Matplotlib4.2.2Matplotlib基本操作4.2.3Matplotlib繪圖案例4.3SciPy科學計算庫4.3.1初識SciPy4.3.2SciPy基本操作4.3.3SciPy圖像處理案例第5章Python網路爬蟲5.1爬蟲基礎5.1.1初識爬蟲5.1.2網路爬蟲的演算法5.2爬蟲入門實戰5.2.1調用API5.2.2爬蟲實戰5.3爬蟲進階—高效率爬蟲5.3.1多進程5.3.2多線程5.3.3協程5.3.4小結
第6章Python數據存儲
6.1關系型資料庫MySQL6.1.1初識MySQL6.1.2Python操作MySQL6.2NoSQL之MongoDB6.2.1初識NoSQL6.2.2Python操作MongoDB6.3本章小結6.3.1資料庫基本理論6.3.2資料庫結合6.3.3結束語
第7章Python數據分析
7.1數據獲取7.1.1從鍵盤獲取數據7.1.2文件的讀取與寫入7.1.3Pandas讀寫操作7.2數據分析案例7.2.1普查數據統計分析案例7.2.2小結
第8章自然語言處理
8.1Jieba分詞基礎8.1.1Jieba中文分詞8.1.2Jieba分詞的3種模式8.1.3標注詞性與添加定義詞8.2關鍵詞提取8.2.1TF-IDF關鍵詞提取8.2.2TextRank關鍵詞提取8.3word2vec介紹8.3.1word2vec基礎原理簡介8.3.2word2vec訓練模型8.3.3基於gensim的word2vec實戰
第9章從回歸分析到演算法基礎
9.1回歸分析簡介9.1.1「回歸」一詞的來源9.1.2回歸與相關9.1.3回歸模型的劃分與應用9.2線性回歸分析實戰9.2.1線性回歸的建立與求解9.2.2Python求解回歸模型案例9.2.3檢驗、預測與控制
第10章 從K-Means聚類看演算法調參
10.1K-Means基本概述10.1.1K-Means簡介10.1.2目標函數10.1.3演算法流程10.1.4演算法優缺點分析10.2K-Means實戰
第11章 從決策樹看演算法升級
11.1決策樹基本簡介11.2經典演算法介紹11.2.1信息熵11.2.2信息增益11.2.3信息增益率11.2.4基尼系數11.2.5小結11.3決策樹實戰11.3.1決策樹回歸11.3.2決策樹的分類
第12章 從樸素貝葉斯看演算法多變193
12.1樸素貝葉斯簡介12.1.1認識樸素貝葉斯12.1.2樸素貝葉斯分類的工作過程12.1.3樸素貝葉斯演算法的優缺點12.23種樸素貝葉斯實戰
第13章 從推薦系統看演算法場景
13.1推薦系統簡介13.1.1推薦系統的發展13.1.2協同過濾13.2基於文本的推薦13.2.1標簽與知識圖譜推薦案例13.2.2小結
第14章 從TensorFlow開啟深度學習之旅
14.1初識TensorFlow14.1.1什麼是TensorFlow14.1.2安裝TensorFlow14.1.3TensorFlow基本概念與原理14.2TensorFlow數據結構14.2.1階14.2.2形狀14.2.3數據類型14.3生成數據十二法14.3.1生成Tensor14.3.2生成序列14.3.3生成隨機數14.4TensorFlow實戰
希望對你有幫助!!!
貴在堅持,自己掌握一些,在工作中不斷打磨,高薪不是夢!!
⑶ 請問你會用python實現貝葉斯網路了嗎
名函數有個限制,就是只能有一個表達式,不用寫return,返回值就是該表達式的結果。
⑷ python分類演算法有哪些
常見的分類演算法有:
K近鄰演算法
決策樹
樸素貝葉斯
SVM
Logistic Regression
⑸ python scikit-learn 有什麼演算法
1,前言
很久不發文章,主要是Copy別人的總感覺有些不爽,所以整理些干貨,希望相互學習吧。不啰嗦,進入主題吧,本文主要時說的為樸素貝葉斯分類演算法。與邏輯回歸,決策樹一樣,是較為廣泛使用的有監督分類演算法,簡單且易於理解(號稱十大數據挖掘演算法中最簡單的演算法)。但其在處理文本分類,郵件分類,拼寫糾錯,中文分詞,統計機器翻譯等自然語言處理范疇較為廣泛使用,或許主要得益於基於概率理論,本文主要為小編從理論理解到實踐的過程記錄。
2,公式推斷
一些貝葉斯定理預習知識:我們知道當事件A和事件B獨立時,P(AB)=P(A)(B),但如果事件不獨立,則P(AB)=P(A)P(B|A)。為兩件事件同時發生時的一般公式,即無論事件A和B是否獨立。當然也可以寫成P(AB)=P(B)P(A|B),表示若要兩件事同事發生,則需要事件B發生後,事件A也要發生。
由上可知,P(A)P(B|A)= P(B)P(A|B)
推出P(B|A)=
其中P(B)為先驗概率,P(B|A)為B的後驗概率,P(A|B)為A的後驗概率(在這里也為似然值),P(A)為A的先驗概率(在這也為歸一化常量)。
由上推導可知,其實樸素貝葉斯法就是在貝葉斯定理基礎上,加上特徵條件獨立假設,對特定輸入的X(樣本,包含N個特徵),求出後驗概率最大值時的類標簽Y(如是否為垃圾郵件),理解起來比邏輯回歸要簡單多,有木有,這也是本演算法優點之一,當然運行起來由於得益於特徵獨立假設,運行速度也更快。
8. Python代碼
# -*-coding: utf-8 -*-
importtime
fromsklearn import metrics
fromsklearn.naive_bayes import GaussianNB
fromsklearn.naive_bayes import MultinomialNB
fromsklearn.naive_bayes import BernoulliNB
fromsklearn.neighbors import KNeighborsClassifier
fromsklearn.linear_model import LogisticRegression
fromsklearn.ensemble import RandomForestClassifier
fromsklearn import tree
fromsklearn.ensemble import GradientBoostingClassifier
fromsklearn.svm import SVC
importnumpy as np
importurllib
# urlwith dataset
url ="-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
#download the file
raw_data= urllib.request.urlopen(url)
#load the CSV file as a numpy matrix
dataset= np.loadtxt(raw_data, delimiter=",")
#separate the data from the target attributes
X =dataset[:,0:7]
#X=preprocessing.MinMaxScaler().fit_transform(x)
#print(X)
y =dataset[:,8]
print(" 調用scikit的樸素貝葉斯演算法包GaussianNB ")
model= GaussianNB()
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的樸素貝葉斯演算法包MultinomialNB ")
model= MultinomialNB(alpha=1)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的樸素貝葉斯演算法包BernoulliNB ")
model= BernoulliNB(alpha=1,binarize=0.0)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的KNeighborsClassifier ")
model= KNeighborsClassifier()
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的LogisticRegression(penalty='l2')")
model= LogisticRegression(penalty='l2')
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的RandomForestClassifier(n_estimators=8) ")
model= RandomForestClassifier(n_estimators=8)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的tree.DecisionTreeClassifier()")
model= tree.DecisionTreeClassifier()
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的GradientBoostingClassifier(n_estimators=200) ")
model= GradientBoostingClassifier(n_estimators=200)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的SVC(kernel='rbf', probability=True) ")
model= SVC(kernel='rbf', probability=True)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
"""
# 預處理代碼集錦
importpandas as pd
df=pd.DataFrame(dataset)
print(df.head(3))
print(df.describe())##描述性分析
print(df.corr())##各特徵相關性分析
##計算每行每列數據的缺失值個數
defnum_missing(x):
return sum(x.isnull())
print("Missing values per column:")
print(df.apply(num_missing, axis=0)) #axis=0代表函數應用於每一列
print(" Missing values per row:")
print(df.apply(num_missing, axis=1).head()) #axis=1代表函數應用於每一行"""
⑹ 貝葉斯實現垃圾郵件分類(Python)
設A,B是兩個事件,且P(B)>0,則在事件B發生的條件下,事件A發生的條件概率(conditional probability)為:
P(y|x)=P(xy)/P(x)
1.由條件概率公式得:
P(xy) = P(y|x).P(x) = P(x|y).P(y)
由全概率公式和乘法公式可得
貝葉斯演算法是監督學習,所以在以往的郵件來往中,有多少正常郵件和垃圾郵件已做過統計
問:如果來一封新的郵件,如何判斷是什麼郵件,垃圾郵件?正常郵件?
比如咱們用判斷該郵件是否是廣告郵件即為垃圾郵件。
加油鴨,希望就在前方。
⑺ 線性代數大師貝葉斯重出江湖,python中的樸素貝葉斯還那麼難嗎
本教程將使您了解如何使用 Python 的 Scikit-learn 包構建和評估樸素貝葉斯分類器。
假設您是產品經理,您想將客戶評論分為正面和負面類別。 或者作為貸款經理,您想確定哪些貸款申請人是安全的還是有風險的? 作為醫療保健分析師,您希望預測哪些患者可能患有糖尿病。 所有示例都存在對評論、貸款申請人和患者進行分類的相同問題。
樸素貝葉斯是最直接、最快速的分類演算法,適用於大量數據。 樸素貝葉斯分類器成功地用於各種應用,例如垃圾郵件過濾、文本分類、 情感 分析和推薦系統。 它使用貝葉斯概率定理來預測未知類。
在本教程中,您將了解以下所有內容:
無論何時執行分類,第一步都是了解問題並識別潛在的特徵和標簽。 特徵是影響標簽結果的那些特徵或屬性。 例如,在貸款分配的情況下,銀行經理確定客戶的職業、收入、年齡、地點、以前的貸款 歷史 、交易 歷史 和信用評分。 這些特徵被稱為幫助模型對客戶進行分類的特徵。
分類有兩個階段,學習階段和評估階段。 在學習階段,分類器在給定的數據集上訓練其模型,在評估階段,它測試分類器的性能。 性能是根據各種參數進行評估的,例如准確度、誤差、精度和召回率。
2 什麼是樸素貝葉斯分類器?
樸素貝葉斯是一種基於貝葉斯定理的統計分類技術。 它是最簡單的監督學習演算法之一。 樸素貝葉斯分類器是一種快速、准確和可靠的演算法。 樸素貝葉斯分類器在大型數據集上具有很高的准確性和速度。
樸素貝葉斯分類器假設類中特定特徵的效果獨立於其他特徵 。 例如,貸款申請人是否可取取決於他/她的收入、以前的貸款和交易 歷史 、年齡和位置。 即使這些特徵相互依賴,這些特徵仍然被獨立考慮 。 這個假設簡化了計算,這就是為什麼它被認為是「樸素」的。 這種假設稱為類條件獨立 。
此節涉及大量線性代數與概率的知識,對理論研究有高要求的讀者可參考更專業的書籍,只關心如何應用的讀者可以跳過此節。我也只關心應用,因此,咱們一起跳過此節吧。留個標題只為結構完整性。哈哈哈 希望數學老師原諒我
4 Scikit-learn 中的分類器構建
1)定義數據集
在此示例中,您可以使用具有三列的虛擬數據集:天氣、溫度和是否出去玩。 前兩個是特徵(天氣、溫度),另一個是標簽。
2)編碼特徵
首先,您需要將這些字元串標簽轉換為數字。 例如:'Overcast', 'Rainy', 'Sunny' as 0, 1, 2。這稱為標簽編碼。 Scikit-learn 提供了 LabelEncoder 庫,用於對標簽進行編碼,其值在 0 到 1 之間,小於離散類的數量。
同樣,您也可以對 temp 和 play 列進行編碼。
現在將這兩個特徵(天氣和溫度)組合在一個變數(元組列表)中。
3)生成模型
在以下步驟中使用樸素貝葉斯分類器生成模型:
這里,1 表示玩家可以「出去玩」。
到目前為止,您已經學習了使用二進制標簽的樸素貝葉斯分類。 現在您將了解樸素貝葉斯中的多類分類。 這被稱為多項樸素貝葉斯分類。 例如,如果您想對有關技術、 娛樂 、政治或 體育 的新聞文章進行分類。
在模型構建部分,您可以使用葡萄酒數據集,這是一個非常著名的多類分類問題。 「這個數據集是對在義大利同一地區種植但來自三種不同品種的葡萄酒進行化學分析的結果。」
數據集包含 13 個特徵(酒精、蘋果酸、灰分、alcalinity_of_ash、鎂、總酚、黃酮類化合物、非黃酮類酚、原花青素、顏色強度、色調、od280/od315_of_diluted_wines、脯氨酸)和葡萄酒品種類型。 該數據有3種酒類Class_0、Class_1和Class_3。 在這里,您可以建立一個模型來對葡萄酒的類型進行分類。
該數據集在 scikit-learn 庫中可用。
1)載入數據
讓我們首先從 scikit-learn 數據集中載入所需的 wine 數據集。
2) 探索 數據
您可以列印目標和特徵名稱,以確保您擁有正確的數據集,如下所示:
稍微 探索 一下您的數據總是不會錯的,這樣您就知道自己在處理什麼。 在這里,您可以看到列印了數據集的前五行,以及整個數據集的目標變數。
3)拆分數據
首先,您將列分為因變數和自變數(或特徵和標簽)。 然後將這些變數拆分為訓練集和測試集。
4)生成模型
拆分後,您將在訓練集上生成一個隨機森林模型,並對測試集特徵進行預測。
5)評估模型
模型生成後,使用實際值和預測值檢查准確性。
5 零概率問題
假設數據集中沒有風險貸款的元組,在這種情況下,後驗概率為零,模型無法做出預測。 這個問題被稱為零概率,因為特定類的出現為零。
此類問題的解決方案是拉普拉斯校正(Laplacian correction)或拉普拉斯變換(Laplace Transformation)。 拉普拉斯校正是平滑技術之一。 在這里,您可以假設數據集足夠大,每個類添加一行不會對估計的概率產生影響。 這將克服概率值為零的問題。
例如:假設對於有風險的類貸款,資料庫中有 1000 個訓練元組。 在這個資料庫中,收入列有 0 個元組代表低收入,990 個元組代表中等收入,10 個元組代表高收入。 在沒有拉普拉斯校正的情況下,這些事件的概率為 0、0.990(來自 990/1000)和 0.010(來自 10/1000)
現在,對給定的數據集應用拉普拉斯校正。 讓我們為每個收入-價值對再添加 1 個元組。 這些事件的概率:
6 優點
在本教程中,您了解了樸素貝葉斯演算法、它的工作原理、樸素貝葉斯假設、問題、實現、優點和缺點。 在此過程中,您還學習了 scikit-learn 中二元和多項類的模型構建和評估。
樸素貝葉斯是最直接和最有效的演算法。 盡管機器學習在過去幾年取得了重大進展,但它已經證明了它的價值。 它已成功部署在從文本分析到推薦引擎的許多應用程序中。
⑻ python sklearn 樸素貝葉斯分類
樸素貝葉斯分類器(Naïve Bayes classifier)是一種相當簡單常見但是又相當有效的分類演算法,在監督學習領域有著很重要的應用。這個演算法叫做Naïve Bayes,但是它到底naive(樸素)在哪裡呢?樸素貝葉斯分類器採用了「屬性條件獨立假設」(attribute conditional independent assumption),用通俗的話來講,就是一個屬性,或者是我們所說的特徵,相互之間是獨立的;也正是有了這個假設,樸素貝葉斯分類器才能做這么多事情,在監督學習的世界裡有著這么廣泛的應用
簡單來說:基於概率思想的簡單有效的分類模型。
參考資料:
https://scikit-learn.org/stable/user_guide.html
https://scikit-learn.org/stable/moles/naive_bayes.html
https://zhuanlan.hu.com/p/26055646
https://zhuanlan.hu.com/p/26262151
https://blog.csdn.net/YangWei_19/article/details/79971257
舉個例子:西瓜書裡面,有好多不同屬性的西瓜。我們從一片瓜地里做出的大量西瓜得出數據
買瓜的阿姨挑了一個,發現是花條紋清晰、敲擊清脆、瓜蒂枯老,(可能這個混合還是樣本9999中沒出現的組合類型)請問這個瓜甜/不甜的概率 ?
假設花條紋、敲擊聲音、瓜蒂鮮嫩度之間是無關的屬性(樸素),利用貝葉斯概率公式,我們可以得到某些熟悉出現的概率。
對於未出現的組合屬性,有拉普拉斯平滑估算後驗概率。
⑼ 樸素貝葉斯分類演算法的sklearn實現
1、背景
《機器學習實戰》當中,用python根據貝葉斯公式實現了基本的分類演算法。現在來看看用sklearn,如何實現。還拿之前的例子,對帖子的分類。數據如下:
補充:題目的值左邊是幾個人的評論,右邊是評論屬於侮辱類(1)、正常類(0),需要進行文本分類,且再有新的文本過來時能自動劃分至0或1。
2、分類
(1)演算法的准備
通過查看sklearn的訓練模型函數,fit(X, Y),發現只需要准備兩個參數。一個是數據的矩陣,另一個是數據的分類數組。首先就是將以上的文本轉化成矩陣。
在前一章其實已經講解過如何將文本轉化成矩陣。這里將示意的再補充下。
a.首先選取所有的單詞,形成列,也可理解為屬性。例如:
b.其次將遍歷每個文本,填滿上述列的值。文本出現過列的次,填一。沒有出現過填0。比如第一句就是:my dog has flea problems help please,可表示為:
同理所有的文本都可如此表示,所以就形成了一個數字的矩陣。
(2)beyes模型的選擇
在完成數據的准備以後,就可以直接調用sklearn的模型和函數完成模型的訓練啦。但在beyes模型的選擇的時候發現,beyes下有多個模型可選擇,所以這個會讓人糾結。接下來共同了解下這些模型:
a.高斯模型(GaussianNB)
高斯模型是對於每個屬性的值是連續的,且服從高斯分布時可使用:
比如人的身高,比如花的高度等等。當然你也可將這些數據離散化,比如按等距劃分、等頻劃分成離散的值,但可能效果都沒有直接用高斯模型來計算的好。
用法:class sklearn.naive_bayes.GaussianNB
參數:無
b.多項式模型(MultinominalNB)
如果大部分是多元離散值,則採用多項式模型要好些。多項式模型,通常就是構造參數向量,然後通過極大似然估計來尋求參數的最有值。
這里只簡單的略列一些公式,具體可查詢更多資料。從這個計算過程中可得出,這里引入啦一個平滑先驗值alpha,這個值在模型訓練的時候也會用到。通常alpha>0,可引入不在訓練集的特徵,尤其當alpha=1,成為拉普拉絲平滑。具體alpha取值對模型的影響可附件的圖。
用法:class sklearn.naive_bayes.MultinomialNB(alpha=1.0,fit_prior=True,class_prior=None)
參數:
alpha:浮點數,就是上述說的引入平滑的值;
fit_prior:bool值,如果為Ture,則不用去學習P(y=ck),以均勻分布替代,否則則去學習P(y=ck)(不懂)
class_prior:一個數組。它指定了每個分類的先驗概率P(y=c1),P(y=c2)…..,若指定了該參數
則每個分類的先驗概率無需學習 (不懂)
c.伯努利模型(BernoulliNB)
如果特徵值為二元離散值或是稀疏的多元離散值,則可採用伯努利模型。
公式:class sklearn.naive_bayes.BernoulliNB(alpha=1.0,binarize=0.0,fit_prior=Ture,
class_prior=None)
參數:
binarize:一個浮點數或者None,如果為浮點數則以該數值為界,特徵值大於它的取1,小於的為0 。如果為None,假定原始數據已經二值化
其它參數同上。
通過以上的模型對比和分析,由於文本分析轉化後是很多二項取值的稀疏矩陣,因此選取伯努利模型效果會更佳。
補充:alpha、binarize值對模型效果的影響
⑽ 貝葉斯演算法能做什麼 python
貝葉斯分類演算法的設計與實現 求源碼 最好能處理圖像型垃圾郵件