學習曲線Learning Curve - w3c學習教程

文章推薦指數: 80 %
投票人數:10人

學習曲線Learning Curve,學習曲線是什麼? 學習曲線learning curve 來判斷模型狀態過擬合欠擬合學習曲線是不同訓練集大小,模型在訓練集和驗證集上的 ... 學習曲線LearningCurve 2021-08-2721:30:18字數3386閱讀6567 學習曲線是什麼? 學習曲線(learningcurve)來判斷模型狀態:過擬合欠擬合 學習曲線是不同訓練集大小,模型在訓練集和驗證集上的得分變化曲線。

也就是以樣本數為橫座標,訓練和交叉驗證集上的得分(如準確率)為縱座標。

learningcurve可以幫助我們判斷模型現在所處的狀態:過擬合(overfiting/highvariance)or欠擬合(underfitting/highbias) 模型欠擬合、過擬合、偏差和方差平衡時對應的學習曲線如下圖所示: (1)左上角的圖中訓練集和驗證集上的曲線能夠收斂。

在訓練集合驗證集上準確率相差不大,卻都很差。

這說明模擬對已知資料和未知都不能進行準確的**,屬於高偏差。

這種情況模型很可能是欠擬合。

可以針對欠擬合採取對應的措施。

欠擬合措施: 我們可以增加模型引數(特徵),比如,構建更多的特徵,減小正則項。

採用更復雜的模型 此時通過增加資料量是不起作用的。

(為什麼?) (2)右上角的圖中模型在訓練集上和驗證集上的準確率差距很大。

說明模型能夠很好的擬合已知資料,但是泛化能力很差,屬於高方差。

模擬很可能過擬合,要採取過擬合對應的措施。

過擬合措施: 我們可以增大訓練集,降低模型複雜度,增大正則項, 或者通過特徵選擇減少特徵數,即做一下featureselection,挑出較好的feature的subset來做training (3)理想情況是找到偏差和方差都很小的情況,即收斂且誤差較小。

如右角的圖。

【畫學習曲線】 不用過於理解,直接參照如下函式,呼叫使用吧。

importnumpyasnp importmatplotlib.pyplotasplt fromsklearn.learning_curveimportlearning_curve #用sklearn的learning_curve得到training_score和cv_score,使用matplotlib畫出learningcurve defplot_learning_curve (estimator,title,x,y,ylim=none,cv=none,n_jobs=1, train_sizes=np.linspace(.05,1.,20),verbose=0,plot=true): """畫出data在某模型上的learningcurve. 引數解釋 ---------- estimator:你用的分類器。

title:**的標題。

x:輸入的feature,numpy型別 y:輸入的targetvector ylim:tuple格式的(ymin,ymax),設定影象中縱座標的最低點和最高點 cv:做cross-validation的時候,資料分成的份數,其中一份作為cv集,其餘n-1份作為training(預設為3份) n_jobs:並行的的任務數(預設1) """train_sizes,train_scores,test_scores=learning_curve( estimator,x,y,cv=cv,n_jobs=n_jobs,train_sizes=train_sizes,verbose=verbose) train_scores_mean=np.mean(train_scores,axis=1) train_scores_std=np.std(train_scores,axis=1) test_scores_mean=np.mean(test_scores,axis=1) test_scores_std=np.std(test_scores,axis=1) ifplot: plt.figure() plt.title(title) ifylimis notnone: plt.ylim(*ylim) plt.xlabel(u"訓練樣本數") plt.ylabel(u"得分") plt.gca().invert_yaxis() plt.grid() plt.fill_between(train_sizes,train_scores_mean-train_scores_std,train_scores_mean+train_scores_std, alpha=0.1,color="b") plt.fill_between(train_sizes,test_scores_mean-test_scores_std,test_scores_mean+test_scores_std, alpha=0.1,color="r") plt.plot(train_sizes,train_scores_mean,'o-',color="b",label=u"訓練集上得分") plt.plot(train_sizes,test_scores_mean,'o-',color="r",label=u"交叉驗證集上得分") plt.legend(loc="best") plt.draw() plt.show() plt.gca().invert_yaxis() midpoint=((train_scores_mean[-1]+train_scores_std[-1])+(test_scores_mean[-1]-test_scores_std[-1]))/2 diff=(train_scores_mean[-1]+train_scores_std[-1])-(test_scores_mean[-1]-test_scores_std[-1]) returnmidpoint,diff plot_learning_curve(clf,u"學習曲線",x,y) 輸出如下: 其中plot_learning_curve(clf,u"學習曲線",x,y)clf是模型的物件,x是訓練集(不包含標籤),y是標籤, x,y,和clf變數名稱出自 [kaggle——高分泰坦尼克災難生存**詳細講解(lr、bagging)] 這篇部落格的值。

相關推薦 簡單說一說一些面試的時候會問到的問題 學習日誌2 linux中sort命令使用 學習曲線LearningCurve HDU4135Coprime 相關推薦 簡單說一說一些面試的時候會問到的問題 學習日誌2 linux中sort命令使用 學習曲線LearningCurve HDU4135Coprime 相關閱讀 簡單說一說一些面試的時候會問到的問題 學習日誌2 linux中sort命令使用 學習曲線LearningCurve HDU4135Coprime 自學Python物件導向三大特性之繼承 topic 科技 教育 python 社會 linux 數碼 java c++ 遊戲 演算法 資料庫 健康 文化 mysql 汽車 娛樂 科學 財經 資料結構 C語言 職場 php oracle c# C 作業系統 工作 體育 sql 網路



請為這篇文章評分?