<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【機器學習】模型選擇(性能度量)原理及實戰(zhàn)

          共 3057字,需瀏覽 7分鐘

           ·

          2022-07-26 09:08


          0.概述


          模型的好壞是相對的。什么樣的模型是好的,即取決于算法和數(shù)據(jù),也取決于任務需求。


          1. 回歸任務的性能度量


          均方誤差

          均方誤差是回歸任務最常用的性能度量,表示預測值和實際值之間的誤差。

           

          2. 分類任務的性能度量


          真實情況預測結(jié)果

          正例反例
          正例TP(真正例)FN(假反例)
          反例FP(假正例)TN(真反例)


          精度:分類正確的樣本占總樣本的比例 TP+FN/總例數(shù)
          查準率:預測正確的樣本中實際為正確的比例 TP/(TP+FP)
          查全率:正例中預測正確的比例 TP/(TP+FN)
          F1:查準率和查全率的平均
          ROC與AUC
          許多機器學習方法分類的方式是為測試樣本產(chǎn)生一個實值(或概率預測),并將其與設定好的閾值相比較,大于閾值的分為正類,小于閾值的分為負類。我們可以根據(jù)實值的大小,即按是正例的可能性將樣本進行排序。分類過程就是在這個排序中找到某個“截斷點”將前面一部分判做正例,后面一部分判做反例。


          ROC曲線是以每一個實值作為閾值,并衡量模型性能的方法。它以真正例率TPR=TP/(TP+FN)為橫坐標,假正例率FPR=FP/(TN+FP)為橫坐標。每次按順序嘗試一個實值作為閾值進行測試。
          真正例率和反正例率的分母是實際的正例和反例數(shù)量,是一個固定的數(shù),因此他們與TP和FP成正比。 



          上圖是ROC的一個示例。點(0,1)對應將所有正例劃分在反例前面的理想模型。橙色線對應一條實際情況下的ROC曲線。開始時,閾值的取值較高,只有前幾個數(shù)作為正例,假正例數(shù)量為0,假正例率為0。隨著閾值的降低,更多的樣本被劃分為正例,真假正例的數(shù)量都在增多,真假正例率也均有提升。閾值增高到一定程度時,排序靠后的樣本全部為實際反例。于是真正例率不再增加,反正例率逐漸增加至1。得到一個數(shù)列fpr,tpr可以使用sklearn.metrics中的
          roc_curve([實際結(jié)果],[分數(shù)])


          AUC是ROC曲線的線下面積,衡量了預測的排序質(zhì)量,是一種綜合性指標。AUC=1時,ROC曲線是(0, 0), (0, 1), (1, 1)連接起來的折線,代表所有正例在反例之前的完美排序。AUC=接近1/2時,ROC接近(0, 0)和(1, 1)連接起來的直線,代表排序的方式接近于完全隨機。計算auc的方法是應用sklearn.metrics中的roc_auc([fpr],[tpr])


          代價敏感錯誤率
          適用于錯誤類型造成的后果不同,如患者診斷為健康人(錯過治療)和健康人診斷為患者(檢查費用)
          根據(jù)錯誤類型的不同給FP和FN按一定比例相加除以樣例數(shù)即為代價敏感錯誤率。


          3. 代碼示例

          畫出ROC曲線,計算AUC值


          import matplotlib.pyplot as plt
          from sklearn import svm, datasets
          from sklearn.metrics import roc_curve, auc
          from sklearn.model_selection import train_test_split
          from sklearn.preprocessing import label_binarize
          from sklearn.multiclass import OneVsRestClassifier
          # 導入鳶尾花數(shù)據(jù)集
          iris = datasets.load_iris()
          X = iris.data
          y = iris.target
          # 二進制化輸出
          y = label_binarize(y, classes=[012])
          n_classes = y.shape[1]
          # 切分訓練集和測試集
          X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.5, random_state=0)
          # 應用SVM進行評分
          classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True,))
          y_score = classifier.fit(X_train, y_train).decision_function(X_test)
          # 為每個類別計算ROC曲線和AUC
          fpr = dict()
          tpr = dict()
          roc_auc = dict()
          for i in range(n_classes):
              # 這里用roc_curve得到了每個點的fpr,tpr值,參數(shù)是測試樣本實際結(jié)果和評分的的第i列
              fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])
              # 這里用auc函數(shù)得到每個點的auc
              roc_auc[i] = auc(fpr[i], tpr[i])
          plt.figure()
          lw = 2


          # 畫出ROC曲線,標出AUC值
          plt.plot(fpr[1], tpr[1], color='darkorange', lw=lw, label='ROC curve (area = %0.4f)' % roc_auc[1])
          plt.xlim([0.01.0])
          plt.ylim([0.01.05])
          plt.xlabel('False Positive Rate')
          plt.ylabel('True Positive Rate')
          plt.title('Receiver operating characteristic example')
          plt.legend(loc="lower right")
          plt.show()




          - EOF -

          推薦閱讀  點擊標題可跳轉(zhuǎn)
          往期精彩回顧




          瀏覽 93
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人擦人人 | 好吊视频一区二区三区四区五区六区七区八区 | 爆乳尤物一区二区三区 | 男人天堂2025手机版 | 中文字幕啪啪 |