3.4.8.7. 線形モデルにおけるプロット分散と正則化

import numpy as np
# Smaller figures
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (3, 2)

データポイントが2つしかない場合を考えます

X = np.c_[0.5, 1].T
y = [0.5, 1]
X_test = np.c_[0, 2].T

ノイズがなければ、線形回帰はデータに完全にフィットします。

from sklearn import linear_model
regr = linear_model.LinearRegression()
regr.fit(X, y)
plt.plot(X, y, "o")
plt.plot(X_test, regr.predict(X_test))
plot variance linear regr
[<matplotlib.lines.Line2D object at 0x7b2074693ce0>]

現実の状況では、データにノイズ (例えば測定ノイズなど) が含まれます:

rng = np.random.default_rng(27446968)
for _ in range(6):
noisy_X = X + np.random.normal(loc=0, scale=0.1, size=X.shape)
plt.plot(noisy_X, y, "o")
regr.fit(noisy_X, y)
plt.plot(X_test, regr.predict(X_test))
plot variance linear regr

見てわかるように、この線形モデルはデータのノイズをとらえ、増幅しています。 多くの分散を表示しています。

正則化を用いる別の線形推定器、 Ridge 推定器を用いることができます。 この推定量は、非常に高い相関は多くの場合あやしいという仮定の下で、係数をゼロに縮小することによって正則化します。alphaパラメータは、使用する収縮量を制御します。

regr = linear_model.Ridge(alpha=0.1)
np.random.seed(0)
for _ in range(6):
noisy_X = X + np.random.normal(loc=0, scale=0.1, size=X.shape)
plt.plot(noisy_X, y, "o")
regr.fit(noisy_X, y)
plt.plot(X_test, regr.predict(X_test))
plt.show()
plot variance linear regr

Total running time of the script: (0 minutes 0.084 seconds)

Gallery generated by Sphinx-Gallery