學習曲線的繪製(個人自定義原始碼)

2021-10-01 16:43:42 字數 2652 閱讀 8984

隨著訓練樣本的增多,模型在訓練集和測試集的表現趨於一致。根據訓練集合測試集的表現可以判斷模型是過擬合和欠擬合。

查了很多關於sklearn的learning_curve的資料,沒有找到其內部原理的文章,因此根據學習曲線的概念手動編寫**。

(1)求出訓練集的大小t=len(x_train)。

(2)訓練集是乙個長度為t的資料集,首先選擇第乙個資料進行建模,得到模型model1,然後使用model1在驗證集上驗證,得到評價分數score1;然後選擇訓練集的前2個資料進行建模,得到模型model2,然後使用model2在驗證集上驗證,得到評價分數score2;然後選擇訓練集的前3個資料,…重複上述操作,直到使用訓練集的所有資料建模,並得到驗證集的分數scoret。

(3)畫圖,橫座標為訓練集的資料個數,縱座標為在該訓練個數下得到的評價分數score。

其中第2步中,如果定義了trainsize,則不需要迴圈t次,只需要按照trainsize定義的去計算。比如trainsize=[0.1,0.5,0.8,0.9,1.0],t=1000,則第二步只需要計算訓練集為0.1t=100,0.5t=500,0.8t=800,0.9t=900,t=1000數量的時候,只需要迴圈5次。

from sklearn.metrics import mean_squared_error

import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

from sklearn.linear_model import linearregression

#構造乙個6個特徵的訓練集,並以0.8為分割點,劃分訓練集和測試集

x = np.random.uniform(low=-1

,high=

1,size=

(5000,6

))y =[

3.4*i[0]

+2.4

*i[1]-

0.9*i[2]

+0.5

*i[3]+

0.7*i[4]

-1.2

*i[5

]+np.random.uniform(low=

-0.03

,high=

0.03

)for i in x]

t =int

(0.8

*len

(x))

x_train = x[

:t]y_train = y[

:t]x_test = x[t:

]y_test = y[t:

]#構造學習曲線函式

deflearningcurve

(model,x_train,y_train,x_test,y_test,trainsize)

:#model是使用的模型,trainsize指使用多少個訓練樣本來求測試集的mse。

length =

len(x_train)

#用來儲存橫座標

xlist =

#儲存縱座標的訓練資料的mse

ylist_train =

#儲存縱座標的測試資料的mse

ylist_test =

for i in trainsize:

cutpoint =

int(length*i)

if cutpoint ==0:

#為了防止在trainsize裡有訓練資料為0的時候,保證訓練資料最少有1個。

cutpoint =

1 tempdatax = x_train[

:cutpoint]

tempdatay = y_train[

:cutpoint]

model.fit(tempdatax,tempdatay)

result_train = model.predict(tempdatax)

result_test = model.predict(x_test)

mse_train = mean_squared_error(tempdatay,result_train)

mse_test = mean_squared_error(y_test,result_test)

fig,axes = plt.subplots(1,

1)axes.plot(xlist,ylist_train,

'k-'

) axes.plot(xlist,ylist_test,

'r-'

) plt.show(

)#使用學習曲線函式畫圖

圖中可以看出,訓練集隨著訓練資料的增加,mse逐漸增大,而測試集隨著訓練資料的增加,mse逐漸減小。兩條曲線隨著訓練資料的增大,趨於相同。

本示例只是回歸模型學習曲線畫圖。如果針對分類模型,縱座標可以使用準確率來替代。希望可以為你的學習帶來一點點的貢獻。

機器學習筆記 學習曲線的繪製

重點總結 來看看在神經網路上的應用 如何你要檢查演算法執行是否正常或者希望優化演算法的表現那麼就需要一款工具來實現,學習曲線就是乙個很好的工具。同樣的,使用學習曲線可以檢查出演算法是處於偏差問題還是方差問題,或者是二者皆有!先來看看資料樣本數量與誤差之間的關係,通過下圖看一下 在右側,可以看到,當樣...

繪製學習曲線,以確定模型的學習狀況

繪製學習曲線,以確定模型的學習狀況 from sklearn.svm import linearsvc from sklearn.learning curve import learning curve 繪製學習曲線,以確定模型的狀況 defplot learning curve estimator...

模仿原始碼自定義ArrayList

最近看了下arraylist的原始碼,抽空根據arraylist的底層結構寫了乙個功能簡單無泛型的自定義arraylsit,幫助自己更好理解arraylist 其實現的底層資料結構為數object組,如下 自己實現乙個arraylist public class myarraylist public...