溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • python機器學習中樸素貝葉斯算法及模型選擇和調優的示例分析

python機器學習中樸素貝葉斯算法及模型選擇和調優的示例分析

發布時間:2021-11-14 13:09:20 來源:億速云 閱讀:507 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關python機器學習中樸素貝葉斯算法及模型選擇和調優的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

    一、概率知識基礎

    1.概率

    概率就是某件事情發生的可能性。

    2.聯合概率

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

    3.條件概率

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

    條件概率的特性:P(A1,A2|B) = P(A1|B)P(A2|B)

    注意:此條件概率的成立,是由于A1,A2相互獨立的結果

    樸素貝葉斯的原理就是,對于每一個樣本,算出屬于每一個類別的概率,歸為概率最高的那一類。

    二、樸素貝葉斯

    1.樸素貝葉斯計算方式

    python機器學習中樸素貝葉斯算法及模型選擇和調優的示例分析

    直接代入實際例子,各部分解釋如下:

    P(C) = P(科技):科技文檔類別的概率(科技文檔數 / 總文檔數)

    P(W|C) = P(‘智能',‘發展'|科技):在科技文檔這一類文章中,‘智能'與‘發展'這兩個特征詞出現的概率。注意:‘智能',‘發展'屬于被預測文檔中出現的詞,科技文檔中可能會有更多特征詞,但給定的文檔并不一定全部包含。因此,給定的文檔包含了哪些,就使用哪些。

    計算方法:

    P(F1|C) = N(i)/N (訓練集中計算)

    N(i)是該F1詞在C類別所有文檔中出現的次數

    N為所屬類別C下的文檔所有詞出現的次數和

    P(‘智能'|科技) = ‘智能'在所有科技類文檔中出現的次數 / 科技類文檔下所有出現的詞次數和

    則P(F1,F2...|C) = P(F1|C) * P(F2|C)

    P(‘智能',‘發展'|科技) = P(‘智能'|科技) * P(‘發展'|科技)

    這樣就可以計算出基于被預測文檔中的特征詞,被預測文檔屬于科技的概率。同樣的方法計算其他類型的概率。哪個高就算哪個。

    2.拉普拉斯平滑

    python機器學習中樸素貝葉斯算法及模型選擇和調優的示例分析

    3.樸素貝葉斯API

    sklearn.naive_bayes.MultinomialNB

    python機器學習中樸素貝葉斯算法及模型選擇和調優的示例分析

    三、樸素貝葉斯算法案例

    1.案例概述

    本案例的數據是來自于sklearn中的20newsgroups數據,通過提取文章中的特征詞,使用樸素貝葉斯方法,對被預測文章進行計算,通過得出的概率來確定文章屬于哪一類。

    大致步驟如下:首先將文章分成兩類,一類作為訓練集,一類作為測試集。接下來使用tfidf分別對訓練集以及測試集文章進行特征抽取,這樣就生成了訓練集測試集的x,接下來可以直接調用樸素貝葉斯算法,將訓練集數據x_train, y_train導入進去,訓練模型。最后使用訓練好的模型來測試即可。

    2.數據獲取

    導入數據庫:import sklearn.datasets as dt

    導入數據:news = dt.fetch_20newsgroups(subset='all')

    3.數據處理

    分割使用的方法和knn中的一樣。另外,從sklearn中導入的數據,都可以直接調用 .data獲取數據集,調用.target獲取目標值。

    分割數據:x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25)

    特征值提取方法實例化:tf = TfIdfVectorizer()

    訓練集數據特征值提?。簒_train = tf.fit_transform(x_train)

    測試集數據特征值提?。簒_test = tf.transform(x_test)

    測試集的特征提取,只需要調用transform,因為要使用訓練集的標準,并且在上一步已經fit過得出訓練集的標準了,測試集直接使用就行。

    4.算法流程

    算法實例化:mlt = MultinomialNB(alpha=1.0)

    算法訓練:mlt.fit(x_train, y_train)

    預測結果:y_predict = mlt.predict(x_test)

    5.注意事項

    樸素貝葉斯算法的準確率,是由訓練集來決定的,不需要調參。訓練集誤差大,結果肯定不好。因為算的方式固定,并且沒有一個超參數可供調整。

    樸素貝葉斯的缺點:假設了文檔中一些詞和另外一些詞是獨立的,相互沒聯系。并且是在訓練集中進行的詞統計,會對結果造成干擾,訓練集越好,結果越好,訓練集越差,結果越差。

    四、分類模型的評估

    1.混淆矩陣

    評估標準有數種,其一是準確率,也就是對預測的目標值和提供的目標值一一對比,計算準確率。

    我們也有其他更通用也更好用的評估標準,即精確率和召回率。精確率和召回率是基于混淆矩陣計算的。

    python機器學習中樸素貝葉斯算法及模型選擇和調優的示例分析

    python機器學習中樸素貝葉斯算法及模型選擇和調優的示例分析

    一般情況下我們只關注召回率。

    F1分類標準:

    python機器學習中樸素貝葉斯算法及模型選擇和調優的示例分析

    根據以上式子,使用精確率召回率,可計算出F1-score,該結果可反應模型的穩健性。

    2.評估模型API

    sklearn.metricx.classification_report

    python機器學習中樸素貝葉斯算法及模型選擇和調優的示例分析

    3.模型選擇與調優

    ①交叉驗證

    交叉驗證是為了讓被評估的模型更加準確可信,方法如下:

    >>將所有數據分成n等份

    >>第一份作為驗證集,其他作為訓練集,得出一個準確率,模型1

    >>第二份作為驗證集,其他作為訓練集,得出一個準確率,模型2

    >>......

    >>直到每一份都過一遍,得出n個模型的準確率

    >>對所有的準確率求平均值,我們就得到了最終更為可信的結果。

    若分為四等分,則叫做“4折交叉驗證”。

    ②網格搜索

    網格搜索主要是和交叉驗證同時使用,用來調參數。比如K-近鄰算法中有超參數k,需要手動指定,比較復雜,所以需要對模型預設幾種超參數組合,每組超參數都采用交叉驗證來進行評估,最后選出最優的參數組合建立模型。(K-近鄰算法就一個超參數k,談不上組合,但是如果算法有2個或以上超參數,就進行組合,相當于窮舉法)

    網格搜索API:sklearn.model_selection.GridSearchCV

    python機器學習中樸素貝葉斯算法及模型選擇和調優的示例分析

    五、以knn為例的模型調優使用方法

    假設已經將數據以及特征處理好,并且得到了x_train, x_test, y_train, y_test,并且已經將算法實例化:knn = KNeighborsClassifier()

    1.對超參數進行構造

    因為算法中需要用到的超參數的名字就叫做'n_neighbors',所以直接按名字指定超參數選擇范圍。若有第二個超參數,在后面添加字典元素即可。

    params = {'n_neighbors':[5,10,15,20,25]}

    2.進行網格搜索

    輸入的參數:算法(估計器),網格參數,指定幾折交叉驗證

    gc = GridSearchCV(knn, param_grid=params, cv=5)

    基本信息指定好后,就可以把訓練集數據fit進去

    gc.fit(x_train, y_train)

    3.結果查看

    網格搜索算法中,有數種方法可以查看準確率、模型、交叉驗證結果、每一次交叉驗證后的結果。

    gc.score(x_test, y_test) 返回準確率

    gc.best_score_ 返回最高的準確率

    gc.best_estimator_ 返回最好的估計器(返回的時候會自動帶上所選擇的超參數)

    關于“python機器學習中樸素貝葉斯算法及模型選擇和調優的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女