學習曲線(learning curve)來判斷模型狀態:過擬合欠擬合 - 台部落
文章推薦指數: 80 %
學習曲線(learning curve)來判斷模型狀態:過擬合欠擬合學習曲線是什麼學習曲線是不同訓練集大小,模型在訓練集和驗證集上的得分變化曲線。
請輸入正確的登錄賬號或密碼
註冊
忘記密碼
首頁
sklearn
正文
學習曲線(learningcurve)來判斷模型狀態:過擬合欠擬合
原創
码灵薯
2018-08-2200:03
學習曲線(learningcurve)來判斷模型狀態:過擬合欠擬合
學習曲線是什麼
學習曲線是不同訓練集大小,模型在訓練集和驗證集上的得分變化曲線。
也就是以樣本數爲橫座標,訓練和交叉驗證集上的得分(如準確率)爲縱座標。
learningcurve可以幫助我們判斷模型現在所處的狀態:過擬合(overfiting/highvariance)or欠擬合(underfitting/highbias)
模型欠擬合、過擬合、偏差和方差平衡時對應的學習曲線如下圖所示:
怎麼看學習曲線
左上角的圖中訓練集和驗證集上的曲線能夠收斂。
在訓練集合驗證集上準確率相差不大,卻都很差。
這說明模擬對已知數據和未知都不能進行準確的預測,屬於高偏差。
這種情況模型很可能是欠擬合。
可以針對欠擬合採取對應的措施。
右上角的圖中模型在訓練集上和驗證集上的準確率差距很大。
說明模型能夠很好的擬合已知數據,但是泛化能力很差,屬於高方差。
模擬很可能過擬合,要採取過擬合對應的措施
怎麼畫學習曲線
官方學習曲線例子
importnumpyasnp
importmatplotlib.pyplotasplt
fromsklearn.naive_bayesimportGaussianNB
fromsklearn.svmimportSVC
fromsklearn.datasetsimportload_digits
fromsklearn.model_selectionimportlearning_curve
fromsklearn.model_selectionimportShuffleSplit
defplot_learning_curve(estimator,title,X,y,ylim=None,cv=None,
n_jobs=1,train_sizes=np.linspace(.1,1.0,5)):
"""
畫出data在某模型上的learningcurve.
參數解釋
----------
estimator:你用的分類器。
title:表格的標題。
X:輸入的feature,numpy類型
y:輸入的targetvector
ylim:tuple格式的(ymin,ymax),設定圖像中縱座標的最低點和最高點
cv:做cross-validation的時候,數據分成的份數,其中一份作爲cv集,其餘n-1份作爲training(默認爲3份)
n_jobs:並行的的任務數(默認1)
"""
plt.figure()
plt.title(title)
ifylimisnotNone:
plt.ylim(*ylim)
plt.xlabel("Trainingexamples")
plt.ylabel("Score")
train_sizes,train_scores,test_scores=learning_curve(
estimator,X,y,cv=cv,n_jobs=n_jobs,train_sizes=train_sizes)
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)
plt.grid()
plt.fill_between(train_sizes,train_scores_mean-train_scores_std,
train_scores_mean+train_scores_std,alpha=0.1,
color="r")
plt.fill_between(train_sizes,test_scores_mean-test_scores_std,
test_scores_mean+test_scores_std,alpha=0.1,color="g")
plt.plot(train_sizes,train_scores_mean,'o-',color="r",
label="Trainingscore")
plt.plot(train_sizes,test_scores_mean,'o-',color="g",
label="Cross-validationscore")
plt.legend(loc="best")
plt.draw()
plt.show()
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
digits=load_digits()
X,y=digits.data,digits.target
title="LearningCurves(NaiveBayes)"
#Crossvalidationwith100iterationstogetsmoothermeantestandtrain
#scorecurves,eachtimewith20%datarandomlyselectedasavalidationset.
cv=ShuffleSplit(n_splits=100,test_size=0.2,random_state=0)
estimator=GaussianNB()
plot_learning_curve(estimator,title,X,y,ylim=(0.7,1.01),cv=cv,n_jobs=4)
title="LearningCurves(SVM,RBFkernel,$\gamma=0.001$)"
#SVCismoreexpensivesowedoalowernumberofCViterations:
cv=ShuffleSplit(n_splits=10,test_size=0.2,random_state=0)
estimator=SVC(gamma=0.001)
plot_learning_curve(estimator,title,X,y,(0.7,1.01),cv=cv,n_jobs=4)
參考文獻
用學習曲線learningcurve來判別過擬合問題
機器學習系統模型調優實戰–所有調優技術都附相應的scikit-learn實現
官方文檔
發表評論
登录
所有評論
還沒有人評論,想成為第一個評論的人麼?請在上方評論欄輸入並且點擊發布.
相關文章
KNN算法第二章Pandas&sklearn機器學習實戰MachineLearninginaction
本專欄計劃藉助Pandas與sklearn重新實現書中的實戰案例。
k-近鄰算法1.KNN算法流程2.KNN改進約會網站的配對效果2.1數據準備:從文本中解析數據2.2數據可視化:散點圖2.3數據處理:歸一化數值2.4
RPG_Zero
2020-07-0811:09:44
社區發現之譜聚類算法的實現
#譜聚類算法實現
#1、計算距離矩陣(歐氏距離,作爲相似度矩陣)
#2、利用KNN計算鄰接矩陣A
#3、由鄰接矩陣計算都矩陣D和拉普拉斯矩陣L
#4、標準化拉普拉斯矩陣
#5、對拉普拉斯矩陣進行特徵值分解得到特徵向量
#6、對特徵向量
fnc1012382501
2020-07-0723:51:53
論文筆記之StructuralDeepNetworkEmbedding
本論文是kdd2016的一篇論文
主要的目的也是做nodeembedding。
主要的想法就是通過deepautoencode對node進行embedding,不過在在embedding的時候不僅考慮了1-hop的信息而且考慮
BVL10101111
2020-07-0810:23:34
神經網絡動量因子
其中動量係數一般取(0,1),直觀上理解就是要是當前梯度方向與前一步的梯度方向一樣,那麼就增加這一步的權值更新,要是不一樣就減少更新。
更詳細的介紹參見《DeepLearning最優化方法之Momentum(動量)》
BVL10101111
2020-07-0810:23:34
DeepLearning之參數初始化
本文僅對常見的參數初始化方法進行總結(大部分內容來自deeplearning一書),原理性的問題不進行過多的探討。
DeepLearning中參數初始化十分重要,一般來說有以下這些原因:
1.初始點的選取,有時候能夠決定算法
BVL10101111
2020-07-0810:23:34
Python模塊調用與執行
一、模塊調用。
複雜的程序都是多模塊的,所謂的模塊,在Python中就是一個py文件,不同的模塊實現不同的功能。
一個模塊要調用其他模塊裏的東西,包括函數、變量等,需要“先導入模塊”。
這些模塊都存放在同一目錄下,才能在一個模塊中導入並調
JackyWorks
2020-07-0801:59:55
CaffeLinux
1. CaffeLinux(ForUbuntu(>=17.04)) Installingpre-compiledCaffesudoaptinstallcaffe-cpu InstallingCaffef
Oliver_Hong
2020-07-0719:32:38
強化學習與深度強化學習理解
強化學習
主要參考西瓜書和一些網上視頻加上個人理解,歡迎互動。
強化學習的model如下圖所示,機器在當前狀態下做出動作a,然後環境反饋給機器下一個狀態和一個獎勵。
假定狀態空間X,每一個狀態x∈X,動作空間A,每一個動作a∈A,獎
探索鸭
2020-07-0717:47:36
機器學習之SVM(HingeLoss+KernelTrick)原理推導與解析
支持向量機(SupportVectorMachine,SVM)是一類按監督學習方式對數據進行二元分類的廣義線性分類器(generalizedlinearclassifier),其決策邊界是對學習樣本求解的最大邊距超平面。
Cyril_KI
2020-07-0717:45:19
機器學習之K_means(附簡單手寫代碼)
聚類是一個將數據集中在某些方面相似的數據成員進行分類組織的過程,聚類就是一種發現這種內在結構的技術,聚類技術經常被稱爲無監督學習。
k均值聚類是最著名的劃分聚類算法,由於簡潔和效率使得他成爲所有聚類算法中最廣泛使用的。
給定一個數據
Cyril_KI
2020-07-0717:45:19
PCA(1):基礎知識介紹
PCA算法思路:
首先利用樣本集及特徵構建一個樣本矩陣,然後利用樣本矩陣計算得到一個協方差矩陣,再計算協方差矩陣的特徵值和特徵向量,保留特徵值前k個大的對應的特徵向量作爲新的維度方向,再將原始樣本數據轉換到新的空間維度。
(
Upupup6
2020-07-0715:17:22
矩陣的SVD分解(理論到計算結果)
爲什麼要用到SVD分解?
從特徵值和特徵向量說起:
首先回顧下特徵值和特徵向量的定義:其中A是一個m*m的實對稱矩陣,x是一個m維向量,則我們說λ是矩陣A的一個特徵值,而x是矩陣A的特徵值λ所對應的特徵向量。
求出特徵值和特徵向量有什麼好
Upupup6
2020-07-0715:17:20
PCA(2):PCA算法實現的兩種方式
因爲樣本個數和特徵維度的是不相等de,所以組成的矩陣不是方陣。
第一種方式:特徵分解思路
基於樣本特徵維度,先求協方差矩陣---->再特徵分解(因爲協方差矩陣是方陣,所以可以使用特徵分解的思路)
第二種方式:SVD分解
SVD理論:htt
Upupup6
2020-07-0715:17:18
Coursera吳恩達機器學習編程練習ex5——正則化線性迴歸與偏差和方差
1. linearRegCostFunction.m
function[J,grad]=linearRegCostFunction(X,y,theta,lambda)
%LINEARREGCOSTFUNCTIONComp
不跑步就等肥
2020-07-0715:12:31
BERT預訓練模型的演進過程!(附代碼)
文章目錄1.什麼是BERT2.從WordEmbedding到Bert模型的發展2.1圖像的預訓練2.2WordEmbedding2.3ELMO2.4GPT2.5BERT2.5.1Embedding2.5.2M
mantchs
2020-07-0714:42:00
码
码灵薯
24小時熱門文章
人物性格描寫(形容詞)
ดูหนังDoctorStrange2[จอมเวทย์มหากาฬกับมัลติเวิร์สมหาภัย](2022)เต็มเรื่องHDพากย์ไทยTHAI
什麼是“月結30天”?(轉)
AV番號是怎麼產生的?
快速解決ChromeSSL錯誤ERR_SSL_VERSION_OR_CIPHER_MISMATCH
[轉載]2.6UiPath循環嵌套的介紹和使用
一些冷門卻很美的英文單詞,聽過3個以上算我輸
Telegram查看下載保存的文件
sh:1:vue-cli-service:Permissiondenied
蒐集的一些社工庫查詢網站
最新文章
HOG+SVM的物體檢測
修改VS生成文件的目錄,以及使用生成文件
Qt模型-視圖-控制器
PT和PX的區別
Qt實現畫筆功能
最新評論文章
dayjs時間轉換,模糊時間、精確時間
ElasticSearch7.3學習(三十四)----生產環境集羣部署總結
ElasticSearch基本使用姿勢二
Redis一主三從三哨兵之Docker-compose
問題是表象,淡定纔有解決的可能
跌倒,成年人都是自己爬起來的
興致勃勃的活着,真的那麼難嗎?
問題是表象,淡定纔有解決的可能
“包辦式”未來V.S“自由式”未來,你的選擇正確了嗎?01020304
延伸文章資訊
- 1Learning Curve 与偏差方差(判断欠过拟合) - Vancuicide
学习曲线就是通过画出不同训练集大小时训练集和验证集的准确率,可以看到模型在新数据上的表现,进而来判断模型是否方差偏高或偏差过高,是否可以通过增加 ...
- 2用学习曲线learning curve 来判别过拟合问题 - 腾讯云
用验证曲线validation curve 选择超参数今天来看看网格搜索(grid search),也是一种常用的找最优... 机器学习老中医:利用学习曲线诊断模型的偏差和方差 ...
- 3學習曲線(learning curve)來判斷模型狀態:過擬合欠擬合 - 台部落
學習曲線(learning curve)來判斷模型狀態:過擬合欠擬合學習曲線是什麼學習曲線是不同訓練集大小,模型在訓練集和驗證集上的得分變化曲線。
- 4用学习曲线learning curve 来判别过拟合问题 - 简书
学习曲线就是通过画出不同训练集大小时训练集和交叉验证的准确率,可以看到模型在新数据上的表现,进而来判断模型是否方差偏高或偏差过高,以及增大训练集 ...
- 5机器学习之学习曲线learning curve和过拟合、欠拟合
一、学习曲线学习曲线是什么?学习曲线就是通过画出不同训练集大小时训练集和交叉验证的准确率,可以看到模型在新数据上的表现,进而来判断模型是否 ...