學(xué)習(xí)曲線:一種用來判斷訓(xùn)練模型的一種方法嚼鹉,通過觀察繪制出來的學(xué)習(xí)曲線圖沪摄,我們可以比較直觀的了解到我們的模型處于一個什么樣的狀態(tài)植榕,如:過擬合(overfitting)或欠擬合(underfitting)
1:觀察左上圖橘忱,訓(xùn)練集準確率與驗證集準確率收斂赴魁,但是兩者收斂后的準確率遠小于我們的期望準確率(上面那條紅線),所以由圖可得該模型屬于欠擬合(underfitting)問題鹦付。由于欠擬合尚粘,所以我們需要增加模型的復(fù)雜度,比如敲长,增加特征郎嫁、增加樹的深度、減小正則項等等祈噪,此時再增加數(shù)據(jù)量是不起作用的泽铛。
? ? 2:觀察右上圖,訓(xùn)練集準確率高于期望值辑鲤,驗證集則低于期望值盔腔,兩者之間有很大的間距,誤差很大月褥,對于新的數(shù)據(jù)集模型適應(yīng)性較差弛随,所以由圖可得該模型屬于過擬合(overfitting)問題。由于過擬合宁赤,所以我們降低模型的復(fù)雜度舀透,比如減小樹的深度、增大分裂節(jié)點樣本數(shù)决左、增大樣本數(shù)愕够、減少特征數(shù)等等。
? ? 3:一個比較理想的學(xué)習(xí)曲線圖應(yīng)當是:低偏差佛猛、低方差惑芭,即收斂且誤差小。
在深刻了解到了學(xué)習(xí)曲線圖的意義后继找,可以著手揮著該圖了遂跟。
如何繪制學(xué)習(xí)曲線:
以下為sklearn官方文檔的解釋,這里僅做必要的解釋:
通過使用sklearn提供的繪制模板婴渡,我們也可以根據(jù)數(shù)據(jù)的情況來改變繪制的條件幻锁。官方提供的兩個樣例分別是GaussianNB、SVC兩個模型對于load_digits數(shù)據(jù)集進行擬合后繪制的學(xué)習(xí)曲線圖缩搅。
plot_learning_curve函數(shù)官方放提供的模板函數(shù),可以無需修改触幼,初學(xué)時我們僅需要知道傳入的參數(shù)意義即可硼瓣。
先說說函數(shù)里面的一個東西,也是畫曲線的核心sklearn.model_selection的learning_curve,該學(xué)習(xí)曲線函數(shù)返回的是train_sizes堂鲤,train_scores亿傅,test_scores:
? ? 在畫訓(xùn)練集的曲線時:橫軸為 train_sizes,縱軸為 train_scores_mean瘟栖;
? ??畫測試集的曲線時:橫軸為train_sizes葵擎,縱軸為test_scores_mean。
title:圖像的名字半哟。
cv:默認cv=None酬滤,如果需要傳入則如下:
? ? cv : int, 交叉驗證生成器或可迭代的可選項,確定交叉驗證拆分策略寓涨。
?????????cv的可能輸入是:
???????????- 無盯串,使用默認的3倍交叉驗證,
???????????- 整數(shù)戒良,指定折疊數(shù)体捏。
???????????- 要用作交叉驗證生成器的對象。
???????????- 可迭代的yielding訓(xùn)練/測試分裂糯崎。
ShuffleSplit:我們這里設(shè)置cv几缭,交叉驗證使用ShuffleSplit方法,一共取得100組訓(xùn)練集與測試集沃呢,每次的測試集為20%年栓,它返回的是每組訓(xùn)練集與測試集的下標索引,由此可以知道哪些是train樟插,那些是test韵洋。
ylim:tuple, shape (ymin, ymax), 可選的。定義繪制的最小和最大y值黄锤,這里是(0.7搪缨,1.01)。
n_jobs : 整數(shù)鸵熟,可選并行運行的作業(yè)數(shù)(默認值為1)副编。windows開多線程需要在"__name__"==__main__中運行。
好了流强,以上為查閱資料以及文檔對于上面參數(shù)的解釋痹届,下面看看運行的結(jié)果: