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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

机器学习算法基础——朴素贝叶斯算法

發布時間:2025/3/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习算法基础——朴素贝叶斯算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

26.樸素貝葉斯算法原理

聯合概率和條件概率

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

  • P(A,B)=P(A)P(B)

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

  • 特性:P(A1,A2|B) = P(A1|B)P(A2|B)
  • 注意:此條件概率的成立,是由于A1,A2相互獨立的結果

樸素貝葉斯-貝葉斯公式?

?sklearn樸素貝葉斯實現API

sklearn.naive_bayes.MultinomialNB(alpha = 1.0)

  • alpha:拉普拉斯平滑系數

27.樸素貝葉斯算法對新聞進行分類案例

sklearn20類新聞分類

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

from sklearn.datasets import fetch_20newsgroups from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB def naivebayes():news = fetch_20newsgroups(subset="all")#進行數據分割x_train, x_test, y_train, y_test = train_test_split(news.data,news.target,test_size=0.25)#對數據集進行特征抽取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)print(x_train.toarray())mlt.fit(x_train,y_train)y_predict = mlt.predict(x_test)print("預測的文章類別為:",y_predict)print("準確率為:",mlt.score(x_test,y_test))return None naivebayes() [[0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.]...[0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.]] 預測的文章類別為: [ 9 10 16 ... 8 8 8] 準確率為: 0.8442275042444821

28.樸素貝葉斯算法總結

樸素貝葉斯分類優缺點

優點:

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

  • 需要知道先驗概率P(F1,F2,…|C),因此在某些時候會由于假設的先驗模型的原因導致預測效果不佳。
  • 29.精確率和召回率

    分類模型的評估

    • estimator.score() 一般最常見使用的是準確率,即預測結果正確的百分比

    混淆矩陣

    在分類任務下,預測結果(Predicted Condition)與正確標記(True Condition)之間存在四種不同的組合,構成混淆矩陣(適用于多分類)

    精確率(Precision)與召回率(Recall)

    精確率:預測結果為正例樣本中真實為正例的比例(查得準)

    召回率:真實為正例的樣本中預測結果為正例的比例(查的全,對正樣本的區分能力)

    其他分類標準,F1-score,反映了模型的穩健型??

    分類模型評估API?

    sklearn.metrics.classification_report?

    classification_report

    sklearn.metrics.classification_report(y_true, y_pred, target_names=None)

  • y_true:真實目標值
  • y_pred:估計器預測目標值
  • target_names:目標類別名稱
  • return:每個類別精確率與召回率
  • 30.交叉驗證與網格搜索對K-近鄰算法調優

    交叉驗證與網格搜索

    超參數搜索-網格搜索?

    通常情況下,有很多參數是需要手動指定的(如k-近鄰算法中的K值),這種叫超參數。但是手動過程繁雜,所以需要對模型預設幾種超參數組合。每組超參數都采用交叉驗證來進行評估。最后選出最優參數組合建立模型。?

    K值

    K=3

    K=5

    K=7

    模型

    模型1

    模型2

    模型3

    超參數搜索-網格搜索API

    • sklearn.model_selection.GridSearchCV

    GridSearchCV

    sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)

    • 對估計器的指定參數值進行詳盡搜索
    • estimator:估計器對象
    • param_grid:估計器參數(dict){“n_neighbors”:[1,3,5]}
    • cv:指定幾折交叉驗證
    • fit:輸入訓練數據
    • score:準確率 結果分析:
    • best_score_:在交叉驗證中測試的最好結果
    • best_estimator_:最好的參數模型
    • cv_results_:每次交叉驗證后的測試集準確率結果和訓練集準確率結果
    from sklearn.neighbors import KNeighborsClassifier import pandas as pd from sklearn.model_selection import train_test_split,GridSearchCV from sklearn.preprocessing import StandardScalerdef knncls():# 讀取收據data = pd.read_csv("/Users/zhucan/Downloads/facebook-v-predicting-check-ins/train.csv")# 處理數據data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75")time_value = pd.to_datetime(data["time"], unit="s")# 把日期格式轉換成字典格式time_value = pd.DatetimeIndex(time_value)# 構造一些特征data["day"] = time_value.daydata["hour"] = time_value.hourdata["weekday"] = time_value.weekdaydata = data.drop(["time"], axis=1)# 把簽到數量少于n個目標位置刪除place_count = data.groupby('place_id').count()tf = place_count[place_count.row_id > 3].reset_index()data = data[data['place_id'].isin(tf.place_id)]# 取出數據當中的特征值和目標值y = data["place_id"]x = data.drop(["place_id"], axis=1)# 進行數據的分割訓練集和測試集x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)# 特征工程(標準化)std = StandardScaler()# 對特征值進行標準化x_train = std.fit_transform(x_train)x_test = std.transform(x_test)# 算法流程knn = KNeighborsClassifier()#構造一些參數的值進行搜索param = {"n_neighbors":[3,5,10]}# 進行網格搜尋gc = GridSearchCV(knn,param_grid=param,cv=2)gc.fit(x_train,y_train)#預測準確率print("在測試集上準確率:",gc.score(x_test,y_test))print("在交叉驗證當中最好的結果:",gc.best_score_)print("選擇最好的模型是:",gc.best_estimator_)print("每個超參數每次交叉驗證的結果:",gc.cv_results_)return Noneif __name__ == "__main__":knncls() 在測試集上準確率: 0.4867612293144208 在交叉驗證當中最好的結果: 0.44459331651954603 選擇最好的模型是: KNeighborsClassifier(n_neighbors=10) 每個超參數每次交叉驗證的結果: {'mean_fit_time': array([0.00378036, 0.00375617, 0.00387752]), 'std_fit_time': array([0.00018954, 0.0001651 , 0.00021541]), 'mean_score_time': array([0.14799261, 0.1550293 , 0.18861997]), 'std_score_time': array([0.00120759, 0.00264049, 0.00127685]), 'param_n_neighbors': masked_array(data=[3, 5, 10],mask=[False, False, False],fill_value='?',dtype=object), 'params': [{'n_neighbors': 3}, {'n_neighbors': 5}, {'n_neighbors': 10}], 'split0_test_score': array([0.42701765, 0.44514502, 0.44813997]), 'split1_test_score': array([0.42354981, 0.43773644, 0.44104666]), 'mean_test_score': array([0.42528373, 0.44144073, 0.44459332]), 'std_test_score': array([0.00173392, 0.00370429, 0.00354666]), 'rank_test_score': array([3, 2, 1], dtype=int32)}

    總結

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

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