【Python数据分析】数据挖掘建模——分类与预测算法评价(含ROC曲线、F1等指标的解释)
模型預測效果評價,通??梢杂靡韵轮笜藖砗饬?/p>
目錄
1.絕對誤差和相對誤差
2.平均絕對誤差、均方誤差、均方根誤差與平均絕對百分誤差
3.Kappa統計
4.混淆矩陣
5.準確度(Accuracy)、精確率(Precision)和召回率(Recall)
6.ROC曲線與AUC
7.Python分類預測模型的特點
1.絕對誤差和相對誤差
設表示實際值,表示預測值,則絕對誤差E表示為
相對誤差e表示為
2.平均絕對誤差、均方誤差、均方根誤差與平均絕對百分誤差
平均絕對誤差(Mean Absolute Error, MAE)計算公式如下:
表示第i個實際值與預測值的絕對誤差。
均方誤差(Mean Squared Error, MSE)計算公式如下:
均方根誤差(Root Mean Squared Error,RMSE)計算公式如下:
?
平均絕對百分誤差(Mean Absolute Percentage Error,MAPE)計算公式如下:
一般認為MAPE小于10時,預測精度較高?
?
這幾個指標都是誤差分析的綜合指標。
3.Kappa統計
Kappa統計是比較兩個或多個觀測者對同一事物或者觀測者對同一事物的兩次或多次觀測結果是否一致,Kappa取值在區間[-1,1]內,其值的大小均有不同意義,具體如下:
4.混淆矩陣
混淆矩陣中元素的行下標對應目標的真實屬性,列下標對應分類器產生的識別屬性,對角線元素表示各個模式能夠被分類器正確識別的百分率。下面還會有混淆矩陣更多介紹。?
5.準確度(Accuracy)、精確率(Precision)和召回率(Recall)
假陰性(FN): 算法預測為負例(N),實際上是正例(P)的個數,即算法預測錯了(False);
真陰性(TN):算法預測為負例(N),實際上也是負例(N)的個數,即算法預測對了(True);
真陽性(TP):算法預測為正例(P),實際上是負例(N)的個數,即算法預測錯了(False);
假陽性(FP):算法預測為正例(P),實際上也是正例(P)的個數,即算法預測對了(True)。
混淆矩陣定義如下:?
準確率表示所有樣本中模型預測正確的比例;
精確率表示預測為正例中實際是正例(預測正確)的比例,判斷預測結果準不準
召回率,也叫查全率,表示實際正例中預測正確的比例,判斷預測結果全不全
F1是精準率和召回率的調和平均調和平均一個很重要的特性是如果兩個數極度不平衡(一個很大一個很小),最終的的結果會很小,只有兩個數都比較高時,調和平均才會比較高,這樣便達到了平衡精準率和召回率的目的。
6.ROC曲線與AUC
靈敏度(sensitivity):true positive rate,真陽性樣本在實際陽性樣本中的占比,也是上面的召回率
特異度(specificity):true negative rate,真陰性樣本在實際陰性樣本中的占?
?此圖來自:統計學中的靈敏度和特異度 - 知乎
ROC(receiver operating characteristic curve,受試者工作特性)曲線是根據一系列不同的二分類方式(分界值或決定閾),以真陽性率(靈敏度)為縱坐標,假陽性率(1-特異度)為橫坐標繪制的曲線。
該曲線下的積分面積(AUC)能反映分類器正確分類的統計概率,其值越接近1說明該算法效果越好。
- AUC = 1,是完美分類器,采用這個預測模型時,存在至少一個閾值能得出完美預測。絕大多數預測的場合,不存在完美分類器。
- 0.5 < AUC < 1,優于隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。
- AUC = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有預測價值。
- AUC < 0.5,比隨機猜測還差;但只要總是反預測而行,就優于隨機猜測。
參考:什么是ROC曲線?為什么要使用ROC?以及 AUC的計算 - 云+社區 - 騰訊云
ROC曲線具體是怎么得到的可以參考:ROC及AUC計算方法及原理_糖葫蘆君的博客-CSDN博客_roc
下面介紹ROC曲線的Python實現:
import matplotlib.pyplot as plt from sklearn.metrics import roc_curve, auc, mean_squared_error, accuracy_score import math def check_fit(truth, prob):"""truth: 真實的值 prob: 預測的值 """fpr, tpr, _ = roc_curve(truth, prob) # drop_intermediate:(default=True) roc_auc = auc(fpr, tpr) # 計算auc值,roc曲線下面的面積 等價于 roc_auc_score(truth,prob)plt.figure()plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')plt.xlim([-0.1, 1.05])plt.ylim([-0.1, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('Receiver operating characteristic example')plt.legend(loc="lower right")plt.show() print('results are RMSE, accuracy, ROC')predics = [1 if i>=0.5 else 0 for i in prob]print(math.sqrt(mean_squared_error(truth, prob)), accuracy_score(truth, predics), roc_auc)7.Python分類預測模型的特點
總結
以上是生活随笔為你收集整理的【Python数据分析】数据挖掘建模——分类与预测算法评价(含ROC曲线、F1等指标的解释)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每日一题(48)—— 中断
- 下一篇: linux快捷键