python实现排列组合公式算法_朴素贝叶斯算法的Python实现
樸素貝葉斯分類算法被廣泛應用于文本分類場景中、包含垃圾郵件、互聯網新聞等分類任務,屬于有監督學習算法。它獨立考量每一維度特征被分類的條件概率,然后綜合這些概率對其所在的特征向量做出分類預測,即“假設各個維度上的特征被分類的條件概率之間是相互獨立的”,該假設使得模型預測需要計算的參數規模從指數級降至線性級,極大地提升計算效率。該算法在模型訓練過程中沒考慮各個維度特征的相互聯系,對于關聯性較強的數據特征分類效果較差。
樸素貝葉斯的優缺點
優點:數據集較小時模型表現很好,適合增量式訓練、多分類任務。
缺點:對輸入數據的表達形式很敏感,由于其“樸素”的特點,也會帶來一些準確率上的損失。
MultinomialNB算法的一般流程
MultinomialNB(多項式模型)的Python實現
1. 數據采集
該數據集包含分布在20個不同新聞組中的18846篇文檔,
數據來源:from sklearn.datasets import fetch_20newsgroups
數據標簽:
'alt.atheism', 'comp.graphics', 'comp.os.ms-windows.misc', 'comp.sys.ibm.pc.hardware', 'comp.sys.mac.hardware', 'comp.windows.x', 'misc.forsale', 'rec.autos', 'rec.motorcycles', 'rec.sport.baseball', 'rec.sport.hockey', 'sci.crypt', 'sci.electronics', 'sci.med', 'sci.space', 'soc.religion.christian', 'talk.politics.guns', 'talk.politics.mideast', 'talk.politics.misc', 'talk.religion.misc'
數據樣例:
From: Alexander Samuel McDiarmid
Subject: driver ??
Organization: Sophomore, Mechanical Engineering, Carnegie Mellon, Pittsburgh, PA
Lines: 15
NNTP-Posting-Host: po4.andrew.cmu.edu
1) I have an old Jasmine drive which I cannot use with my new system ……
使用sklearn.datasets.fetch_20newsgroups(新聞數據抓取器),加載數據集,Python實現如下:
2. 數據預處理
使用 sklearn.model_selection.train_test_split方式,將整個數據集隨機抽取80%作為訓練集、剩余的20%作為測試集,并且進行數據標準化處理,且重復運行時,訓練集與測試集不發生變化,Python實現如下:
嘗試使用四種方式實現文本特征向量的提取,并查看不同文本特征提取方式對算法分類識別率的影響:
- CountVectorizer提取特征向量。
- CountVectorizer提取特征向量且去掉停詞。
- TfidfVectorizer提取文本特征向量。
- TfidfVectorizer提取文本特征向量且去掉停詞。
CountVectorizer只考慮每種詞匯在訓練文本中出現的頻率,而TfidfVectorizer除了考量某詞匯在訓練文本中出現的頻率之外,能夠降低出現頻率高沒有意義的詞匯出現帶來的影響,訓練文本的數量越多,TfidfVectorizer方式更有優勢,Python實現如下:
3. 模型訓練及測試
測試集驗證結果如下:
擴展:生成模型和判別模型的區別
有監督機器學習方法可以分為生成模型和判別模型。
生成模型
無窮樣本 -> 概率密度模型 = 產生式模型 -> 預測生成式模型求得聯合概率P(Y,X),對于未見示例X,需要求出X與不同標簽之間的聯合概率分布,然后概率大的獲勝。
- 常見生成模型:樸素貝葉斯、KNN、高斯混合模型、隱馬爾可夫模型、限制玻爾茲曼機、文檔主題生成模型(LDA)
- 生成模型舉例:利用生成模型是根據哈士奇的特征首先學習出一個哈士奇的模型,然后根據邊境牧羊犬的特征學習出一個邊境牧羊犬的模型,然后從這只羊中提取特征,放到哈士奇羊模型中看概率是多少,在放到邊境牧羊犬模型中看概率是多少,哪個概率大就是哪種品種的狗,求的是P(X,Y),即聯合概率。
判別模型
有限樣本 -> 判別函數 = 判別式模型 -> 預測對于判別式模型來說求得P(Y|X),對未見示例X,根據P(Y|X)可以求得標記Y,即可以直接判別出標簽。
- 常見判別模型:K-近鄰、決策樹、SVM、線性判別分析(LDA)、支持向量機、線性回歸、傳統的神經網絡、邏輯斯蒂回歸。
- 判別模型舉例:要確定一個狗是哈士奇還是邊境牧羊犬,用判別模型的方法是從訓練集中學習到模型,然后通過提取這只狗的特征來直接預測出這只狗的品種(正例)概率,其根據X“判別”Y,求的是P(Y|X),即后驗概率。
判別式模型是根據一只狗的特征可以直接給出這只狗品種(正例)的概率(比如 概率為0.8),而生成式模型是要都試一試((X,Y1), (X,Y2), (X,Y3),…),概率最大的那個就是這只狗的品種結果。
后續會繼續分享線性、決策樹、SVM、隨機森林、K均值聚類等算法介紹及Python實現,若對你有所幫助,歡迎大家評論、留言、關注,感謝支持!
總結
以上是生活随笔為你收集整理的python实现排列组合公式算法_朴素贝叶斯算法的Python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8.1 文件查找local;find使用
- 下一篇: android 锁屏壁纸时钟,桌面锁屏时