広告 機械学習

機械学習における正則化とは?L1正則化とL2正則化やPythonでの実装までわかりやすく解説!

正則化のアイキャッチ画像
サル

・正則化ってなに?

・L1正則化とL2正則化で何が違うの?

と悩んではいませんか?

本記事では、機械学習における正則化について概要からそれぞれの正則化項の実装まで解説していきます。

正則化は過学習を抑えるために有効な手法で、未知のデータに対しての予測精度を上げることに用いられます。

過学習について詳しく知っておきたい方は『過学習(Overfitting)とは?起こる原因から見分け方・対策方法まで徹底解説!』の記事をご参照ください。

本記事の信頼性

サルでもわかるデータサイエンスの運営者のプロフィール画像

月額980円で学べる!

しょー

データサイエンスの復習は完ぺきにできていますか?

データサイエンスは勉強する範囲が膨大で、復習に手が回りませんよね。

そんなあなたにおすすめなのが、たった月額980円でサクッと学べるスタアカ

数分の動画でビジネスへの活用法も含めて、サクッとデータサイエンスを復習可能。

何冊も参考書を往復して復習する苦労』とはおさらばです!

サブスクなのでいつでも解約OK。手軽に始めてみませんか?

月額980円から/

スタアカはこちら

講座が毎月追加されるので今後値上がりする可能性大、今買わなきゃ損するかも!

しょー

それでは本編です!

正則化とは

正則化とは機械学習において過学習を防ぐための手法の1つです。

過学習とは、モデルが訓練データに対しては高い性能を示しているけど未知のデータに対しては低い性能を示す現象になります。

正則化はモデルの複雑さを抑えることで、汎化性能(未知のデータにも対応できる能力)を向上させます。

正則化の目的

正則化の目的はモデルの過剰適合(過学習)を防ぐことです。

モデルは特に高次元のデータや多くの特徴量を持つ場合に複雑化します。

正則化を行うことで適度にモデルを簡単にして、未知のデータに対しても良い予測を行えるように調整できます。

正則化のための手法としてL1正則化とL2正則化があります。

2つの正則化:L1正則化とL2正則化

2つの正則化について

正則化はL1正則化とL2正則化の2つです。

L1正則化は要らない変数を減らし、L2正則化は値の大きい係数にペナルティを与えます。

2つの正則化についてそれぞれ解説していきます。

L1正則化(Lasso回帰)

L1正則化は要らない特徴量の重み(係数)を0に近づけることで、本当に必要な特徴量を発見できます。

過学習を抑えるだけでなく、特徴選択を行える点がL1正則化を用いるメリットです。

L1正則化(Lasso回帰)の概要

L1正則化は損失関数に対してL1ノルム(絶対値の和)を加えることによって正則化を行います。

L1正則化を導入することで要らない特徴量の重みを0に近づけられます。

そのため、本当に必要な特徴量だけに限定できるのがメリットです。

今回は線形回帰にL1正則化項を用いてみましょう。

\[ \text{minimize} \frac{1}{2n} \sum_{i}^{n} (\hat{y} - y_1)^2 + \alpha \sum_{j}^{m} |w_j| \]

この式は線形回帰のモデルを学習する式にL1正則化項を加えたものになります。

前半の項が線形回帰の損失関数で、後半の項がL1正則化項です。

L1正則化項を用いることで、通常の線形回帰の学習より係数が0となる特徴量が多くなるため、特徴選択を行えます。

L1正則化(Lasso回帰)をPythonで実装

Pythonの機械学習ライブラリであるScikit-learnを使ってL1正則化を実装します。

L1正則化は別名Lasso回帰と呼ばれており、PythonではLassoと呼び出します。

以下線形回帰でL1正則化項を加えた場合の分析のサンプルコードです。

import numpy as np
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# サンプルデータを作成(2つの特徴量を持つデータとターゲット値)
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
y = np.array([2, 4, 5, 4])

# データの分割(訓練データとテストデータ)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# L1正則化を含む線形回帰モデルのインスタンスを作成
alpha = 0.1  # 正則化パラメータ(ハイパーパラメータ)の値を設定
lasso_reg = Lasso(alpha=alpha)

# モデルの訓練
lasso_reg.fit(X_train, y_train)

# テストデータでの予測
y_pred = lasso_reg.predict(X_test)

# モデルの評価(平均二乗誤差を計算)
mse = mean_squared_error(y_test, y_pred)
print(f"L1正則化を付与した線形回帰の平均二乗誤差(MSE):{mse}")

データの準備からモデルの評価までを行っています。

モデルの評価では機械学習の回帰タスクの評価指標を用います。

回帰タスクの他の指標を知りたい方は『評価指標』の記事をご参照ください。

L2正則化(Ridge回帰)

L2正則化は重み(係数)が大きいものの値を下げる効果があるため、1つの変数の影響を下げられるのが特徴です。

互いに相関が高い変数同士の影響も下げられるので、特定の現象に影響されることを減らせます。

L2正則化(Ridge回帰)の概要

L2正則化は損失関数に対してL2ノルム(二乗和の平方根)を加えることによって正則化を行います。

L2正則化は係数が大きいものに対して値を下げる効果があるため、一つの変数による影響を小さくできます。

また、変数同士に高い相関があった場合に起こる多重共線性も防げるため、便利な正則化項です。

L2正則化も線形回帰の式を例に取り上げます。

\[ \text{minimize} \frac{1}{2n} \sum_{i}^{n} (\hat{y} - y_1)^2 + \alpha \sum_{j}^{m} |w_j|^2 \]

前半の項が線形回帰の損失関数で、後半の項がL2正則化項です。

