日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

朴素贝叶斯算法-分类算法

發布時間:2024/7/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 朴素贝叶斯算法-分类算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 樸素貝葉斯算法-分類算法

1 概率基礎

概率定義為一件事情發生的可能性

聯合概率:包含多個條件,且所有條件同時成立的概率,記作P(A,B)

條件概率:事件A在另一個事件B已經發生條件下的發送概率,記作P(A|B)

在A1,A2相互獨立的情況下,條件概率的特性:P(A1,A2|B)=P(A1|B)P(A2|B)

2 貝葉斯公式

W:特征向量? ? ? ? ? ?C:類別

貝葉斯公式最常用于文本分類,上式左邊可以理解為給定一個文本詞向量W,那么它屬于類別C的概率是多少。式子右邊分幾部分,P(W∣C??)為在給定類別的情況下,該文檔的詞向量(被預測文檔中出現詞)的概率,P(C)為每個文檔類別的概率(某文檔類型詞數/總文檔詞數),P(F1,F2..)預測文檔中每個詞的概率

可以理解為:

C可以是不同類別

假如有個訓練集統計結果如下:

特征/統計科技歷史匯總
諸葛亮26060
原子彈552075
飛機602383
盧溝橋事變06565
匯總117168285

現有一篇被預測文檔:出現了原子彈,飛機,盧溝橋事變屬于科技、歷史的類別概率?

因為P(原子彈,飛機,盧溝橋事變)在每個統計中都是一樣的,所有忽略。

P(科技|原子彈,飛機,盧溝橋事變)=P(原子彈,飛機,盧溝橋事變|科技)P(科技)=(2/55)(60/117)(0/117)(117/285)=0

P(歷史|原子彈,飛機,盧溝橋事變)=P(原子彈,飛機,盧溝橋事變|歷史)P(歷史)=(20/168)(23/168)(65/168)(168/285)

上面的例子中,因為某個某個詞的出現概率為0導致屬于某個類別為0,這是不合理的,所以引入拉普拉斯平滑

3 拉普拉斯平滑

為了避免訓練集樣本對一些特征的缺失,即某一些特征出現的次數為0,在計算P(X?1??,X?2??,X?3??,...,X?n??∣Y?i??)的時候,各個概率相乘最終結果為零,這樣就會影響結果。我們需要對這個概率計算公式做一個平滑處理,即拉普拉斯平滑系數

其中m為特征詞向量的個數,α為平滑系數,當α=1,稱為拉普拉斯平滑

4?sklearn樸素貝葉斯實現API

sklearn.naive_bayes.MultinomialNB

sklearn.naive_bayes.MultinomialNB(alpha = 1.0) 樸素貝葉斯分類 alpha:拉普拉斯平滑系數

常用方法:

名稱解釋

fit(X y[,sample_weight])

根據X y擬合樸素貝葉斯分類器
get_params(deep=)獲取此估計器的參數
set_params(PARAMS)設置此估計器的參數
partial_fit(X y[,classes,sample_weight])增量擬合一批樣本
predict(X)對測試向量X組執行分類
predict_log_proda(X)返回測試矢量X的對數概率統計
predict_proda(X)測試矢量X的返回概率估計
score(X y[,sample_weight])返回給定測試數據和標簽的平均精度

5?樸素貝葉斯算法案例

sklearn20類新聞分類 ,20個新聞組數據集包含20個主題的18000個新聞組帖子

步驟:①加載20類新聞數據,并進行分割

②生成文章特征詞

③樸素貝葉斯estimator流程進行預估

from sklearn.naive_bayes import MultinomialNB from sklearn.datasets import fetch_20newsgroups from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics import classification_report #1加載20類新聞數據,并進行分割 newsgroups = fetch_20newsgroups(subset='all') #分割 x_train,x_test,y_train,y_test = train_test_split(newsgroups.data,newsgroups.target,test_size=0.25)#2 生成文章特征詞,對數據集進行特征抽取 tf = TfidfVectorizer() #以訓練集當中的詞的列表進行每篇文章重要性統計 x_train = tf.fit_transform(x_train) print(tf.get_feature_names()) x_test = tf.transform(x_test)# 進行樸素貝葉斯算法的預測 mlt = MultinomialNB(alpha=1.0) mlt.fit(x_train,y_train) y_predict = mlt.predict(x_test) print("預測的文章類別為",y_predict) score = mlt.score(x_test,y_test) print("準確率為:", score) print("每個類別的精確率,召回率和F1:", classification_report(y_test, y_predict, target_names=newsgroups.target_names))

6?樸素貝葉斯分類優缺點

優點: ①樸素貝葉斯模型發源于古典數學理論,有穩定的分類效率。 ②對缺失數據不太敏感,算法也比較簡單,常用于文本分類。 ③分類準確度高,速度快

缺點:需要知道先驗概率P(F1,F2,…|C),因此在某些時候會由于假設的先驗模型的原因導致預測效果不佳。

特點:不需要調參,如果訓練集誤差大,結果肯定不好。

總結

以上是生活随笔為你收集整理的朴素贝叶斯算法-分类算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。