樸素貝葉斯詳解及中文輿情分析(附代碼實踐)

2021-01-18 機器學習算法與Python學習

作者|楊秀璋  整理|AI科技大本營

本文主要講述樸素貝葉斯分類算法並實現中文數據集的輿情分析案例,希望這篇文章對大家有所幫助,提供些思路。內容包括:


1.樸素貝葉斯數學原理知識

2.naive_bayes用法及簡單案例

3.中文文本數據集預處理

4.樸素貝葉斯中文文本輿情分析


本篇文章為基礎性文章,希望對你有所幫助,如果文章中存在錯誤或不足之處,還請海涵。同時,推薦大家閱讀我以前的文章了解基礎知識。


▌一. 樸素貝葉斯數學原理知識


該基礎知識部分引用文章"機器學習之樸素貝葉斯(NB)分類算法與Python實現"(https://blog.csdn.net/moxigandashu/article/details/71480251),也強烈推薦大家閱讀博主moxigandashu的文章,寫得很好。同時作者也結合概率論講解,提升下自己較差的數學。


樸素貝葉斯(Naive Bayesian)是基於貝葉斯定理和特徵條件獨立假設的分類方法,它通過特徵計算分類的概率,選取概率大的情況,是基於概率論的一種機器學習分類(監督學習)方法,被廣泛應用於情感分類領域的分類器。


下面簡單回顧下概率論知識:


1.什麼是基於概率論的方法?


通過概率來衡量事件發生的可能性。概率論和統計學是兩個相反的概念,統計學是抽取部分樣本統計來估算總體情況,而概率論是通過總體情況來估計單個事件或部分事情的發生情況。概率論需要已知數據去預測未知的事件。


例如,我們看到天氣烏雲密布,電閃雷鳴並陣陣狂風,在這樣的天氣特徵(F)下,我們推斷下雨的概率比不下雨的概率大,也就是p(下雨)>p(不下雨),所以認為待會兒會下雨,這個從經驗上看對概率進行判斷。而氣象局通過多年長期積累的數據,經過計算,今天下雨的概率p(下雨)=85%、p(不下雨)=15%,同樣的 p(下雨)>p(不下雨),因此今天的天氣預報肯定預報下雨。這是通過一定的方法計算概率從而對下雨事件進行判斷。



2.條件概率


若Ω是全集,A、B是其中的事件(子集),P表示事件發生的概率,則條件概率表示某個事件發生時另一個事件發生的概率。假設事件B發生後事件A發生的概率為:



設P(A)>0,則有 P(AB) = P(B|A)P(A) = P(A|B)P(B)。


設A、B、C為事件,且P(AB)>0,則有 P(ABC) = P(A)P(B|A)P(C|AB)。

現在A和B是兩個相互獨立的事件,其相交概率為 P(A∩B) = P(A)P(B)。


3.全概率公式


設Ω為試驗E的樣本空間,A為E的事件,B1、B2、....、Bn為Ω的一個劃分,且P(Bi)>0,其中i=1,2,...,n,則:


P(A) = P(AB1)+P(AB2)+...+P(ABn)

        = P(A|B1)P(B1)+P(A|B2)P(B2)+...+P(A|Bn)P(Bn)



全概率公式主要用途在於它可以將一個複雜的概率計算問題,分解為若干個簡單事件的概率計算問題,最後應用概率的可加性求出最終結果。


示例:有一批同一型號的產品,已知其中由一廠生成的佔30%,二廠生成的佔50%,三長生成的佔20%,又知這三個廠的產品次品概率分別為2%、1%、1%,問這批產品中任取一件是次品的概率是多少?


參考百度文庫資料:

https://wenku.baidu.com/view/05d0e30e856a561253d36fdb.html


4.貝葉斯公式


設Ω為試驗E的樣本空間,A為E的事件,如果有k個互斥且有窮個事件,即B1、B2、....、Bk為Ω的一個劃分,且P(B1)+P(B2)+...+P(Bk)=1,P(Bi)>0(i=1,2,...,k),則:



P(A):事件A發生的概率;

P(A∩B):事件A和事件B同時發生的概率;

P(A|B):事件A在時間B發生的條件下發生的概率;

意義:現在已知時間A確實已經發生,若要估計它是由原因Bi所導致的概率,則可用Bayes公式求出。


5.先驗概率和後驗概率


先驗概率是由以往的數據分析得到的概率,泛指一類事物發生的概率,根據歷史資料或主觀判斷未經證實所確定的概率。後驗概率而是在得到信息之後再重新加以修正的概率,是某個特定條件下一個具體事物發生的概率。



6.樸素貝葉斯分類


貝葉斯分類器通過預測一個對象屬於某個類別的概率,再預測其類別,是基於貝葉斯定理而構成出來的。在處理大規模數據集時,貝葉斯分類器表現出較高的分類準確性。


假設存在兩種分類:


  1) 如果p1(x,y)>p2(x,y),那麼分入類別1

  2) 如果p1(x,y)<p2(x,y),那麼分入類別2


