sklearn——metrics模型評估指標


一、簡介

sklearn.metrics中包含了許多模型評估指標,例如決定系數R2、准確度等,下面對常用的分類模型與回歸模型的評估指標做一個區分歸納,

 

二、分類模型指標

1、准確率

  分類准確率分數是指所有分類正確的百分比。分類准確率這一衡量分類器的標准比較容易理解,但是它不能告訴你響應值的潛在分布,並且它也不能告訴你分類器犯錯的類型。

 

對應函數:

  sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)

  • y_true:1為數組,y的真實值。
  •  y_pred:1為數組,y的預測值。
  • normalize:默認為True,顯示百分數,若False則返回正確分類的樣本數。
  • sample_weight:樣本權重。

 

  另外,模型基本都有model.score()方法,也可以查看准確率。

 

代碼實例:

from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris iris = load_iris() # 讀取iris數據 x_trian, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0) # 將數據分為訓練集與測試集  tree_model = DecisionTreeClassifier('gini', 'best') # 構建決策樹 tree_model.fit(X=x_trian, y=y_train) # 傳入訓練數據 y_pridct = tree_model.predict(x_test) # 對測試數據進行預測 print(accuracy_score(y_test, y_pridct))  # 計算准確度 
print(tree_model.score(y_test, y_pridct))  # 計算准確度
'''  
結果:
0.9777777777777777
'''
 

 

2、分類評估指標報告

  分類評估指標報告中包含了 precision    recall  f1-score   support 四個指標,基本包括了分類需要看到的指標。

 

對應函數:

  sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)

  • y_true:1維數組,或標簽指示器數組/稀疏矩陣,目標值。 
  • y_pred:1維數組,或標簽指示器數組/稀疏矩陣,分類器返回的估計值。
  • labels:array,shape = [n_labels],報表中包含的標簽索引的可選列表。
  • target_names:字符串列表,與標簽匹配的可選顯示名稱(相同順序)。
  • sample_weight:類似於shape = [n_samples]的數組,可選項,樣本權重。
  • digits:int,輸出浮點值的位數。

 

代碼示例

from sklearn.metrics import classification_report

y_true=['a','b','c','a','b']
y_pre=['b','b','c','a','b']
target_names=['class_a','class_b','class_c']
print(classification_report(y_true,y_pre,target_names=target_names))

'''
結果:
              precision    recall  f1-score   support

     class_a       1.00      0.50      0.67         2
     class_b       0.67      1.00      0.80         2
     class_c       1.00      1.00      1.00         1

    accuracy                           0.80         5
   macro avg       0.89      0.83      0.82         5
weighted avg       0.87      0.80      0.79         5
'''


結果說明:

  • precision:精確度,預測為正實際也為正占預測數的比率。
  • recall:召回率,實際為正預測也為證占實際數的比率。
  • f1-score:一般形式為$f_{\beta }=\left ( 1+\beta ^{2} \right )\cdot \frac{precision\cdot recall}{\beta ^{2}\cdot precison+recall}$,所以$f_{1 }=\frac{precision\cdot recall}{precison+recall}$
  • support:支持度,即實際類別個數。
  • accuracy:准確度。
  • macro avg與weighted avg:具體請查看這個連接

 

3、混淆矩陣

  將預測結果和真實結果用混淆矩陣展示,可以用於二分類與多分類。

 

對應函數:

  sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)

  • y_true:1維數組,或標簽指示器數組/稀疏矩陣,目標值。 
  • y_pred:1維數組,或標簽指示器數組/稀疏矩陣,分類器返回的估計值。
  • labels:array,shape = [n_labels],報表中包含的標簽索引的可選列表。
  • sample_weight:樣本權重。

 

代碼示例:

  

from sklearn.metrics import precision_score,recall_score,f1_score

y_true=['a','b','c','a','b']
y_pre=['b','b','c','a','b']
target_names=['class_a','class_b','class_c']
print(precision_score(y_true,y_pre))
print(recall_score(y_true,y_pre))
print(f1_score(y_true,y_pre))

'''
結果:
[[1 1 0]
 [0 2 0]
 [0 0 1]]
'''

 

4、精確度、召回率、f1分數

  這三個指標通常用在分類中,sklearn中的函數可以用於二分類與多分類,只要調整參數average就能達到。

 

對應函數:

  precision_score、recall_score、f1_score,這三個有共同的參數,這里以precision為例:

  sklearn.metrics.precision_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)

  • y_true:1維數組,或標簽指示器數組/稀疏矩陣,目標值。 
  • y_pred:1維數組,或標簽指示器數組/稀疏矩陣,分類器返回的估計值。
  • labels:array,shape = [n_labels],報表中包含的標簽索引的可選列表。
  • pos_label:對二分類有用,一般不用管。
  • average:可選None, ‘binary’ (default), ‘micro’, ‘macro’, ‘samples’, ‘weighted’。'binary'為二分類; ‘micro’, ‘macro’, ‘weighted’可以用於多分類,具體計算方法查看鏈接請點擊這里

 

代碼示例:

   

from sklearn.metrics import precision_score,recall_score,f1_score

y_true=['a','b','c','a','b']
y_pre=['b','b','c','a','b']
target_names=['class_a','class_b','class_c']
print(precision_score(y_true,y_pre,average='micro'))
print(recall_score(y_true,y_pre,average='micro'))
print(f1_score(y_true,y_pre,average='micro'))

'''
結果:
0.8
0.8
0.8000000000000002
'''

 

5、ROC曲線與KS曲線

  常用與邏輯回歸等二分類,ROC與KS的說明在下一篇的邏輯回歸、ROC曲線與KS曲線中有講解。

 

三、回歸模型指標

 1、決定系數R2

  當R2的值約接近1說明效果約好,R2=1-殘差平方和/總平方和=回歸平方和/總平方和。

 

對應函數:

  sklearn.metrics.r2_score(y_true, y_pred, sample_weight=None, multioutput=’uniform_average’)

  • y_true:1維數組,或標簽指示器數組/稀疏矩陣,目標值。 
  • y_pred:1維數組,或標簽指示器數組/稀疏矩陣,分類器返回的估計值。
  • sample_weight:樣本權重。
  • multioutput:多維輸入輸出,可選‘raw_values’, ‘uniform_average’, ‘variance_weighted’或None。
    默認為’uniform_average’;
    ‘variance_weighted’對所有輸出的分數進行平均,並根據每個輸出的方差進行加權。
    ‘raw_values’對每一對應列求其R2指數,返回一個與列數相同的一維數組。

代碼示例:

from sklearn.metrics import r2_score
from sklearn.linear_model import LinearRegression
import numpy as np

x=np.random.normal(0,1,[1000,1])
y=2*x**2+3

model=LinearRegression()
model.fit(x,y)
y_pre=model.predict(x)

print(r2_score(y,y_pre))



'''
結果:
3.805452379912477e-05
'''

 

2、回歸方差(反應自變量與因變量之間的相關程度)

explained_variance_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average')

 

3、平均絕對誤差

mean_absolute_error(y_true, y_pred, sample_weight=None, multioutput='uniform_average')

 

4、均方差

mean_squared_error(y_true, y_pred, sample_weight=None, multioutput='uniform_average')

 

5、中值絕對誤差

median_absolute_error(y_true, y_pred)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM