1. 程式人生 > >機器學習(十) 評價分類結果 (下)

機器學習(十) 評價分類結果 (下)

平衡 理解 bob exce info exc 描述 assert metrics

五、精準率和召回率的平衡

Precision-Recall 的平衡

技術分享圖片

技術分享圖片

技術分享圖片

六、精準率-召回率曲線

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

七、ROC曲線

Receiver Operation Characteristic Curve

描述 TPR 和 FPR 之間的關系

metrics.py

import numpy as np
from math import sqrt


def accuracy_score(y_true, y_predict):
    """計算y_true和y_predict之間的準確率"""
    assert len(y_true) == len(y_predict),         
"the size of y_true must be equal to the size of y_predict" return np.sum(y_true == y_predict) / len(y_true) def mean_squared_error(y_true, y_predict): """計算y_true和y_predict之間的MSE""" assert len(y_true) == len(y_predict), "the size of y_true must be equal to the size of y_predict
" return np.sum((y_true - y_predict)**2) / len(y_true) def root_mean_squared_error(y_true, y_predict): """計算y_true和y_predict之間的RMSE""" return sqrt(mean_squared_error(y_true, y_predict)) def mean_absolute_error(y_true, y_predict): """計算y_true和y_predict之間的MAE""" assert
len(y_true) == len(y_predict), "the size of y_true must be equal to the size of y_predict" return np.sum(np.absolute(y_true - y_predict)) / len(y_true) def r2_score(y_true, y_predict): """計算y_true和y_predict之間的R Square""" return 1 - mean_squared_error(y_true, y_predict)/np.var(y_true) def TN(y_true, y_predict): assert len(y_true) == len(y_predict) return np.sum((y_true == 0) & (y_predict == 0)) def FP(y_true, y_predict): assert len(y_true) == len(y_predict) return np.sum((y_true == 0) & (y_predict == 1)) def FN(y_true, y_predict): assert len(y_true) == len(y_predict) return np.sum((y_true == 1) & (y_predict == 0)) def TP(y_true, y_predict): assert len(y_true) == len(y_predict) return np.sum((y_true == 1) & (y_predict == 1)) def confusion_matrix(y_true, y_predict): return np.array([ [TN(y_true, y_predict), FP(y_true, y_predict)], [FN(y_true, y_predict), TP(y_true, y_predict)] ]) def precision_score(y_true, y_predict): assert len(y_true) == len(y_predict) tp = TP(y_true, y_predict) fp = FP(y_true, y_predict) try: return tp / (tp + fp) except: return 0.0 def recall_score(y_true, y_predict): assert len(y_true) == len(y_predict) tp = TP(y_true, y_predict) fn = FN(y_true, y_predict) try: return tp / (tp + fn) except: return 0.0 def f1_score(y_true, y_predict): precision = precision_score(y_true, y_predict) recall = recall_score(y_true, y_predict) try: return 2. * precision * recall / (precision + recall) except: return 0. def TPR(y_true, y_predict): tp = TP(y_true, y_predict) fn = FN(y_true, y_predict) try: return tp / (tp + fn) except: return 0. def FPR(y_true, y_predict): fp = FP(y_true, y_predict) tn = TN(y_true, y_predict) try: return fp / (fp + tn) except: return 0.

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

八、多分類問題中的混淆矩陣

技術分享圖片

技術分享圖片

技術分享圖片

我寫的文章只是我自己對bobo老師講課內容的理解和整理,也只是我自己的弊見。bobo老師的課 是慕課網出品的。歡迎大家一起學習。

機器學習(十) 評價分類結果 (下)