引入貝葉斯定理即為:


其中,x、y表示特徵變量,ci表示分類,p(ci|x,y)表示在特徵為x,y的情況下分入類別ci的概率,因此,結合條件概率和貝葉斯定理有:


  1) 如果p(c1|x,y)>p(c2,|x,y),那麼分類應當屬於類別c1

  2) 如果p(c1|x,y)<p(c2,|x,y),那麼分類應當屬於類別c2


貝葉斯定理最大的好處是可以用已知的概率去計算未知的概率,而如果僅僅是為了比較p(ci|x,y)和p(cj|x,y)的大小,只需要已知兩個概率即可,分母相同,比較p(x,y|ci)p(ci)和p(x,y|cj)p(cj)即可。



7.示例講解


假設存在14天的天氣情況和是否能打網球,包括天氣、氣溫、溼度、風等,現在給出新的一天天氣情況,需要判斷我們這一天可以打網球嗎?首先統計出各種天氣情況下打網球的概率,如下圖所示。



接下來是分析過程,其中包括打網球yse和不打網球no的計算方法。



最後計算結果如下,不去打網球概率為79.5%。



8.優缺點



▌二. naive_bayes用法及簡單案例


scikit-learn機器學習包提供了3個樸素貝葉斯分類算法:


GaussianNB(高斯樸素貝葉斯)

MultinomialNB(多項式樸素貝葉斯)

BernoulliNB(伯努利樸素貝葉斯)


1.高斯樸素貝葉斯


調用方法為:sklearn.naive_bayes.GaussianNB(priors=None)。

下面隨機生成六個坐標點,其中x坐標和y坐標同為正數時對應類標為2,x坐標和y坐標同為負數時對應類標為1。通過高斯樸素貝葉斯分類分析的代碼如下:


1# -*- coding: utf-8 -*-
2import numpy as np
3from sklearn.naive_bayes import GaussianNB
4X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
5Y = np.array([1, 1, 1, 2, 2, 2])
6clf = GaussianNB()
7clf.fit(X, Y)      
8pre = clf.predict(X)
9print u"數據集預測結果:", pre
10print clf.predict([[-0.8, -1]])
11
12clf_pf = GaussianNB()
13clf_pf.partial_fit(X, Y, np.unique(Y)) #增加一部分樣本
14print clf_pf.predict([[-0.8, -1]])


輸出如下圖所示,可以看到[-0.8, -1]預測結果為1類,即x坐標和y坐標同為負數。



2.多項式樸素貝葉斯


多項式樸素貝葉斯:sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)主要用於離散特徵分類,例如文本分類單詞統計,以出現的次數作為特徵值。


參數說明:alpha為可選項,默認1.0,添加拉普拉修/Lidstone平滑參數;fit_prior默認True,表示是否學習先驗概率,參數為False表示所有類標記具有相同的先驗概率;class_prior類似數組,數組大小為(n_classes,),默認None,類先驗概率。


3.伯努利樸素貝葉斯


伯努利樸素貝葉斯:sklearn.naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True,class_prior=None)。類似於多項式樸素貝葉斯,也主要用於離散特徵分類,和MultinomialNB的區別是:MultinomialNB以出現的次數為特徵值,BernoulliNB為二進位或布爾型特性


下面是樸素貝葉斯算法常見的屬性和方法。


1) class_prior_屬性

