日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

机器学习 | 早期停止法原理及Python实现

發(fā)布時(shí)間:2025/3/15 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习 | 早期停止法原理及Python实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1. 早期停止法
    • 1.1 Python 實(shí)現(xiàn)
  • 參考文獻(xiàn)

相關(guān)文章:

機(jī)器學(xué)習(xí) | 目錄

機(jī)器學(xué)習(xí) | 梯度下降原理及Python實(shí)現(xiàn)

1. 早期停止法

對(duì)于梯度下降這一類迭代學(xué)習(xí)的算法,還有一個(gè)與眾不同的正則化方法,就是在驗(yàn)證誤差達(dá)到最小值時(shí)停止訓(xùn)練,該方法叫作早期停止法。下圖展現(xiàn)了一個(gè)用批量梯度下降訓(xùn)練的復(fù)雜模型(高階多項(xiàng)式回歸模型)。經(jīng)過一輪一輪的訓(xùn)練,算法不斷地學(xué)習(xí),訓(xùn)練集上的預(yù)測(cè)誤差(RMSE)自然不斷下降,同樣其在驗(yàn)證集上的預(yù)測(cè)誤差也隨之下降。但是,一段時(shí)間之后,驗(yàn)證誤差停止下降反而開始上升。這說明模型開始過度擬合訓(xùn)練數(shù)據(jù)。通過早期停止法,一旦驗(yàn)證誤差達(dá)到最小值就立刻停止訓(xùn)練。這是一個(gè)非常簡(jiǎn)單而有效的正則化技巧。[1]

對(duì)隨機(jī)梯度下降和小批量梯度下降來說,曲線沒有那么平滑,所以很難知道是否已經(jīng)達(dá)到最小值。一種解決辦法是等驗(yàn)證誤差超過最小值一段時(shí)間之后再停止(這時(shí)你可以確信模型不會(huì)變得更好了),然后將模型參數(shù)回滾到驗(yàn)證誤差最小時(shí)的位置。

圖1 早期停止法正則化

1.1 Python 實(shí)現(xiàn)

import numpy as np import matplotlib.pyplot as pltnp.random.seed(42) m = 100 X = 6 * np.random.rand(m, 1) - 3 y = 2 + X + 0.5 * X**2 + np.random.randn(m, 1)from sklearn.model_selection import train_test_split X_train, X_val, y_train, y_val = train_test_split(X[:50], y[:50].ravel(), test_size=0.5, random_state=10)from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeatures, StandardScaler poly_scaler = Pipeline([("poly_features", PolynomialFeatures(degree=90, include_bias=False)),("std_scaler", StandardScaler()),])X_train_poly_scaled = poly_scaler.fit_transform(X_train) X_val_poly_scaled = poly_scaler.transform(X_val)from sklearn.linear_model import SGDRegressor sgd_reg = SGDRegressor(max_iter=1,tol=-np.infty,penalty=None,eta0=0.0005,warm_start=True, # 當(dāng) warm_start=True 時(shí),調(diào)用 fit() 方法,會(huì)從停下的地方繼續(xù)# 開始訓(xùn)練,而不會(huì)重新開始learning_rate="constant",random_state=42)from sklearn.metrics import mean_squared_error n_epochs = 500 train_errors, val_errors = [], [] for epoch in range(n_epochs):sgd_reg.fit(X_train_poly_scaled, y_train)y_train_predict = sgd_reg.predict(X_train_poly_scaled)y_val_predict = sgd_reg.predict(X_val_poly_scaled)train_errors.append(mean_squared_error(y_train, y_train_predict))val_errors.append(mean_squared_error(y_val, y_val_predict))best_epoch = np.argmin(val_errors) best_val_rmse = np.sqrt(val_errors[best_epoch])# 畫箭頭 plt.annotate('Best model',xy=(best_epoch, best_val_rmse),xytext=(best_epoch, best_val_rmse + 1),ha="center",arrowprops=dict(facecolor='black', shrink=0.05),fontsize=16,)best_val_rmse -= 0.03 # just to make the graph look better plt.plot([0, n_epochs], [best_val_rmse, best_val_rmse], "k:", linewidth=2) plt.plot(np.sqrt(val_errors), "b-", linewidth=3, label="Validation set") plt.plot(np.sqrt(train_errors), "r--", linewidth=2, label="Training set") plt.legend(loc="upper right", fontsize=14) plt.xlabel("Epoch", fontsize=14) plt.ylabel("RMSE", fontsize=14) plt.show()

參考文獻(xiàn)

[1] Aurelien Geron, 王靜源, 賈瑋, 邊蕤, 邱俊濤. 機(jī)器學(xué)習(xí)實(shí)戰(zhàn):基于 Scikit-Learn 和 TensorFlow[M]. 北京: 機(jī)械工業(yè)出版社, 2018: 125-126.

總結(jié)

以上是生活随笔為你收集整理的机器学习 | 早期停止法原理及Python实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。