sklearn evaluation(評(píng)估)
sklearn Estimator(model)通常類(lèi)中有一個(gè)score方法來(lái)作為默認(rèn)評(píng)分標(biāo)準(zhǔn),而呼叫evaluation(例如:cross_val_score)有一個(gè)參數(shù)scoring可以另外指定評(píng)分標(biāo)準(zhǔn),輸入為下圖的scoring字符串,傳入evaluation的Estimator還必須實(shí)現(xiàn)fit跟predict方法(其實(shí)就是訓(xùn)練(參數(shù)為x,y)跟預(yù)測(cè)(參數(shù)為x))。
可以自定義建立Estimator跟method搭配tensorflow或pytorch使用。
- Scoring轉(zhuǎn)scorer
有時(shí)候Scoring是loss(損失函數(shù))越高表示模型表現(xiàn)越差,我們將損失轉(zhuǎn)成得分,越高分表示模型表現(xiàn)越好。
sklearn.metrics.make_scorer


非平衡數(shù)據(jù)正確性
-
分類(lèi)器
一個(gè)常見(jiàn)的例子,我們預(yù)測(cè)一個(gè)人是否會(huì)得腦癌,而我們有個(gè)模型正確率為98%,我們的判斷方式是名子叫魯夫的人就會(huì)得腦癌。我們可以在精確率(預(yù)測(cè)為陽(yáng)性且正確的比例)與召回率(實(shí)際為陽(yáng)性預(yù)測(cè)正確的比例)之間做取捨。
sklearn指標(biāo)
sklearn.metrics.recall_score召回

sklearn.metrics.precision_score精確

sklearn.metrics.balanced_accuracy_score平衡準(zhǔn)確率

sklearn.metrics.accuracy_score準(zhǔn)確率

-
物件偵測(cè)計(jì)算同上
通常物件偵測(cè)會(huì)計(jì)算IOU大於0.5為T(mén)P,小於0.5為FP。
[class1]
precision: 2/3=66% (判對(duì)class1 數(shù)量/被框?yàn)閏lass1的數(shù)量),越低過(guò)檢越高。
recall: 2/4=50% (判對(duì)class1 數(shù)量/所有class1樣本數(shù)),越低漏檢越高。
[class2]
precision: 1/1=100% (判對(duì)class2 數(shù)量 / 被框?yàn)閏lass2 的數(shù)量),越低過(guò)檢越高。
recall: 1/1=100% (判對(duì)class2 數(shù)量 / 所有class2 樣本數(shù)),越低漏檢越高。
AP計(jì)算:
計(jì)算類(lèi)別曲線(xiàn)下面積(area under curve, AUC)
mAP計(jì)算:
計(jì)算所有類(lèi)別AP的平均。
validation(驗(yàn)證)
通常我們會(huì)將Data分成train set(訓(xùn)練集)以及test set(測(cè)試集)來(lái)檢驗(yàn)我們訓(xùn)練的模型一般化能力,然而我們?cè)谟?xùn)練模型時(shí),時(shí)常需要調(diào)整許多hyperparameter(超參數(shù)),所以我們會(huì)拿一部分資料來(lái)做validation(驗(yàn)證)稱(chēng)為validation set,來(lái)檢驗(yàn)超參數(shù)的好壞,但是validation是不能拿test set來(lái)使用的,因?yàn)檫@等同於讓訓(xùn)練模型去適應(yīng)test set的資料,就失去測(cè)試一般化能力(適應(yīng)訓(xùn)練資料以外資料的能力)的意義了,最後t(yī)est set測(cè)試的資料我們可以稱(chēng)它為holdout set。
這是最簡(jiǎn)單的validation方式,將資料直接分成train、holdout 或train、validation、holdout。

- 切割數(shù)據(jù)
sklearn.model_selection.train_test_split
Cross validation(交叉驗(yàn)證)
-
K-fold CV
K-fold是常用的交叉驗(yàn)證方法,做法是將資料隨機(jī)平均分成k個(gè)集合,然後輪流使用k-1個(gè)不同集合來(lái)作validation,共做k-1次訓(xùn)練,最後再使用沒(méi)作訓(xùn)練的那一個(gè)holdout set測(cè)試訓(xùn)練成果。
k越大,每次投入的訓(xùn)練集的數(shù)據(jù)越多,模型的bias越小。但是k越大,variance可能越高導(dǎo)致overfitting,同時(shí)k越大運(yùn)算量越大。
sklearn.model_selection.cross_val_score
-
Leave-one-out cross-validation(LOOCV)
LOOCV是指我們一樣保留一部分資料作為holdout,但將剩餘的每一筆數(shù)據(jù)都作為一個(gè)集合,每作一次train就做一次validation。
sklearn.model_selection.LeaveOneOut
sklearn.model_selection.cross_val_score
hyperparameter最佳化
步驟1:給定超參數(shù)一個(gè)範(fàn)圍,從設(shè)定超參數(shù)中隨機(jī)取樣。
步驟2:進(jìn)行訓(xùn)練,從驗(yàn)證資料辨識(shí)準(zhǔn)確度。
步驟3:重複前兩步驟多次,從結(jié)果慢慢縮小範(fàn)圍。
sklearn.model_selection.fit_grid_point
sklearn.model_selection.GridSearchCV



