1. 程式人生 > 其它 >scikit基礎與機器學習入門(10) 模型的評估

scikit基礎與機器學習入門(10) 模型的評估

除了使用estimator的score函式簡單粗略地評估模型的質量之外,在sklearn.metrics模組針對不同的問題型別提供了各種評估指標並且可以建立使用者自定義的評估指標

metrics評估指標概述

sklearn.metrics中的評估指標有兩類:以_score結尾的為某種得分,越大越好,以_error或_loss結尾的為某種偏差,越小越好。

常用的分類評估指標包括:accuracy_score,f1_score, precision_score,recall_score等。

常用的迴歸評估指標包括:r2_score,explained_variance_score等等。

常用的聚類評估指標包括:adjusted_rand_score,adjusted_mutual_info_score等等

程式碼

呼叫方法:metrics.方法名(真實值,預測值)

from sklearn import metrics
y_pred = [0,0,0,1,1,1,1,1]
y_true = [0,1,0,1,1,0,0,1]
print(metrics.confusion_matrix(y_true,y_pred))
print('準確率:',metrics.accuracy_score(y_true,y_pred))
print('類別精度:',metrics.precision_score(y_true,y_pred,average = None)) #不求平均
print('巨集平均精度:',metrics.precision_score(y_true,y_pred,average = 'macro'))
print('微平均召回率:',metrics.recall_score(y_true,y_pred,average = 'micro'))
print('加權平均F1得分:',metrics.f1_score(y_true,y_pred,average = 'weighted'))

利用基於經驗的基本策略作比較

比如有一個分類問題,如果有100個樣本,其中90個正例,10個反例,那麼即使全都預測為正,就能達到90%的正確率,一般的評價指標對於這類問題的評價不敏感,這是可以通過基準來評價模型的優劣性

DummyClassifier 實現了幾種簡單的分類策略:

  • stratified 通過在訓練集類分佈方面來生成隨機預測.
  • most_frequent 總是預測訓練集中最常見的標籤.
  • prior 類似most_frequenct,但具有precit_proba方法
  • uniform 隨機產生預測.
  • constant 總是預測使用者提供的常量標籤.

DummyRegressor 實現了四個簡單的經驗法則來進行迴歸:

  • mean 總是預測訓練目標的平均值.
  • median 總是預測訓練目標的中位數.
  • quantile 總是預測使用者提供的訓練目標的 qua

我們設定一個不平衡的資料集,其標籤分佈如下所示

# 比較線性svm分類器和虛擬估計器的得分
from sklearn.dummy import DummyClassifier
from sklearn.svm import SVC
svc = SVC(kernel='linear', C=1).fit(X_train, y_train)
print('linear svc classifier score:',svc.score(X_test, y_test))
dummy = DummyClassifier(strategy='most_frequent',random_state=0)
dummy.fit(X_train, y_train)
print('dummy calssifier score:',dummy.score(X_test, y_test))

此時得到結果

linear svc classifier score: 0.631578947368

dummy calssifier score: 0.578947368421

發現支援向量機的準確率並不高,說明需要改善模型

很喜歡聽到一個老師說的“半年理論”,現在做出的努力,一般要在半年的沉澱之後,才能出結果,所以在遇到瓶頸之時,不妨再努力半年