機器學習(十) 評價分類結果 (下)
阿新 • • 發佈:2018-09-01
平衡 理解 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""" assertlen(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老師的課 是慕課網出品的。歡迎大家一起學習。
機器學習(十) 評價分類結果 (下)