觀察學習曲線

2022-08-04 08:54:14 字數 1889 閱讀 2351

from sklearn.metrics import mean_squared_error

from sklearn.model_selection import train_test_split

def plot_learning_curve(model,x,y):

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.2,random_state = 10)

train_errors,val_errors=,

for m in range(1,len(x_train)):

model.fit(x_train[:m],y_train[:m])

y_train_predict = model.predict(x_train[:m])

y_val_predict = model.predict(x_test)

plt.plot(np.sqrt(train_errors),'r-+',linewidth=2,label="train")

plt.plot(np.sqrt(val_errors),'b-',linewidth=3,label='val')

plt.legend(loc='upper left',fontsize=14)

plt.xlabel('traing set size',fontsize=14)

plt.ylabel('rmse',fontsize=14)

函式呼叫:

lin_reg = linearregression()

plot_learning_curve(lin_reg,x,y)

plt.axis([0,80,0,3])

plt.show()

效果展示:

觀察訓練集的表現:當訓練集只有一兩個樣本的時候,模型能夠很好的擬合他們,這也是為什麼曲線是從零開始的原因。但當加入了一些新的樣本的時候,訓練集上的擬合程度並不理想,原因有兩個:1、資料中含有噪點;2、資料根本不是線性的。因此隨著資料規模的增大,誤差也會一直增大,直到達到了高原地帶並趨於穩定,在在這之後,繼續加入新的樣本,模型的平均誤差並不會變的更好或者更差。

驗證集上的表現,當以非常少的樣本去訓練時,模型不能恰當的泛化,這也是為什麼驗證誤差一開始非常大。當訓練樣本變多的時候,模型學習的東西變多,驗證誤差開始緩慢的下降。但是一條直線不可能很好的擬合這些資料,因此最後誤差會達到乙個高原地帶並趨於穩定,最後和訓練集的曲線非常接近。

上面的曲線表現的是典型的欠擬合模型,兩條曲線都達到高原地帶並趨於穩定,並且最後兩條曲線非常接近,同時誤差值非常大。

注意:當模型在訓練集上是欠擬合時,新增更多樣本是沒用的,需要做的是使用乙個更加複雜的模型,或更好的特徵。

現在我們來看下,在上面的資料集上使用10階多項式模型擬合的效果

polynomial_regression = pipeline([

('poly_features',polynomialfeatures(degree=10,include_bias=false)),

('sgd_reg',linearregression())

])plot_learning_curve(polynomial_regression,x,y)

plt.axis([0,80,0,3])

plt.show()

效果展示:

和上幅影象存在兩個非常重要的不同點:

VIM學習曲線 a

這裡記錄下自己在學習vim過程中的一些坎坷和總結吧!後面補充 今天看到不少同學收藏,看樣子還是有很多人和我一樣的初級學習菜鳥,哈哈,這裡再次申明,文章主要內容是從鏈結的原文作者 拷貝出的,其中自己有小的修改,另外,我會參考其他文章,將常用的一些東西都加入進來,後期會慢慢更新,其中一些說的不清楚的地方...

學習曲線learning curve

學習曲線是橫座標為訓練樣本數量,橫座標為誤差。畫的有兩條曲線,一條是訓練集誤差,一條是交叉驗證的誤差。學習曲線可以反應兩種情況,一種是高偏差,一種是高方差。高方差 過擬合,擬合效果過好,但是泛化效果差,無法泛化新的資料 高誤差 欠擬合,擬合程度太差,誤差太大。反應在學習曲線上就是 高偏差 訓練集誤差...

Python KNN 學習曲線

學習曲線的目的是選擇更好的模型引數。以最近鄰演算法為例,選取最近的多少個資料點,才能達到最優。可以控制訓練集不動,調整最近的點的個數,繪製學習曲線。import matplotlib.pyplot as plt score krange range 1,21 k值取值範圍 for i in kran...