模型評估方法

  1. Estimator對象的score方法
  2. 在交叉驗證中使用scoring參數(shù)
  3. 使用sklearn.metric中的性能度量函數(shù)

Estimator對象的score方法

分類算法必須要繼承ClassifierMixin類, 回歸算法必須要繼承RegressionMixin類,里面都有一個score
()方法。

score(self, X, y_true)函數(shù)會在內(nèi)部調(diào)用predict函數(shù)獲得預(yù)測響應(yīng)y_predict,然后與傳入的真是響應(yīng)進(jìn)行比較,計算得分。

使用estimator的score函數(shù)來評估模型的屬性,默認(rèn)情況下,分類器對應(yīng)于準(zhǔn)確率:sklearn.metrics.accuracy_score, 回歸器對應(yīng)于均方差: sklearn.metrics.r2_score。

在交叉驗證中使用scoring參數(shù)

GridSearchCV(scoring=None)
cross_val_score(scoring=None)
...

指定在進(jìn)行網(wǎng)格搜索或者計算交叉驗證得分的時候,使用什么標(biāo)準(zhǔn)度量'estimator'的預(yù)測性能,默認(rèn)是None,就是使用estimator自己的score方法來計算得分。我們可以指定別的性能度量標(biāo)準(zhǔn),它必須是一個可調(diào)用對象,sklearn.metrics不僅為我們提供了一系列預(yù)定義的可調(diào)用對象,而且還支持自定義評估標(biāo)準(zhǔn)

Scoring Function
分類
accuracy metrics.accuracy_score
average_precision metrics.average_precision_score
f1 metrics.f1_score
f1_micro metrics.f1_score
f1_macro metrics.f1_score
f1_weighted metrics.f1_score
f1_sample metrics.f1_score
neg_log_loss metrics.log_loss
precision metrics.precision_score
recall metrics.recall_score
roc_auc metrics.roc_auc_score
聚類
adjusted_rand_score metrics.adjusted_rand_score
回歸
neg_mean_absolute_erroe metrics.neg_mean_absolute_erroe
neg_mean_squared_error metrics.neg_mean_squared_error
neg_median_absolute_error metrics.neg_median_absolute_error
r2 metrics.r2

約定: 返回值越大代表性能越好

可以使用sklearn.metrics.SCORERS返回以上的評估函數(shù)。

在交叉驗證中使用自定義scoring參數(shù)

  1. 把sklearn.metrics中已有的度量指標(biāo)封裝成符合‘scoring’參數(shù)要求的形式。
    Metrics模塊中的很多的度量方法并沒有被分配‘scoring’參數(shù)可用的名字。因為這些度量指標(biāo)需要附加參數(shù),比如:‘fbeta_score’。在這種情況下,如果我們想要使用‘fbeta_score’的話,必須要產(chǎn)生一個合適的scoring對象,產(chǎn)生可調(diào)用對象的最簡單的方法就是使用‘make_scorer’,該函數(shù)會把'fbeta_score'這個函數(shù)轉(zhuǎn)換成能夠在模型評估中使用的可調(diào)用對象。
from sklearn.metrics import fbeta_score, make_scorer
ftwo_score = make_scorer(fbeta_score, beta=2)  # 添加參數(shù)
from sklearn.model_selection import  GridSearchCV
from sklearn.svm import LinearSVC
grid = GridSearchCV(LinearSVC(), param_grid={'C': [1,10]}, scoring=ftwo_score)
  1. 完全自定義自己的度量指標(biāo)然后用'make_scorer'函數(shù)轉(zhuǎn)換成符合’scoring‘參數(shù)要求的形式
from sklearn.metrics import fbeta_score, make_scorer
import numpy as np
def my_custom_loss_func(ground_truth, predictions):
    diff = np.abs(ground_truth - predictions).max()
    return np.log(1 + diff)
loss = make_scorer(my_custom_loss_func, greater_is_better = False)
score = make_scorer(my_custom_loss_func, greater_is_better = False)
ground_truth = [[1,1]]
predictions = [0,1]
from sklearn.dummy import DummyClassifier
clf = DummyClassifier(strategy='most_frequent', random_state = 0)
clf = clf.fit(ground_truth, predictions)
print(loss(clf, ground_truth, predictions))
print(score(clf, ground_truth, predictions))
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容