目錄:html
1、數據拆分:訓練數據集&測試數據集算法
2、評價迴歸結果:分類準確度、混淆矩陣、精準率、召回率、F一、ROC等dom
3、評價迴歸結果:MSE、RMSE、MAE、RSquared機器學習
1、數據拆分:訓練數據集&測試數據集函數
顧名思義,訓練數據集即爲用於訓練模型的子集。測試數據集即爲 用於測試訓練後模型的子集。工具
通常狀況下對整個數據集按照0.8:0.2的比例進行拆分,可是若是遇到特殊狀況:若有順序的數據集,咱們能夠先打亂再進行拆分。性能
方法一:將X和y合併爲同一個矩陣,而後對矩陣進行shuffle,以後再分解學習
方法二:對y的索引進行亂序,根據索引肯定與X的對應關係,最後再經過亂序的索引進行賦值。測試
對於拆分數據集,sklearn中的train_test_split能夠幫助咱們作到。spa
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
2、評價迴歸結果
分類準確度:
在劃分出測試數據集後,咱們就能夠驗證其模型準確率了。在這了引出一個很是簡單且經常使用的概念:accuracy(分類準確度)
因accuracy定義清洗、計算方法簡單,所以常常被使用。可是它在某些狀況下並不必定是評估模型的最佳工具。精度(查準率)和召回率(查全率)等指標對衡量機器學習的模型性能在某些場合下要比accuracy更好。
#sklearn中的準確度 from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=666) knn_clf = KNeighborsClassifier(n_neighbors=3) knn_clf.fit(X_train, y_train) y_predict = knn_clf.predict(X_test) accuracy_score(y_test, y_predict) # 不看y_predict knn_clf.score(X_test,y_test)
混淆矩陣:
對於二分類問題來講,全部的問題被分爲0和1兩類,混淆矩陣是2*2的矩陣:
* TN:真實值是0,預測值也是0,即咱們預測是negative,預測正確了。
* FP:真實值是0,預測值是1,即咱們預測是positive,可是預測錯誤了。
* FN:真實值是1,預測值是0,即咱們預測是negative,但預測錯誤了。
* TP:真實值是1,預測值是1,即咱們預測是positive,預測正確了。
from sklearn.metrics import confusion_matrix confusion_matrix(y_test, y_log_predict)
精準率: 即精準率爲8/(8+12)=40%。所謂的精準率是:分母爲全部預測爲1的個數,分子是其中預測對了的個數,即預測值爲1,且預測對了的比例。
爲何管它叫精準率呢?在有偏的數據中,咱們一般更關注值爲1的特徵,好比「患病」,好比「有風險」。在100次結果爲患病的預測,平均有40次預測是對的。即精準率爲咱們關注的那個事件,預測的有多準。
from sklearn.metrics import precision_score precision_score(y_test, y_log_predict)
召回率:即精準率爲8/(8+2)=80%。所謂召回率是:全部真實值爲1的數據中,預測對了的個數。每當有100個癌症患者,算法能夠成功的預測出8個 。也就是咱們關注的那個事件真實的發生狀況下,咱們成功預測的比例是多少。
from sklearn.metrics import recall_score recall_score(y_test, y_log_predict)
若是要咱們綜合精準率和召回率這兩個指標,咱們可能會想到取平均值這樣的方法。F1 Score的思想也差很少: F1 Score 是精準率和召回率的調和平均值。
什麼是調和平均值?爲何要取調和平均值?調和平均值的特色是若是兩者極度不平衡,如某一個值特別高、另外一個值特別低時,獲得的F1 Score值也特別低;只有兩者都很是高,F1纔會高。這樣才符合咱們對精準率和召回率的衡量標準。
在瞭解ROC曲線以前,先看三個概念:分類閾值、TPR和FPR
分類閾值,即設置判斷樣本爲正例的閾值thr,
若是某個邏輯迴歸模型對某封電子郵件進行預測時返回的機率爲 0.9995,則表示該模型預測這封郵件很是多是垃圾郵件。相反,在同一個邏輯迴歸模型中預測分數爲 0.0003 的另外一封電子郵件極可能不是垃圾郵件。可若是某封電子郵件的預測分數爲 0.6 呢?爲了將邏輯迴歸值映射到二元類別,您必須指定分類閾值(也稱爲斷定閾值)。若是值高於該閾值,則表示「垃圾郵件」;若是值低於該閾值,則表示「非垃圾郵件」。人們每每會認爲分類閾值應始終爲 0.5,但閾值取決於具體問題,所以您必須對其進行調整。
在sklearn中有一個方法叫:decision_function,即返回分類閾值
TPR:預測爲1,且預測對了的數量,佔真實值爲1的數據百分比。很好理解,就是召回率
FPR:預測爲1,但預測錯了的數量,佔真實值不爲1的數據百分比。與TPR相對應,FPR除以真實值爲0的這一行全部的數字和 。
TPR和FPR之間是成正比的,TPR高,FPR也高。ROC曲線就是刻畫這兩個指標之間的關係。
ROC曲線(Receiver Operation Characteristic Cureve),描述TPR和FPR之間的關係。x軸是FPR,y軸是TPR。
咱們已經知道,TPR就是全部正例中,有多少被正確地斷定爲正;FPR是全部負例中,有多少被錯誤地斷定爲正。 分類閾值取不一樣值,TPR和FPR的計算結果也不一樣,最理想狀況下,咱們但願全部正例 & 負例 都被成功預測 TPR=1,FPR=0,即 全部的正例預測值 > 全部的負例預測值,此時閾值取最小正例預測值與最大負例預測值之間的值便可。
TPR越大越好,FPR越小越好,但這兩個指標一般是矛盾的。爲了增大TPR,能夠預測更多的樣本爲正例,與此同時也增長了更多負例被誤判爲正例的狀況。
from sklearn.metrics import roc_curve fprs, tprs, thresholds = roc_curve(y_test, decision_scores) plt.plot(fprs, tprs) plt.show()
通常在ROC曲線中,咱們關注是曲線下面的面積, 稱爲AUC(Area Under Curve)。這個AUC是橫軸範圍(0,1 ),縱軸是(0,1)因此總面積是小於1的。
ROC和AUC的主要應用:比較兩個模型哪一個好?主要經過AUC可以直觀看出來。
ROC曲線下方由梯形組成,矩形能夠當作特徵的梯形。所以,AUC的面積能夠這樣算:(上底+下底)* 高 / 2,曲線下面的面積能夠由多個梯形面積疊加獲得。AUC越大,分類器分類效果越好。
能夠在sklearn中求出AUC值
from sklearn.metrics import roc_auc_score roc_auc_score(y_test, decision_scores)
3、評價迴歸結果
待補充
參考連接:公衆號數據科學家聯盟文章