\( |w_j| \)が2乗になっている点がL1正則化と異なるところになります。

しっかりと数式を抑えて、どちらの正則化項が用いられているのかを判断するようにしましょう。

L2正則化(Ridge回帰)をPythonで実装

L2正則化もPythonの機械学習ライブラリを用いて実装します。

L2正則化はRidge回帰と呼ばれていることから、コードではRidgeと呼び出してください。

L1正則化と同様に線形回帰の例を用いた例です。

import numpy as np
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# サンプルデータを作成(2つの特徴量を持つデータとターゲット値)
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
y = np.array([2, 4, 5, 4])

# データの分割(訓練データとテストデータ)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# L2正則化を含む線形回帰モデルのインスタンスを作成
alpha = 0.1  # 正則化パラメータ(ハイパーパラメータ)の値を設定
ridge_reg = Ridge(alpha=alpha)

# モデルの訓練
ridge_reg.fit(X_train, y_train)

# テストデータでの予測
y_pred = ridge_reg.predict(X_test)

# モデルの評価(平均二乗誤差を計算)
mse = mean_squared_error(y_test, y_pred)
print(f"L2正則化を付与した線形回帰の平均二乗誤差(MSE):{mse}")

ここまで説明したことを振り返りましょう。

  • L1正則化(Lasso回帰):要らない変数の係数を0付近まで下げる
  • L2正則化(Ridge回帰):値の大きい係数を小さくしていく

このイメージを持って、2つを区別して覚えることをおすすめします。

しょー

データサイエンスを総復習するなら「スタアカ」がおすすめ!

【破格】たった月980円で学べる!

スタアカでサクッと学ぶ

いつでも解約できます!

正則化の3つの注意点

正則化の3つの注意点

正則化を行う上で注意するべき点は以下の3つです。

  • 正則化の前にデータの前処理が必要
  • 正則化を適用する際には適切なハイパーパラメータの選択が重要
  • 正則化されたモデルの解釈を行い、重要な特徴量を理解する必要性

それぞれの注意点を考慮したうえで正則化を行うようにしましょう。

正則化の前にデータの前処理が必要

正則化はモデルの複雑さ(過学習)を抑えるものですが、変数同士で単位が異なっている場合、正しくない正則化になります。

極端に値が大きい単位があった場合、その値の影響度が大きいとみなされて、影響を下げようと正則化されるためです。

そのため、正則化を適用する前に、データの前処理を適切に行うことが重要です。

例えば、標準化や正規化を行うことで、各変数(特徴量)のデータの単位や取り得る範囲を統一して、正則化の効果を最大限に引き出せます。

モデルを作る際には必ずデータの単位を揃えることを意識しましょう。

正則化を適用する際には適切なハイパーパラメータの選択が重要

正則化の強さを調整するためのハイパーパラメータ(定数)は、モデルの性能に大きな影響を与えます。

ハイパーパラメータとはL1,L2正則化の数式の\( \alpha \)の部分で、今回は正則化項の影響度を調節する役割の定数です。

もし、\( \alpha \)を大きい値にして正則化を適用すると、過学習を抑えすぎてモデルの正確性がなくなる可能性があります。

適切なハイパーパラメータは、交差検証などの手法を用いて選択していくことが重要です。

正則化されたモデルの解釈を行い、重要な特徴量を理解する必要性

正則化は特徴量の重みを制約するため、モデルの解釈をし直すことが必要です。

正則化されたモデルを解釈することで、どの特徴量が予測に影響を及ぼしているかを理解することができます。

特にL1正則化を用いた場合、特徴選択の効果があり、重要な特徴量だけが残るモデルを得ることができます。

重要な特徴量を理解することで、実際の問題に対してより優れた情報を得ることができます。

まとめ

正則化は機械学習において過学習を防ぐための重要な手法です。

L1正則化とL2正則化はそれぞれ異なる効果があり、モデルの複雑さを制御し、未知のデータへの予測精度を上げる手法として活用されています。

正しく正則化を理解することで、より安定したモデルを作れ、高い性能を維持できます。

もしモデルが過学習してしまったら、正則化の検討を行いましょう。

サル
  • 機械学習の勉強がなかなか上手く進まない...
  • 勉強していても全体像が見えてこない...
  • 本当にデータサイエンティストになれるのかな...

と不安に感じてはいませんか?

そんな悩みをまるっと解決してくれるサービスが『スタアカ』です。

僕も利用している『スタアカ』のライトプランは月額980円で動画見放題でコスパ最強です。

「勉強の道しるべが欲しい!」「学習を効率的に進めたい」という方にはこの上ないサブスクです。

データサイエンスを学びたい方に最強のサブスク『スタアカ』を気軽に始めてみませんか?

\月額たった980円!/

スタアカはこちら

講座が毎月追加されるので今後値上がりする可能性大、今が買いどき!

しょー

「ちょっとでも興味がある」という方は、受講した感想も載せている記事もあわせてどうぞ。

スタアカ紹介記事
ブログランキング・にほんブログ村へ
人気ブログランキングでフォロー
サルでもわかるデータサイエンスのブログアイキャッチ画像
運営者の画像

しょー

地方公立大学でデータサイエンスについて学んでいる大学3年生のしょーです。

これまで、大学で学んできたこと、個人的に調べてきた情報を、「大学の先輩」的なポジションから大学生をサポートしたいと考えております。

何か分からないことがあれば、X(Twitter)のDMやブログ内のお問い合わせにてご相談ください。

また、記事作成依頼やサービスの体験依頼も承っております。 お気軽にご相談ください。

-機械学習
-,