學習曲線Learning Curve - w3c學習教程
文章推薦指數: 80 %
學習曲線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
網路
延伸文章資訊
- 1用学习曲线learning curve 来判别过拟合问题 - 腾讯云
用验证曲线validation curve 选择超参数今天来看看网格搜索(grid search),也是一种常用的找最优... 机器学习老中医:利用学习曲线诊断模型的偏差和方差 ...
- 2机器学习之学习曲线learning curve和过拟合、欠拟合
一、学习曲线学习曲线是什么?学习曲线就是通过画出不同训练集大小时训练集和交叉验证的准确率,可以看到模型在新数据上的表现,进而来判断模型是否 ...
- 3學習曲線Learning Curve - w3c學習教程
學習曲線Learning Curve,學習曲線是什麼? 學習曲線learning curve 來判斷模型狀態過擬合欠擬合學習曲線是不同訓練集大小,模型在訓練集和驗證集上的 ...
- 4【机器学习】学习曲线(learning curve) - 知乎专栏
【机器学习】学习曲线(learning curve). 3 年前· 来自专栏老鸟也想飞. Albery. 程序员. 关注. 特征量的度:d(ploynomial).
- 5Learning Curve 与偏差方差(判断欠过拟合) - Vancuicide
学习曲线就是通过画出不同训练集大小时训练集和验证集的准确率,可以看到模型在新数据上的表现,进而来判断模型是否方差偏高或偏差过高,是否可以通过增加 ...