分类模型的评估
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?分類模型的評估
在許多實際問題中,衡量分類器任務的成功程度是通過固定的性能指標來獲取。一般最常見使用的是準確率,即預測結果正確的百分比,方法為estimator.score()
1?混淆矩陣
有時候,我們關注的是樣本是否被正確診斷出來。例如,關于腫瘤的的判定,需要更加關心多少惡性腫瘤被正確的診斷出來。也就是說,在分類任務下,預測結果(Predicted Condition)與正確標記(True Condition)之間存在四種不同的組合,構成混淆矩陣。
真正例(True Positive,TP):將一個正例判為正例
真反例(True Negative,TN):對一個反例正確的判為反例
偽反例(False Negative,FN,也稱):將一個正例判為反例
偽正例(False Positive,TP):對一個反例正確的判為真例
2?精確率(Precision)與召回率(Recall)
精確率:等于TP/(TP+FP),給出的是預測為正例的樣本中真實為正例的比例(判斷查得準)
召回率:等于TP/(TP+FN),真實為正例的樣本中預測結果為正例的比例(判斷查的全,對正樣本的區分能力)
3 其他分類標準
其他分類標準,除了正確率和精確率這兩個指標之外,為了綜合考量召回率和精確率,我們計算這兩個指標的調和平均數,得到F1(F1-score)指標,反映了模型的穩健型
之所以使用調和平均數,是因為它除了具備平均功能外,還會對那些召回率和精確率更加接近的模型給予更高的分數;而這也是我們所希望的,因為那些召回率和精確率差距過大的學習模型,往往沒有足夠的使用價值。
4?分類模型評估API
sklearn.metrics.classification_report
sklearn.metrics.classification_report(y_true, y_pred, target_names=None)
參數:y_true:真實目標值? ? ? ? ? ? ? ? ? ? ? y_pred:估計器預測目標值
target_names:目標類別名稱? ? ? ? ? ? ? ? ? ? ?return:字符串,三個指標值,每個類別精確率與召回率與F1
| 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)) |
?
總結
- 上一篇: 生命银行怎么样_银行双职工家庭现状实录
- 下一篇: SparkContext解析