觀察各類標記對應的先驗概率,主要是class_prior_屬性,返回數組。代碼如下:


1print clf.class_prior_
2#[ 0.5  0.5]


2) class_count_屬性


獲取各類標記對應的訓練樣本數,代碼如下:


1print clf.class_count_
2#[ 3.  3.]


3) theta_屬性

獲取各個類標記在各個特徵上的均值,代碼如下:


1print clf.theta_
2#[[-2.         -1.33333333]
3# [ 2.          1.33333333]]


4) sigma_屬性


獲取各個類標記在各個特徵上的方差,代碼如下:


1print clf.theta_
2#[[-2.         -1.33333333]
3# [ 2.          1.33333333]]


5) fit(X, y, sample_weight=None)


訓練樣本,X表示特徵向量,y類標記,sample_weight表各樣本權重數組。

1#設置樣本不同的權重
2clf.fit(X,Y,np.array([0.05,0.05,0.1,0.1,0.1,0.2,0.2,0.2]))
3print clf  
4print clf.theta_  
5print clf.sigma_ 


輸出結果如下所示:

1GaussianNB()
2[[-2.25 -1.5 ]
3 [ 2.25  1.5 ]]
4[[ 0.6875  0.25  ]
5 [ 0.6875  0.25  ]]


6) partial_fit(X, y, classes=None, sample_weight=None)


增量式訓練,當訓練數據集數據量非常大,不能一次性全部載入內存時,可以將數據集劃分若干份,重複調用partial_fit在線學習模型參數,在第一次調用partial_fit函數時,必須制定classes參數,在隨後的調用可以忽略。

1import numpy as np  
2from sklearn.naive_bayes import GaussianNB  
3X = np.array([[-1,-1], [-2,-2], [-3,-3], [-4,-4], [-5,-5], 
4              [1,1], [2,2], [3,3]])  
5y = np.array([1, 1, 1, 1, 1, 2, 2, 2])  
6clf = GaussianNB()  
7clf.partial_fit(X,y,classes=[1,2],
8                sample_weight=np.array([0.05,0.05,0.1,0.1,0.1,0.2,0.2,0.2]))  
9print clf.class_prior_ 
10print clf.predict([[-6,-6],[4,5],[2,5]])  
11print clf.predict_proba([[-6,-6],[4,5],[2,5]])


輸出結果如下所示:


1[ 0.4  0.6]
2[1 2 2]
3[[  1.00000000e+00   4.21207358e-40]
4 [  1.12585521e-12   1.00000000e+00]
5 [  8.73474886e-11   1.00000000e+00]]


可以看到點[-6,-6]預測結果為1,[4,5]預測結果為2,[2,5]預測結果為2。同時,predict_proba(X)輸出測試樣本在各個類標記預測概率值。


7) score(X, y, sample_weight=None)


返回測試樣本映射到指定類標記上的得分或準確率。


1pre = clf.predict([[-6,-6],[4,5],[2,5]])  
2print clf.score([[-6,-6],[4,5],[2,5]],pre)
3#1.0


最後給出一個高斯樸素貝葉斯算法分析小麥數據集案例,代碼如下:


1# -*- coding: utf-8 -*-
2#第一部分 載入數據集
3import pandas as pd
4X = pd.read_csv("seed_x.csv")
5Y = pd.read_csv("seed_y.csv")
6print X
7print Y
8
9#第二部分 導入模型
10from sklearn.naive_bayes import GaussianNB  
11clf = GaussianNB()
12clf.fit(X, Y)      
13pre = clf.predict(X)
14print u"數據集預測結果:", pre
15
16#第三部分 降維處理
17from sklearn.decomposition import PCA
18pca = PCA(n_components=2)
19newData = pca.fit_transform(X)
20print newData[:4]
21
22#第四部分 繪製圖形
23import matplotlib.pyplot as plt
24L1 = [n[0] for n in newData]
25L2 = [n[1] for n in newData]
26plt.scatter(L1,L2,c=pre,s=200)
27plt.show()


輸出如下圖所示:



最後對數據集進行評估,主要調用sklearn.metrics類中classification_report函數實現的,代碼如下:


