您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

機(jī)器學(xué)習(xí)之模型評(píng)估和優(yōu)化

大?。?/span>0.5 MB 人氣: 2017-10-12 需要積分:1
  機(jī)器學(xué)習(xí)之模型評(píng)估和優(yōu)化
  監(jiān)督學(xué)習(xí)的主要任務(wù)就是用模型實(shí)現(xiàn)精準(zhǔn)的預(yù)測(cè)。我們希望自己的機(jī)器學(xué)習(xí)模型在新數(shù)據(jù)(未被標(biāo)注過的)上取得盡可能高的準(zhǔn)確率。換句話說,也就是我們希望用訓(xùn)練數(shù)據(jù)訓(xùn)練得到的模型能適用于待測(cè)試的新數(shù)據(jù)。正是這樣,當(dāng)實(shí)際開發(fā)中訓(xùn)練得到一個(gè)新模型時(shí),我們才有把握用它預(yù)測(cè)出高質(zhì)量的結(jié)果。
  因此,當(dāng)我們?cè)谠u(píng)估模型的性能時(shí),我們需要知道某個(gè)模型在新數(shù)據(jù)集上的表現(xiàn)如何。這個(gè)看似簡(jiǎn)單的問題卻隱藏著諸多難題和陷阱,即使是經(jīng)驗(yàn)豐富的機(jī)器學(xué)習(xí)用戶也不免陷入其中。我們將在本文中講述評(píng)估機(jī)器學(xué)習(xí)模型時(shí)遇到的難點(diǎn),提出一種便捷的流程來克服那些棘手的問題,并給出模型效果的無偏估計(jì)。
  問題:過擬合與模型優(yōu)化
  假設(shè)我們要預(yù)測(cè)一個(gè)農(nóng)場(chǎng)谷物的畝產(chǎn)量,其畝產(chǎn)量與農(nóng)場(chǎng)里噴灑農(nóng)藥的耕地比例呈一種函數(shù)關(guān)系。我們針對(duì)這一回歸問題已經(jīng)收集了100個(gè)農(nóng)場(chǎng)的數(shù)據(jù)。若將目標(biāo)值(谷物畝產(chǎn)量)與特征(噴灑農(nóng)藥的耕地比例)畫在坐標(biāo)系上,可以看到它們之間存在一個(gè)明顯的非線性遞增關(guān)系,數(shù)據(jù)點(diǎn)本身也有一些隨機(jī)的擾動(dòng)(見圖1)。
  為了描述評(píng)價(jià)模型預(yù)測(cè)準(zhǔn)確性所涉及的一些挑戰(zhàn),我們從這個(gè)例子說開去。
  
  圖1:信噪比
  現(xiàn)在,假設(shè)我們要使用一個(gè)簡(jiǎn)單的非參數(shù)回歸模型來構(gòu)建耕地農(nóng)藥使用率和谷物畝產(chǎn)量的模型。最簡(jiǎn)單的機(jī)器學(xué)習(xí)回歸模型之一就是內(nèi)核平滑技術(shù)。內(nèi)核平滑即計(jì)算局部平均:對(duì)于每一個(gè)新的數(shù)據(jù)來說,用與其特征值接近的訓(xùn)練數(shù)據(jù)點(diǎn)求平均值來對(duì)其目標(biāo)變量建模。唯一一個(gè)參數(shù)——寬參數(shù),是用來控制局部平均的窗口大小。
  圖2演示了內(nèi)核平滑窗寬參數(shù)取值不同所產(chǎn)生的效果。窗寬值較大時(shí),幾乎是用所有訓(xùn)練數(shù)據(jù)的平均值來預(yù)測(cè)測(cè)試集里每個(gè)數(shù)據(jù)點(diǎn)的目標(biāo)值。這導(dǎo)致模型很平坦,對(duì)訓(xùn)練數(shù)據(jù)分布的明顯趨勢(shì)欠擬合(under-fit)了。同樣,窗寬值過小時(shí),每次預(yù)測(cè)只用到了待測(cè)數(shù)據(jù)點(diǎn)周圍一兩個(gè)訓(xùn)練數(shù)據(jù)。因此,模型把訓(xùn)練數(shù)據(jù)點(diǎn)的起伏波動(dòng)完完全全地反映出來。這種疑似擬合噪音數(shù)據(jù)而非真實(shí)信號(hào)的現(xiàn)象被稱為過擬合(over-fitting)。我們的理想情況是處于一個(gè)平衡狀態(tài):既不欠擬合,也不過擬合。
  
  圖2:三種平滑回歸模型對(duì)谷物產(chǎn)量數(shù)據(jù)的擬合。
  現(xiàn)在,我們?cè)賮碇販匾槐閱栴}:判斷分析機(jī)器學(xué)習(xí)模型對(duì)預(yù)測(cè)其它農(nóng)場(chǎng)的谷物產(chǎn)量的泛化能力。這個(gè)過程的第一步就是選擇一個(gè)能反映預(yù)測(cè)能力的評(píng)估指標(biāo)(evaluation metric)。對(duì)于回歸問題,標(biāo)準(zhǔn)的評(píng)估方法是均方誤差(MSE),即目標(biāo)變量的真實(shí)值與模型預(yù)測(cè)值的誤差平方的平均值。
  這正是令人棘手的地方。當(dāng)我們擬合訓(xùn)練數(shù)據(jù)時(shí),模型預(yù)測(cè)的誤差(MSE)隨著窗寬參數(shù)的減小而減小。這個(gè)結(jié)果并不出人意料:因?yàn)槟P偷撵`活度越高,它對(duì)訓(xùn)練數(shù)據(jù)模式(包括信號(hào)和噪音)的擬合度也越好。然而,由于窗寬最小的模型擬合了訓(xùn)練數(shù)據(jù)的每一處隨機(jī)因素導(dǎo)致的波動(dòng),它在訓(xùn)練數(shù)據(jù)集上出現(xiàn)了嚴(yán)重的過擬合情況。若用這些模型來預(yù)測(cè)新的數(shù)據(jù)將會(huì)導(dǎo)致糟糕的準(zhǔn)確率,因?yàn)樾聰?shù)據(jù)的噪音與訓(xùn)練數(shù)據(jù)的噪音模式不盡相同。
  所以,訓(xùn)練集的誤差和機(jī)器學(xué)習(xí)模型的泛化誤差(generalization error)存在分歧。在圖3所示谷物產(chǎn)量數(shù)據(jù)的例子中可以看到這種分歧。對(duì)于較小的窗口參數(shù)值,訓(xùn)練數(shù)據(jù)集的MSE非常小,而在新數(shù)據(jù)(10000個(gè)新數(shù)據(jù))上的MSE則大得多。簡(jiǎn)單地說,一個(gè)模型在訓(xùn)練集上的預(yù)測(cè)效果并不能反映出它在新數(shù)據(jù)集上的預(yù)測(cè)效果。因此,把模型的訓(xùn)練數(shù)據(jù)直接當(dāng)作驗(yàn)證數(shù)據(jù)是一件非常危險(xiǎn)的事情。
  使用訓(xùn)練數(shù)據(jù)的注意事項(xiàng)
  用同一份訓(xùn)練數(shù)據(jù)來擬合模型和評(píng)價(jià)模型,會(huì)使得你對(duì)模型的效果過于樂觀。這可能導(dǎo)致你最終選擇了一個(gè)次優(yōu)的模型,在預(yù)測(cè)新數(shù)據(jù)時(shí)表現(xiàn)平平。
  如我們?cè)诠任锂a(chǎn)量的例子中所見,若按照最小化訓(xùn)練集MSE的原則優(yōu)化,則得到窗寬參數(shù)最小的模型。這個(gè)模型在訓(xùn)練集上的MSE為0.08。但是,若用新的數(shù)據(jù)測(cè)試,同樣的模型得到的MSE達(dá)到0.50,效果比優(yōu)化模型糟糕的多(窗寬0.12,MSE=0.27)。
  我們需要一個(gè)評(píng)價(jià)指標(biāo),能更好地估計(jì)模型在新數(shù)據(jù)集上的效果。這樣,我們?cè)谟媚P皖A(yù)測(cè)新數(shù)據(jù)集時(shí)有把握取得一個(gè)較好的準(zhǔn)確率。下一節(jié)我們將討論這個(gè)話題。
  
  圖3:谷物產(chǎn)量回歸問題,訓(xùn)練集上誤差和新數(shù)據(jù)集上誤差的比較。訓(xùn)練集誤差過于樂觀地反映了模型在新數(shù)據(jù)集上的效果,尤其是在窗寬參數(shù)值較小的情況下。很顯然,用模型在訓(xùn)練集上的誤差來替代其在新數(shù)據(jù)集上的誤差,會(huì)給我們帶來許多麻煩。
  解決方案:交叉驗(yàn)證
  我們已經(jīng)剖析了模型評(píng)估的難解之處:模型在訓(xùn)練集數(shù)據(jù)上的誤差不能反映其在新數(shù)據(jù)集上的誤差情況。為了更好地估計(jì)模型在新數(shù)據(jù)集上的錯(cuò)誤率,我們必須使用更復(fù)雜的方法,稱作交叉驗(yàn)證(cross validation),它嚴(yán)格地使用訓(xùn)練集數(shù)據(jù)來評(píng)價(jià)模型在新數(shù)據(jù)集上的準(zhǔn)確率。
  兩種常用的交叉驗(yàn)證方法是holdout方法和K-fold交叉驗(yàn)證。
  Holdout 方法
  同一份訓(xùn)練數(shù)據(jù)既用于數(shù)據(jù)擬合又用于準(zhǔn)確率評(píng)估,會(huì)導(dǎo)致過度樂觀。最容易的規(guī)避方法是分別準(zhǔn)備訓(xùn)練和測(cè)試的兩個(gè)子數(shù)據(jù)集,訓(xùn)練子集僅用于擬合模型,測(cè)試子集僅用于評(píng)估模型的準(zhǔn)確率。
  這個(gè)方法被稱作是holdout方法,因?yàn)殡S機(jī)地選擇一部分訓(xùn)練數(shù)據(jù)僅用于訓(xùn)練過程。通常保留30%的數(shù)據(jù)作為測(cè)試數(shù)據(jù)。holdout方法的基本流程如圖4所示,Python的偽代碼詳見列表1.
  
  圖4:Holdout交叉驗(yàn)證的流程圖。深綠色的方塊表示目標(biāo)變量。
  # assume that we begin with two inputs:# features - a matrix of input features# target - an array of target variables# corresponding to those featuresN= features.shape[0] N_train= floor(0.7 * N) # randomly select indices for the training subsetidx_train= random.sample(np.arange(N), N_train) # break your data into training and testing subsetsfeatures_train= features[idx_train,:] target_train= target[idx_train] features_test= features[~idx_train,:] target_test= target[~idx_train] # build a model on the training setmodel= train(features_train, target_train) # generate model predictions on the testing setpreds_test= predict(model, features_test) # evaluate the accuracy of the predictionsaccuracy= evaluate_acc(preds_test, target_test)
  列表1:Holdout方法的交叉驗(yàn)證
  我們接下去把Holdout方法應(yīng)用于谷物產(chǎn)量的數(shù)據(jù)集上。對(duì)于不同的窗寬參數(shù),我們應(yīng)用Holdout方法(三七開)并且在剩余的30%數(shù)據(jù)上計(jì)算預(yù)測(cè)值的MSE。圖5演示了Holdout方法得到的MSE是如何估計(jì)模型在新數(shù)據(jù)集上的MSE。有兩點(diǎn)需要關(guān)注:
  Holdout方法計(jì)算得到的誤差估計(jì)非常接近模型在“新數(shù)據(jù)集”的誤差。它們確實(shí)比用訓(xùn)練集數(shù)據(jù)得到的誤差估計(jì)更接近(圖3),尤其是對(duì)于窗口參數(shù)值較小的情況。
  Holdout方法的誤差估計(jì)有很多噪音。相比從新數(shù)據(jù)得到的光滑的誤差曲線,其跳躍波動(dòng)很厲害。
  我們可以反復(fù)地隨機(jī)切分訓(xùn)練-測(cè)試數(shù)據(jù)集,對(duì)結(jié)果求平均值,以減小噪音影響。然而,在多次迭代中,每一個(gè)數(shù)據(jù)點(diǎn)被分配到測(cè)試數(shù)據(jù)集的概率并不一定,這將導(dǎo)致我們的結(jié)果存在偏差。
  更好的一種方法是K-fold交叉驗(yàn)證。
  
  圖5:在谷物產(chǎn)量數(shù)據(jù)集上比較Holdout方法的MSE與新數(shù)據(jù)集的MSE。Holdout誤差是每個(gè)模型在新數(shù)據(jù)集上的一個(gè)無偏誤差估計(jì)。但是,它的估計(jì)值存在很大的噪音,在優(yōu)化模型的窗寬附近(窗寬=0.12)其誤差波動(dòng)范圍是0.14~0.40。
  K-Fold交叉驗(yàn)證
  一種更好,但是計(jì)算量更大的交叉驗(yàn)證方法是K-fold交叉驗(yàn)證。如同Holdout方法,K-fold交叉驗(yàn)證也依賴于訓(xùn)練數(shù)據(jù)的若干個(gè)相互獨(dú)立子集。主要的區(qū)別在于K-fold交叉驗(yàn)證一開始就隨機(jī)把數(shù)據(jù)分割成K個(gè)不相連的子集,成為folds(一般稱作K折交叉驗(yàn)證,K的取值有5、10或者20)。每次留一份數(shù)據(jù)作為測(cè)試集,其余數(shù)據(jù)用于訓(xùn)練模型。
  當(dāng)每一份數(shù)據(jù)都輪轉(zhuǎn)一遍之后,將預(yù)測(cè)的結(jié)果整合,并與目標(biāo)變量的真實(shí)值比較來計(jì)算準(zhǔn)確率。K-fold交叉驗(yàn)證的圖形展示如圖6所示,列表2是偽代碼。
  
  圖6: K-fold交叉驗(yàn)證的流程圖。
  最后,我們把K-fold方法用于谷物產(chǎn)量數(shù)據(jù)集上。對(duì)于不同從窗寬參數(shù),我們選擇K=10的K-fold交叉驗(yàn)證方法,并計(jì)算預(yù)測(cè)值的準(zhǔn)確率。圖7演示了K-fold方法得到的MSE是如何估計(jì)模型在新數(shù)據(jù)集上的MSE。顯然,K-fold交叉驗(yàn)證的誤差估計(jì)非常接近模型在新數(shù)據(jù)上的誤差值。
  # assume that we beginwithtwo inputs: # features - a matrix ofinputfeatures # target - an array oftarget variables # correspondingtothose features N = features.shape[0] K = 10# numberoffolds preds_kfold = np.empty(N) folds = np.random.randint(0, K, size=N) # loop through the cross-validation folds forii innp.arange(K): # break your data intotraining andtesting subsets features_train = features[folds != ii,:] target_train = target[folds != ii] features_test = features[folds == ii,:] # build a model onthe training setmodel = train(features_train, target_train) # generate andstore model predictions onthe testing setpreds_kfold[folds == ii] = predict(model, features_test) # evaluate the accuracy ofthe predictions accuracy = evaluate_acc(preds_kfold, target)
  列表2:K-fold交叉驗(yàn)證
  
  圖7:在谷物產(chǎn)量數(shù)據(jù)集上比較K-fold方法的MSE與新數(shù)據(jù)集的MSE。K-fold交叉驗(yàn)證得到的誤差很好地驗(yàn)證了模型在新數(shù)據(jù)集上的效果,使得我們能夠大膽地估計(jì)模型的誤差以及選擇最優(yōu)模型。
  使用交叉驗(yàn)證的幾點(diǎn)注意事項(xiàng)
  交叉驗(yàn)證為我們?cè)趯?shí)際使用機(jī)器學(xué)習(xí)模型時(shí)提供了一種估計(jì)準(zhǔn)確率的方法。這非常有用,使得我們能夠挑選出最適于任務(wù)的模型。
  但是,在現(xiàn)實(shí)數(shù)據(jù)中應(yīng)用交叉驗(yàn)證方法還有幾點(diǎn)注意事項(xiàng)需要關(guān)注:
  在K-fold方法交叉驗(yàn)證中K的值選的越大,誤差估計(jì)的越好,但是程序運(yùn)行的時(shí)間越長(zhǎng)。
  解決方法:盡可能選取K=10(或者更大)。對(duì)于訓(xùn)練和預(yù)測(cè)速度很快的模型,可以使用leave-one-out的教程驗(yàn)證方法(即K=數(shù)據(jù)樣本個(gè)數(shù))。
  交叉驗(yàn)證方法(包括Holdout和K-fold方法)假設(shè)訓(xùn)練數(shù)據(jù)的分布能代表整體樣本的分布。如果你計(jì)劃部署模型來預(yù)測(cè)一些新數(shù)據(jù),那么這些數(shù)據(jù)的分布應(yīng)該和訓(xùn)練數(shù)據(jù)一致。如果不一致,那么交叉驗(yàn)證的誤差估計(jì)可能會(huì)對(duì)新數(shù)據(jù)集的誤差更加樂觀。
  解決方法:確保在訓(xùn)練數(shù)據(jù)中的任何潛在的偏差都得到處理和最小化。
  一些數(shù)據(jù)集會(huì)用到時(shí)序相關(guān)的特征。例如,利用上個(gè)月的稅收來預(yù)測(cè)本月的稅收。如果你的數(shù)據(jù)集也屬于這種情況,那你必須確保將來的特征不能用于預(yù)測(cè)過去的數(shù)值。
  解決方法:你可以構(gòu)造交叉驗(yàn)證的Holdout數(shù)據(jù)集或者K-fold,使得訓(xùn)練數(shù)據(jù)在時(shí)序上總是早于測(cè)試數(shù)據(jù)。
  總結(jié)
  我們一開始討論了模型評(píng)價(jià)的通用法則。很顯然,我們不能交叉使用同一份訓(xùn)練數(shù)據(jù),不能既用來訓(xùn)練又用來評(píng)估。相反,我們引入了交叉驗(yàn)證這種更可靠的模型評(píng)價(jià)方法。
  Holdout是最簡(jiǎn)單的交叉驗(yàn)證方法,為了更好地估計(jì)模型的通用性,分割一部分?jǐn)?shù)據(jù)作為待預(yù)測(cè)的測(cè)試數(shù)據(jù)集。
  K-fold交叉驗(yàn)證 —— 每次保留K份數(shù)據(jù)中的一份 —— 能夠更確定地估計(jì)模型的效果。這種改進(jìn)的代價(jià)來自于更高的計(jì)算成本。如果條件允許,K等于樣本數(shù)目時(shí)能得到最好的估計(jì),也稱為leave-one-out方法。
  介紹了模型評(píng)價(jià)的基本流程。簡(jiǎn)單來說就是:
  獲取數(shù)據(jù)并做建模前的預(yù)處理(第二章),并且確定合適的機(jī)器學(xué)習(xí)模型和算法(第三章)。構(gòu)建模型,并根據(jù)計(jì)算資源選擇使用Holdout或者K-fold交叉驗(yàn)證方法預(yù)測(cè)數(shù)據(jù)。用所選取的指標(biāo)評(píng)估預(yù)測(cè)結(jié)果。如果是分類的機(jī)器學(xué)習(xí)方法,在4.2節(jié)里會(huì)介紹常見的效果評(píng)價(jià)指標(biāo)。同樣,我們會(huì)在4.3小節(jié)介紹回歸問題的常用評(píng)價(jià)指標(biāo)。不斷調(diào)整數(shù)據(jù)和模型,直到取得理想的效果。在5~8章中,我們會(huì)介紹真實(shí)場(chǎng)景下用于提高模型效果的常用方法。
  對(duì)于分類模型,我們介紹了幾個(gè)用于上述流程中步驟3的模型性能指標(biāo)。這些技術(shù)包括簡(jiǎn)單的準(zhǔn)確率計(jì)算,混淆矩陣,ROC,ROC曲線和ROC曲線下面積。
  在回歸模型中,我們介紹了均方根誤差(rMSE)與R平方估計(jì)(R-squared),我們討論了簡(jiǎn)單的可視化,如預(yù)測(cè)與實(shí)際的散點(diǎn)圖和殘差圖。
  我們介紹了調(diào)整參數(shù)的概念,并展示了如何使用網(wǎng)格搜索算法的參數(shù)優(yōu)化模型。
  英文概念
  中文概念
  定義
  Under/over-fitting 欠擬合/過擬合 使用了過于簡(jiǎn)單/復(fù)雜的模型。
  Evaluation metric 評(píng)價(jià)指標(biāo) 一個(gè)衡量模型效果的數(shù)值。
  Mean squared error 均方差 回歸模型所使用的一種評(píng)價(jià)指標(biāo)。
  Cross-validation 交叉驗(yàn)證 為了更好地估計(jì)準(zhǔn)確率,把訓(xùn)練數(shù)據(jù)分成2份(或者多份)獨(dú)立的訓(xùn)練/測(cè)試數(shù)據(jù)集的方法。
  Holdout method Holdout方法 一種交叉驗(yàn)證的方法,保留一份測(cè)試數(shù)據(jù)集用于模型測(cè)試。
  K-fold cross-validation K折交叉驗(yàn)證 一種交叉驗(yàn)證的方法,數(shù)據(jù)集被分為K份獨(dú)立的子集,每次取出一份作為測(cè)試集,其余數(shù)據(jù)用來訓(xùn)練模型。
  Confusion matrix 混淆矩陣 用于比較分類結(jié)果和實(shí)際測(cè)得值的一種矩陣。
  ROC - Receiver operator characteristic ROC 一種用于記錄真陽性、假陽性、真陰性、假陰性的數(shù)值。
  AUC - Area under the ROC curve ROC曲線下面積 ROC曲線下方的面積大小。
  Tuning parameter 調(diào)整參數(shù) 機(jī)器學(xué)習(xí)算法的一個(gè)內(nèi)部參數(shù),比如內(nèi)核平滑回歸算法的窗寬參數(shù)。
  Grid search 網(wǎng)格搜索 優(yōu)化模型參數(shù)時(shí)采用的一種暴力搜索策略。
?

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?