underfitting、overfitting
hypothesis set(假設(shè)集)是我們假設(shè)的一個(gè)function set,例如: ,我們選定參數(shù)(w、b)後的那個(gè)function稱(chēng)predict(預(yù)測(cè)函數(shù)),例如:
。
y 是我們真實(shí)產(chǎn)生數(shù)據(jù)的一個(gè)function,我們的數(shù)據(jù)是,noise通常有規(guī)律性(例如常態(tài)分怖),error為現(xiàn)實(shí)生活中數(shù)據(jù)可能因?yàn)槿藶?、機(jī)器、測(cè)量等等產(chǎn)生誤差。
-
high Bias即所謂的Underfitting,訓(xùn)練與驗(yàn)證loss很高(表示數(shù)據(jù)y與predic差異很大),可能是參數(shù)過(guò)少導(dǎo)致無(wú)法擬合訓(xùn)練集(模型過(guò)於簡(jiǎn)單),也可能是數(shù)據(jù)noise或error太大(數(shù)據(jù)質(zhì)量太差),或是gradient descent無(wú)法到達(dá)最低點(diǎn)等等(超參數(shù)及模型需調(diào)整)。
參數(shù)過(guò)少
數(shù)據(jù)noise、error太大 -
low Bias high Variance即所謂的Overfitting,訓(xùn)練loss很低,但驗(yàn)證loss卻很高。
可能是參數(shù)過(guò)多導(dǎo)致過(guò)度擬合訓(xùn)練集(模型太過(guò)複雜,需要降低複雜度、regularization或Dropout等),也可能是數(shù)據(jù)過(guò)少(沒(méi)有足夠的信息來(lái)判斷規(guī)則)等等。
hypothesis set參數(shù)過(guò)多
數(shù)據(jù)過(guò)少
underfitting與gradient descent關(guān)係
-
loss作圖
這邊假設(shè)我們的,那麼
,這邊2個(gè)變量(w、b)跟一個(gè)應(yīng)變量(loss),其他x、y為常數(shù)(已知),我們可以用loss對(duì)y作圖(3維)。z軸是loss,另外兩軸是我們的hypothesis set參數(shù)(w、b)。
但我們有多筆數(shù)據(jù),例如250筆所以我們Loss改寫(xiě)成:
,換成n表示樣本數(shù)
所以我們求的是250筆資料疊加後的圖形,且一樣是三維圖形,可能是凸函數(shù)或非凸函數(shù),當(dāng)hypothesis越複雜(NN越深、或有許多非線(xiàn)性繳活函數(shù))越會(huì)造成非凸函數(shù)。
凸函數(shù)
非凸函數(shù) -
函數(shù)疊加
這邊再簡(jiǎn)化hypothesis = wx來(lái)解釋疊加的圖形,假設(shè)有2筆數(shù)據(jù),第一筆{x=2,y=0},第二筆{x=1,y=0},那麼與他們的圖形如下圖:
*由此可以得知sgd可能會(huì)更新不到實(shí)際的全局最小值。
-
關(guān)係
gradient descent就是從圖型中隨機(jī)選擇一個(gè)參數(shù)點(diǎn)(固定W、B),然後計(jì)算梯度,更新參數(shù)點(diǎn)作移動(dòng),停止條件是gtad=0(梯度、坡度等於零),如下圖:
underfitting,訓(xùn)練與驗(yàn)證loss高,1.有可能是圖型的全局最小值本身就很高,參數(shù)太少或數(shù)據(jù)noise或error太大導(dǎo)致,2.也有可能全局最小值很低但我們的權(quán)重更新不到全局最小值,可能是卡在鞍點(diǎn)、某個(gè)最高點(diǎn)、局部小值。


- 調(diào)參小trick
train前先使用一部分非常少的數(shù)據(jù),先訓(xùn)練看看是否能過(guò)擬合,如果不行可以檢查看看是不是有什麼地方寫(xiě)錯(cuò)了。