1from sklearn.metrics import classification_report
2print(classification_report(Y, pre))


運行結果如下所示,準確率、召回率和F特徵為91%。



補充下Sklearn機器學習包常用的擴展類。


1#監督學習
2sklearn.neighbors #近鄰算法
3sklearn.svm #支持向量機
4sklearn.kernel_ridge #核-嶺回歸
5sklearn.discriminant_analysis #判別分析
6sklearn.linear_model #廣義線性模型
7sklearn.ensemble #集成學習
8sklearn.tree #決策樹
9sklearn.naive_bayes #樸素貝葉斯
10sklearn.cross_decomposition #交叉分解
11sklearn.gaussian_process #高斯過程
12sklearn.neural_network #神經網絡
13sklearn.calibration #概率校準
14sklearn.isotonic #保守回歸
15sklearn.feature_selection #特徵選擇
16sklearn.multiclass #多類多標籤算法
17
18#無監督學習
19sklearn.decomposition #矩陣因子分解sklearn.cluster # 聚類
20sklearn.manifold # 流形學習
21sklearn.mixture # 高斯混合模型
22sklearn.neural_network # 無監督神經網絡
23sklearn.covariance # 協方差估計
24
25#數據變換
26sklearn.feature_extraction # 特徵提取sklearn.feature_selection # 特徵選擇
27sklearn.preprocessing # 預處理
28sklearn.random_projection # 隨機投影
29sklearn.kernel_approximation # 核逼近


▌三. 中文文本數據集預處理


假設現在需要判斷一封郵件是不是垃圾郵件,其步驟如下:


數據集拆分成單詞,中文分詞技術

計算句子中總共多少單詞,確定詞向量大小

句子中的單詞轉換成向量,BagofWordsVec

計算P(Ci),P(Ci|w)=P(w|Ci)P(Ci)/P(w),表示w特徵出現時,該樣本被分為Ci類的條件概率

判斷P(w[i]C[0])和P(w[i]C[1])概率大小,兩個集合中概率高的為分類類標


下面講解一個具體的實例。


1.數據集讀取


假設存在如下所示10條Python書籍訂單評價信息,每條評價信息對應一個結果(好評和差評),如下圖所示:



數據存儲至CSV文件中,如下圖所示。



下面採用pandas擴展包讀取數據集。代碼如下所示:


1# -*- coding: utf-8 -*-
2import numpy as np
3import pandas as pd
4
5data = pd.read_csv("data.csv",encoding='gbk')
6print data
7
8#取表中的第1列的所有值
9print u"獲取第一列內容"
10col = data.iloc[:,0]  
11#取表中所有值  
12arrs = col.values
13for a in arrs:
14    print a


輸出結果如下圖所示,同時可以通過data.iloc[:,0]獲取第一列的內容。


2.中文分詞及過濾停用詞


接下來作者採用jieba工具進行分詞,並定義了停用詞表,即:

stopwords = {}.fromkeys([',', '。', '!', '這', '我', '非常'])

完整代碼如下所示:


1# -*- coding: utf-8 -*-
2import numpy as np
3import pandas as pd
4import jieba
5
6data = pd.read_csv("data.csv",encoding='gbk')
7print data
8
9#取表中的第1列的所有值
10print u"獲取第一列內容"
11col = data.iloc[:,0]  
12#取表中所有值  
13arrs = col.values
14#去除停用詞  
15stopwords = {}.fromkeys([',', '。', '!', '這', '我', '非常'])
16
17print u"\n中文分詞後結果:"
18for a in arrs:
19    #print a
20    seglist = jieba.cut(a,cut_all=False)     #精確模式  
21    final = ''
22    for seg in seglist:
23        seg = seg.encode('utf-8')
24        if seg not in stopwords: #不是停用詞的保留
25            final += seg
26    seg_list = jieba.cut(final, cut_all=False) 
27    output = ' '.join(list(seg_list))         #空格拼接
28    print output


然後分詞後的數據如下所示,可以看到標點符號及「這」、「我」等詞已經過濾。



3.詞頻統計


接下來需要將分詞後的語句轉換為向量的形式,這裡使用CountVectorizer實現轉換為詞頻。如果需要轉換為TF-IDF值可以使用TfidfTransformer類。詞頻統計完整代碼如下所示:


