美文网首页
[模型評估]Evaluation、Vaildation

[模型評估]Evaluation、Vaildation

作者: RJ阿杰 | 来源:发表于2019-02-19 15:56 被阅读0次

    sklearn evaluation(評估)

    sklearn Estimator(model)通常類中有一個score方法來作為默認評分標準,而呼叫evaluation(例如:cross_val_score)有一個參數scoring可以另外指定評分標準,輸入為下圖的scoring字符串,傳入evaluation的Estimator還必須實現fitpredict方法(其實就是訓練(參數為x,y)跟預測(參數為x))。
    可以自定義建立Estimator跟method搭配tensorflow或pytorch使用。

    • Scoring轉scorer
      有時候Scoring是loss(損失函數)越高表示模型表現越差,我們將損失轉成得分,越高分表示模型表現越好。
      sklearn.metrics.make_scorer

    Scoring

    非平衡數據正確性

    • 分類器
      一個常見的例子,我們預測一個人是否會得腦癌,而我們有個模型正確率為98%,我們的判斷方式是名子叫魯夫的人就會得腦癌。我們可以在精確率(預測為陽性且正確的比例)與召回率(實際為陽性預測正確的比例)之間做取捨。


    sklearn指標
    sklearn.metrics.recall_score召回


    sklearn.metrics.precision_score精確

    sklearn.metrics.balanced_accuracy_score平衡準確率

    sklearn.metrics.accuracy_score準確率

    • 物件偵測計算同上
      通常物件偵測會計算IOU大於0.5為TP,小於0.5為FP。
      [class1]
      precision: 2/3=66% (判對class1 數量/被框為class1的數量),越低過檢越高。
      recall: 2/4=50% (判對class1 數量/所有class1樣本數),越低漏檢越高。
      [class2]
      precision: 1/1=100% (判對class2 數量 / 被框為class2 的數量),越低過檢越高。
      recall: 1/1=100% (判對class2 數量 / 所有class2 樣本數),越低漏檢越高。



      AP計算:
      計算類別曲線下面積(area under curve, AUC)



      mAP計算:
      計算所有類別AP的平均。

    validation(驗證)

    通常我們會將Data分成train set(訓練集)以及test set(測試集)來檢驗我們訓練的模型一般化能力,然而我們在訓練模型時,時常需要調整許多hyperparameter(超參數),所以我們會拿一部分資料來做validation(驗證)稱為validation set,來檢驗超參數的好壞,但是validation是不能拿test set來使用的,因為這等同於讓訓練模型去適應test set的資料,就失去測試一般化能力(適應訓練資料以外資料的能力)的意義了,最後test set測試的資料我們可以稱它為holdout set

    這是最簡單的validation方式,將資料直接分成train、holdout 或train、validation、holdout。

    Cross validation(交叉驗證)

    sklearn.model_selection

    • K-fold CV
      K-fold是常用的交叉驗證方法,做法是將資料隨機平均分成k個集合,然後輪流使用k-1個不同集合來作validation,共做k-1次訓練,最後再使用沒作訓練的那一個holdout set測試訓練成果。
      k越大,每次投入的訓練集的數據越多,模型的bias越小。但是k越大,variance可能越高導致overfitting,同時k越大運算量越大。


      sklearn.model_selection.cross_val_score
    • Leave-one-out cross-validation(LOOCV)
      LOOCV是指我們一樣保留一部分資料作為holdout,但將剩餘的每一筆數據都作為一個集合,每作一次train就做一次validation。


      sklearn.model_selection.LeaveOneOut

      sklearn.model_selection.cross_val_score

    hyperparameter最佳化

    步驟1:給定超參數一個範圍,從設定超參數中隨機取樣。
    步驟2:進行訓練,從驗證資料辨識準確度。
    步驟3:重複前兩步驟多次,從結果慢慢縮小範圍。

    sklearn.model_selection.fit_grid_point
    sklearn.model_selection.GridSearchCV



    underfitting、overfitting

    hypothesis set(假設集)是我們假設的一個function set,例如: wx+b,我們選定參數(w、b)後的那個function稱predict(預測函數),例如: 2x+3
    y 是我們真實產生數據的一個function,我們的數據是y |_x + noise(噪音) + error(誤差),noise通常有規律性(例如常態分怖),error為現實生活中數據可能因為人為、機器、測量等等產生誤差。

    1. high Bias即所謂的Underfitting,訓練與驗證loss很高(表示數據y與predic差異很大),可能是參數過少導致無法擬合訓練集(模型過於簡單),也可能是數據noise或error太大(數據質量太差),或是gradient descent無法到達最低點等等(超參數及模型需調整)。

      參數過少
      數據noise、error太大
    2. low Bias high Variance即所謂的Overfitting,訓練loss很低,但驗證loss卻很高。
      可能是參數過多導致過度擬合訓練集(模型太過複雜,需要降低複雜度、regularization或Dropout等),也可能是數據過少(沒有足夠的信息來判斷規則)等等。

      hypothesis set參數過多
      數據過少

    underfitting與gradient descent關係

    • loss作圖
      這邊假設我們的hypothesis = wx+b,那麼 loss = (y-wx+b)^2,這邊2個變量(w、b)跟一個應變量(loss),其他x、y為常數(已知),我們可以用loss對y作圖(3維)。z軸是loss,另外兩軸是我們的hypothesis set參數(w、b)。
      但我們有多筆數據,例如250筆所以我們Loss改寫成:
      \frac{\Sigma_{i}^{250} (y_i - w x_i + b)}{250},換成n表示樣本數\frac{\Sigma_{i}^{n} (y_i - w x_i + b)}{n}
      所以我們求的是250筆資料疊加後的圖形,且一樣是三維圖形,可能是凸函數或非凸函數,當hypothesis越複雜(NN越深、或有許多非線性繳活函數)越會造成非凸函數。

      凸函數
      非凸函數
    • 函數疊加
      這邊再簡化hypothesis = wx來解釋疊加的圖形,假設有2筆數據,第一筆{x=2,y=0},第二筆{x=1,y=0},那麼\frac{\Sigma_{i}^{2} (y_i - w x_i)}{2}與他們的圖形如下圖:
      *由此可以得知sgd可能會更新不到實際的全局最小值。

    • 關係
      gradient descent就是從圖型中隨機選擇一個參數點(固定W、B),然後計算梯度,更新參數點作移動,停止條件是gtad=0(梯度、坡度等於零),如下圖:

    underfitting,訓練與驗證loss高,1.有可能是圖型的全局最小值本身就很高,參數太少或數據noise或error太大導致,2.也有可能全局最小值很低但我們的權重更新不到全局最小值,可能是卡在鞍點、某個最高點、局部小值。

    非凸函數
    鞍點

    Model evaluation

    • 調參小trick
      train前先使用一部分非常少的數據,先訓練看看是否能過擬合,如果不行可以檢查看看是不是有什麼地方寫錯了。

    相关文章

      网友评论

          本文标题:[模型評估]Evaluation、Vaildation

          本文链接:https://www.haomeiwen.com/subject/qilfyqtx.html