分散を減らす方法にはモデルの正則化が含まれることを前述しましたが、この方法もモデルの汎化機能を提供する最も重要な方法です。今日、L1とL2の2つの正則化手法を理解しています。正則化に使用されるアルゴリズムには、投げ縄回帰、リッジ回帰、およびサポートベクターマシンが含まれます。
1.モデル正則化の概念
モデルの正則化(正則化)、学習アルゴリズムの変更により、パラメーターのサイズが制限され、トレーニングエラーではなく汎化エラーが減少します。
より複雑なモデルを使用してデータを適合させると、過剰適合しやすく(トレーニングセットのパフォーマンスがよく、テストセットのパフォーマンスが悪い)、モデルの汎化能力が低下します。現時点では、正規化を使用して、モデルの複雑さを軽減します。
正則化戦略には次のものがあります:制約とペナルティは、特定のタイプの事前知識選好シンプルモデルをエンコードするように設計されています。統合法など、他の形式の正則化、つまり、複数の仮説を組み合わせてトレーニングデータを解釈します。
第二に、L1正則化
L1正則化とは、目的関数にL1ノルムという用語を追加することです。L1正則化を使用した回帰モデルは、LASSO回帰(最小絶対収縮および選択演算子回帰)と呼ばれます。
数学的な原理は次のとおりです。モデルが過剰適合している場合、パラメーターθは非常に大きくなります。パラメータθを制限するために、損失関数を変更し、モデルの正則化を追加します。作る できるだけ小さい。
注:
①、
レンジは〜1であるnは、すなわち、含まれていません。
。これは、
1つのパラメーターの係数ではなく、切片です。グラフに反映されています
曲線の高さを反映しますが、曲線の各部分の急峻さと容易さを決定しません。したがって、モデルが正則化されている場合は必要ありません。
②ハイパーパラメータ用
モデルによって正則化された新しい損失関数係数を、
それらが可能な限り小さいことが、最適化損失関数全体を説明します。それは
のサイズは最適化の焦点を示します。
L1正則化は、パラメーターをスパースにすることができます。つまり、取得されたパラメーターはスパース行列です。したがって、LASSO回帰を使用して機能を選択し、最も重要な機能をフィルタリングすることができます。
# 使用Pipeline封装一个Lasso回归方法
def LassoRegression(degree,alpha):
return Pipeline([
('poly',PolynomialFeatures(degree=degree)),
('std_scaler',StandardScaler()),
('lasso_reg',Lasso(alpha=alpha))
])
# 我们调整alpha=0.0001,0.1,10 看不同结果
alphas=[0.0001,0.1,10]
for alpha in alphas:
lasso_reg = LassoRegression(30,alpha)
lasso_reg.fit(X_train,y_train)
y1_predict=lasso_reg.predict(X_test)
print(mean_squared_error(y_test,y1_predict))
X_plot = np.linspace(-3,3,100).reshape(100,1)
y_plot = lasso_reg.predict(X_plot)
plt.scatter(X,y)
plt.plot(X_plot[:,0],y_plot,color='r')
plt.axis([-3,3,0,10])
plt.show()
効果図を見ると、α値が中程度の方がモデルの効果が良いことがわかります。
0.0001 =αから
α= 0.01
、α= 10
3. L2正則化
L2正則化は、L2ノルム項を目的関数に追加することです(正則項として二乗和を使用します)。L2正則化を使用した回帰モデルは、リッジ回帰と呼ばれます。
数学的な原理は次のとおりです。モデルが過剰適合している場合、パラメーターθは非常に大きくなります。パラメータθを制限するために、損失関数を変更し、モデルの正則化を追加します。作る できるだけ小さい。
係数を0に限りなく近づけて圧縮しても0にはならないため、LASSO回帰と比較して、スパース行列は生成されません。
# 使用Pipeline封装一个Lasso回归方法
def ridgeregression(degree,alpha):
return Pipeline([
('poly',PolynomialFeatures(degree=degree)),
('std_scaler',StandardScaler()),
('ridge_reg',Ridge(alpha=alpha))
])
# 我们调整alpha=0.0001,1,1000 看不同结果
alphas=[0.0001,1,1000]
for alpha in alphas:
ridge_reg = ridgeregression(30,alpha)
ridge_reg.fit(X_train,y_train)
y1_predict=ridge_reg.predict(X_test)
print(mean_squared_error(y_test,y1_predict))
X_plot = np.linspace(-3,3,100).reshape(100,1)
y_plot = ridge_reg.predict(X_plot)
plt.scatter(X,y)
plt.plot(X_plot[:,0],y_plot,color='r')
plt.axis([-3,3,0,10])
plt.show()
効果図を見ると、LASSO回帰と同じように、アルファ値は中程度であり、モデル効果の方が優れています。
α= 0.0001α
=
1α= 1000
完全なコード
リファレンス記事:https : //mp.weixin.qq.com/s/fbwx0mlG88YjFTNwYErnxQ