1# -*- coding: utf-8 -*-
2import numpy as np
3import pandas as pd
4import jieba
5
6data = pd.read_csv("data.csv",encoding='gbk')
7print data
8
9#取表中的第1列的所有值
10print u"獲取第一列內容"
11col = data.iloc[:,0]  
12#取表中所有值  
13arrs = col.values
14#去除停用詞  
15stopwords = {}.fromkeys([',', '。', '!', '這', '我', '非常'])
16
17print u"\n中文分詞後結果:"
18corpus = []
19for a in arrs:
20    #print a
21    seglist = jieba.cut(a,cut_all=False)     #精確模式  
22    final = ''
23    for seg in seglist:
24        seg = seg.encode('utf-8')
25        if seg not in stopwords: #不是停用詞的保留
26            final += seg
27    seg_list = jieba.cut(final, cut_all=False) 
28    output = ' '.join(list(seg_list))         #空格拼接
29    print output
30    corpus.append(output)
31
32#計算詞頻
33from sklearn.feature_extraction.text import CountVectorizer
34from sklearn.feature_extraction.text import TfidfTransformer
35
36vectorizer = CountVectorizer() #將文本中的詞語轉換為詞頻矩陣  
37X = vectorizer.fit_transform(corpus) #計算個詞語出現的次數    
38word = vectorizer.get_feature_names() #獲取詞袋中所有文本關鍵詞  
39for w in word: #查看詞頻結果
40    print w,
41print ''
42print X.toarray()  


輸出結果如下所示,包括特徵詞及對應的10行數據的向量,這就將中文文本數據集轉換為了數學向量的形式,接下來就是對應的數據分析了。



如下所示得到一個詞頻矩陣,每行數據集對應一個分類類標,可以預測新的文檔屬於哪一類。



TF-IDF相關知識推薦我的文章: [python] 使用scikit-learn工具計算文本TF-IDF值(https://blog.csdn.net/eastmount/article/details/50323063)


▌四. 樸素貝葉斯中文文本輿情分析


最後給出樸素貝葉斯分類算法分析中文文本數據集的完整代碼。


1# -*- coding: utf-8 -*-
2import numpy as np
3import pandas as pd
4import jieba
5
6#http://blog.csdn.net/eastmount/article/details/50323063
7#http://blog.csdn.net/eastmount/article/details/50256163
8#http://blog.csdn.net/lsldd/article/details/41542107
9
10####################################
11#         第一步 讀取數據及分詞
12#
13data = pd.read_csv("data.csv",encoding='gbk')
14print data
15
16#取表中的第1列的所有值
17print u"獲取第一列內容"
18col = data.iloc[:,0]  
19#取表中所有值  
20arrs = col.values
21
22#去除停用詞  
23stopwords = {}.fromkeys([',', '。', '!', '這', '我', '非常'])
24
25print u"\n中文分詞後結果:"
26corpus = []
27for a in arrs:
28    #print a
29    seglist = jieba.cut(a,cut_all=False)     #精確模式  
30    final = ''
31    for seg in seglist:
32        seg = seg.encode('utf-8')
33        if seg not in stopwords: #不是停用詞的保留
34            final += seg
35    seg_list = jieba.cut(final, cut_all=False) 
36    output = ' '.join(list(seg_list))         #空格拼接
37    print output
38    corpus.append(output)
39
40####################################
41#         第二步 計算詞頻
42#
43from sklearn.feature_extraction.text import CountVectorizer
44from sklearn.feature_extraction.text import TfidfTransformer
45
46vectorizer = CountVectorizer() #將文本中的詞語轉換為詞頻矩陣  
47X = vectorizer.fit_transform(corpus) #計算個詞語出現的次數    
48word = vectorizer.get_feature_names() #獲取詞袋中所有文本關鍵詞  
49for w in word: #查看詞頻結果
50    print w,
51print ''
52print X.toarray()  
53
54
55####################################
56#         第三步 數據分析
57#
58from sklearn.naive_bayes import MultinomialNB  
59from sklearn.metrics import precision_recall_curve  
60from sklearn.metrics import classification_report
61
62#使用前8行數據集進行訓練,最後兩行數據集用於預測
63print u"\n\n數據分析:"
64X = X.toarray()
65x_train = X[:8]
66x_test = X[8:]
67#1表示好評 0表示差評
68y_train = [1,1,0,0,1,0,0,1]
69y_test = [1,0]
70
71#調用MultinomialNB分類器  
72clf = MultinomialNB().fit(x_train, y_train)
73pre = clf.predict(x_test)
74print u"預測結果:",pre
75print u"真實結果:",y_test
76
77from sklearn.metrics import classification_report
78print(classification_report(y_test, pre))


輸出結果如下所示,可以看到預測的兩個值都是正確的。即「一本優秀的書籍,值得讀者擁有。」預測結果為好評(類標1),「很差,不建議買,準備退貨。」結果為差評(類標0)。


1數據分析:
2預測結果: [1 0]
3真實結果: [1, 0]
4             precision    recall  f1-score   support
5
6          0       1.00      1.00      1.00         1
7          1       1.00      1.00      1.00         1
8
9avg / total       1.00      1.00      1.00         2


但存在一個問題,由於數據量較小不具備代表性,而真實分析中會使用海量數據進行輿情分析,預測結果肯定頁不是100%的正確,但是需要讓實驗結果儘可能的好。最後補充一段降維繪製圖形的代碼,如下:


1#降維繪製圖形
2from sklearn.decomposition import PCA
3pca = PCA(n_components=2)
4newData = pca.fit_transform(X)
5print newData
6
7pre = clf.predict(X)
8Y = [1,1,0,0,1,0,0,1,1,0]
9import matplotlib.pyplot as plt
10L1 = [n[0] for n in newData]
11L2 = [n[1] for n in newData]
12plt.scatter(L1,L2,c=pre,s=200)
13plt.show()


輸出結果如圖所示,預測結果和真實結果都是一樣的,即[1,1,0,0,1,0,0,1,1,0]。



推薦閱讀

1024 | 最全面試總結,深度學習500問,面試必備【下載】

【代碼集合】深度強化學習Pytorch實現集錦

pandas入門教程

10 張令人噴飯的程式設計師漫畫

【資源】機器學習算法工程師手冊(PDF下載)

源碼 | Python爬蟲之網易雲音樂下載

548頁MIT強化學習教程,收藏備用【PDF下載】


相關焦點

  • 樸素貝葉斯分類器詳解及中文文本輿情分析(附代碼實踐)
    本文主要講述樸素貝葉斯分類算法並實現中文數據集的輿情分析案例,希望這篇文章對大家有所幫助,提供些思路。
  • 樸素貝葉斯實戰篇之新浪新聞分類
    這樣,我們的樸素貝葉斯分類器就改進完畢了。三、樸素貝葉斯之過濾垃圾郵件在上篇文章那個簡單的例子中,我們引入了字符串列表。使用樸素貝葉斯解決一些現實生活中的問題時,需要先從文本內容得到字符串列表,然後生成詞向量。下面這個例子中,我們將了解樸素貝葉斯的一個最著名的應用:電子郵件垃圾過濾。
  • python實現高斯樸素貝葉斯分類器
    python實現高斯樸素貝葉斯分類器    在這篇文章中,我們將使用我最喜歡的機器學習庫scikit-learn在Python中實現樸素貝葉斯分類器。接下來,我們將使用經過訓練的樸素貝葉斯(監督分類法)模型來預測人口收入。
  • 基於貝葉斯定理的算法——樸素貝葉斯分類
    不過今天我們介紹的樸素貝葉斯分類器通過獨立假設簡化了概率的計算,節省了內存,可以很好地用於數據量大的情況。下面我們首先來了解這一算法的數理背景——貝葉斯定理。這一算法是由我們在概率論中學到的貝葉斯定理延伸出來的。我們知道貝葉斯公式為:其中,
  • 機器學習算法之樸素貝葉斯
    假設抽出紅球的概率為B選中容器A的概率為A則有:P(B) = 8/20,P(A) = 1/2,P(B|A) = 7/10按照公式,則有:P(A|B) = (7/10)*(1/2) / (8/20) = 0.875故得出結論:這個球來自容器A的概率是0.875三、樸素貝葉斯貝葉斯公式: P(
  • 樸素貝葉斯(Naive Bayes)和校正曲線(Calibration Curve)
    其中樸素貝葉斯分分類是貝葉斯分類中最簡單的,也是最常見的一種分類方法。樸素貝葉斯分類算法的核心如下公式:P(A):它是先驗(Prior Probability),是A發生的概率。P(B): 是邊際可能性(Marginal Likelihood):是B發生的概率。
  • 樸素貝葉斯與文本分類
    樸素貝葉斯 (Naive Bayesian algorithm) 是一種基於概率統計的分類方法,主要用到了貝葉斯定理和特徵條件獨立性假設。樸素貝葉斯具有悠久的歷史,其算法邏輯比較簡單,有健壯的性能,通常可以用於文本分類、信用評估等方面。
  • 樸素貝葉斯算法及其應用
    在這篇文章中,我們將嘗試以簡單的方式理解什麼是樸素貝葉斯,它是如何工作的以及我們如何應用樸素貝葉斯分類器將文本或評論分類為「肯定」或「否定」,我們將通過電影評論案例進行研究。什麼是樸素貝葉斯?貝葉斯定理是由Reverend Bayes開發的最早的概率推理算法之一(他過去常常嘗試推斷上帝的存在)並且對於某些用例仍然表現得非常好。
  • ...詳解線性回歸、樸素貝葉斯、隨機森林在R和Python中的實現應用...
    本指南會幫助你解決機器學習問題,並獲得一些實踐經驗。我將提供對於多個機器學習算法的高水平理解,以及運行這些算法的 R語言代碼和Python代碼。這些應該足夠讓你親自動手試一試了。用R語言和Python實現機器學習算法的要點我特地跳過了這些技術背後的統計數據,因為一開始你還不需要了解這些東西。
  • 詳解線性回歸、樸素貝葉斯、隨機森林在R和Python中的...
    本指南會幫助你解決機器學習問題,並獲得一些實踐經驗。我將提供對於多個機器學習算法的高水平理解,以及運行這些算法的 R語言代碼和Python代碼。這些應該足夠讓你親自動手試一試了。樸素貝葉斯(Naive Bayes)這是一種以貝葉斯定理為基礎的分類技術,假設預測變量間相互獨立。簡單來講,樸素貝葉斯分類器假設一個分類的特性與該分類的其它特性無關。例如,如果一個水果又紅又圓,且直徑約為3英寸,那麼這個水果可能會是蘋果。即便這些特徵互相依賴,或者依賴於其他特徵的存在,樸素貝葉斯分類器還是會假設這些特徵分別獨立,暗示這個水果是蘋果。
  • 科普丨樸素貝葉斯了解一下
    樸素貝葉斯用貝葉斯定理來預測結果值,該值同時依賴於多個要素,因此必須遵循上述假設。這就是為什麼它被稱為樸素!01樸素貝葉斯的實際應用在幾乎所有的現實世界中,大多數特徵都是相互依賴的。這將使樸素貝葉斯在現實生活中幾乎不可能實現。那麼它在哪裡使用呢?
  • C#與人工智慧(第4講)創建樸素貝葉斯分類器
    今天,我給大家帶來C#與人工智慧的第4講——創建樸素貝葉斯分類器。#人工智慧#本文先實現一個簡單的貝葉斯分類器,輸入二進位,判斷0-7。後續文章會講述它的高級應用——貝葉斯推理機。C#與人工智慧(第3講)創建神經網絡C#與人工智慧(第2講)創建WinForm程序C#與人工智慧(第1講)安裝C#編程環境託馬斯·貝葉斯是18世紀英國數學家,概率論、貝葉斯統計的創立者。貝葉斯方法基於貝葉斯原理,對樣本數據集進行分類。它綜合了先驗概率、後驗概率,避免僅用先驗概率產生的主觀偏見。
  • 為什麼樸素貝葉斯定理會被叫做樸素的?
    樸素貝葉斯算法是一種基於著名貝葉斯定理的分類算法。那麼讓我們先了解一下Bayes定理是怎麼說的,並為樸素貝葉斯算法定理建立自己的理解,它是如何工作的,它為什麼被稱作樸素的?貝葉斯定理在深入研究貝葉斯定理之前,我們需要了解一些術語-獨立事件和從屬事件邊際概率聯合概率條件概率獨立事件和從屬事件考慮兩個事件A和B。
  • 「NLP」經典分類模型樸素貝葉斯解讀
    貝葉斯模型是一種生成模型,先計算聯合概率P(c,x),再通過聯合概率計算後驗概率,也就是利用如下的貝葉斯公式:OK,那聯合概率和先驗概率該怎麼計算呢?樸素貝葉斯模型就該登場了。2 樸素貝葉斯分類器我們再來仔細的分析貝葉斯公式,在有一個訓練集的情況下:1、P(c)為樣本為某個類別的概率,給定樣本及其label後容易計算2、P(x)為某個樣本(所有屬性相同)出現的概率,給定樣本後,容 易得到比較難計算的是P(x|c):其中m為樣本屬性的個數,例如預測西瓜是不是甜的模型,如果基於西瓜的花紋是否清晰
  • 聚類算法簡析(一):樸素貝葉斯算法的場景案例
    本文作者通過一些場景案例,帶領大家了解一下樸素貝葉斯算法作為聚類算法中的一員,如何來區分各類數組。通過一組參數模型來區分互斥群組中的個體十分常見,我們可以使用樸素貝葉斯分析來應用於這種場景,取決於模型的相似矩陣算法常常運用在估算決策論框架的矩陣中。
  • 樸素貝葉斯算法及應用案例
    作者:陳千鶴 來源:人工智慧學習圈本篇主要介紹樸素貝葉斯算法及應用案例。以Tatinic數據集為例進行應用,同時介紹數據處理,數據集的劃分,算法效果評估等內容。一、簡介樸素貝葉斯法是基於貝葉斯定理與特徵條件獨立假設的分類方法 。
  • 【華泰金工林曉明團隊】金工:人工智慧選股之樸素貝葉斯模型
    本報告對樸素貝葉斯模型及線性判別分析、二次判別分析進行系統測試  「生成模型」是機器學習中監督學習方法的一類。本文中,我們從樸素貝葉斯算法入手,分析比較了幾種常見的生成模型(包括線性判別分析和二次判別分析)應用於多因子選股的異同,希望對本領域的投資者產生有實用意義的參考價值。  樸素貝葉斯模型構建細節:月頻滾動訓練,結合基於時間序列的交叉驗證  樸素貝葉斯模型的構建包括特徵和標籤提取、特徵預處理、訓練集合成和滾動訓練等步驟。
  • 數據分析經典模型——樸素貝葉斯
    編輯導語:做過數據分析的人,想必對貝葉斯模型都不會陌生。貝葉斯預測模型是運用貝葉斯統計進行的一種預測,不同於一般的統計方法,其不僅利用模型信息和數據信息,而且充分利用先驗信息。通過實證分析的方法,將貝葉斯預測模型與普通回歸預測模型的預測結果進行比較,結果表明貝葉斯預測模型具有明顯的優越性。
  • 機器學習算法一覽(附python和R代碼)
    原標題:機器學習算法一覽(附python和R代碼) 我也會寫下對於各種機器學習算法的一些個人理解,並且提供R和Python的執行代碼。讀完這篇文章,讀者們至少可以行動起來親手試試寫一個機器學習的程序。 不過,這篇文章並沒有闡述這些算法背後的統計學原理,有時候從實踐入手也是很好的學習路徑。如果你希望了解的是這些統計學原理,那麼這篇文章的內容可能並不適合你。
  • 樸素貝葉斯:幫助AI產品經理「小步快跑,快速迭代」
    一、樸素貝葉斯登場貝葉斯分類是一類分類算法的總稱,這類算法均以「貝葉斯定理」為基礎,以「特徵條件獨立假設」為前提。而樸素貝葉斯分類是貝葉斯分類中最常見的一種分類方法,同時它也是最經典的機器學習算法之一。在很多場景下處理問題直接又高效,因此在很多領域有著廣泛的應用,如垃圾郵件過濾、文本分類與拼寫糾錯等。