L1正則化とは、機械学習モデルの損失関数に係数の絶対値の合計を加え、係数が大きくなりすぎることを抑える方法です。係数の一部がちょうど0になりやすいため、特徴量選択やモデルの疎化に利用できます。英語ではLasso、分類ではL1ペナルティと呼ばれることがあります。
本記事では、L1正則化の数式上の意味、L2正則化との違い、線形回帰とロジスティック回帰での使い方、特徴量スケールの影響、ハイパーパラメータの選び方、相関した特徴量の挙動、解釈と運用の注意点を整理します。係数を0にできることは便利ですが、残った特徴量が因果関係を表すわけではないため、統計的・業務的な検証も必要です。
L1正則化とは?係数の絶対値にペナルティを加える方法
線形モデルは、入力特徴量に係数を掛けて予測を作ります。学習データに複雑に合わせると係数が極端に大きくなり、未知データで誤差が増えることがあります。L1正則化では通常の損失に、係数の絶対値の合計を重み付きで加えます。最適化では予測誤差を小さくしつつ、係数を小さく保つバランスを探します。
回帰の代表例であるLassoは、二乗誤差にL1ペナルティを加えたモデルです。分類ではロジスティック損失にL1ペナルティを加えます。ペナルティの強さを大きくすると多くの係数が縮み、十分に強い場合は0になる係数も増えます。ペナルティを強くしすぎると必要な特徴まで消えるため、検証データで性能と解釈のバランスを確認します。
L1正則化の数式|損失と係数の大きさを同時に最小化する
線形回帰で予測値をŷ、正解をy、係数をwとすると、L1正則化の目的関数は概念的に「二乗誤差 + λ × Σ|w_j|」と書けます。λは正則化の強さを表すハイパーパラメータです。切片を正則化するかどうかは実装の仕様に依存するため、利用するライブラリの説明を確認します。分類でも損失の種類が変わるだけで、係数の絶対値に対するペナルティという考え方は同じです。
L1の形状は、2つ以上の係数を持つ場合に角を持つ領域になります。その角に最適解が当たりやすく、係数が0になります。L2正則化の二乗和は滑らかな円形に近いため、係数を完全な0にするより、全体を小さくする傾向があります。これは数式の見た目だけの違いではなく、特徴量選択と相関した変数の扱いに影響します。
L1正則化とL2正則化の違い|疎な係数か均等な縮小か
L1は係数を0にして特徴量を絞り込む
L1正則化の大きな特徴は、係数の一部が0になることです。0の特徴量は予測式に寄与しないため、入力項目を減らしたり、モデルの説明対象を絞ったりできます。高次元のテキスト特徴量や、候補列が多い業務データで有用です。ただし0になった特徴が本当に無関係とは限らず、データ分割や正則化強度が変われば選ばれる列も変わります。
L2は相関した特徴量へ係数を分散しやすい
L2正則化は係数の二乗和をペナルティにし、極端に大きい係数を強く抑えます。相関した特徴量があると、それぞれへ小さな係数を分けて持たせる傾向があります。L1のような明確な特徴量削減は起きにくいものの、入力列が少し変わっても係数が急変しにくい場合があります。どちらがよいかは特徴量の相関、予測の安定性、説明要件で判断します。
Elastic NetはL1とL2を組み合わせる
Elastic NetはL1とL2の両方を目的関数へ加える方法です。L1による疎化と、L2による係数の安定化を同時に狙えます。強く相関した特徴量をすべて落とすのではなく、グループとして残したい場合に候補になります。L1比率と全体の正則化強度という複数のハイパーパラメータを持つため、交差検証で探索範囲を明確にします。
特徴量スケールの影響|正則化前に標準化を確認する
L1正則化は係数の大きさを直接ペナルティにします。身長をセンチメートル、年収を円で入力するように単位が異なると、同じ効果を表す係数の大きさが変わります。標準化しないままL1を適用すると、スケールの大きい列が有利になったり、不利になったりし、係数0の選択が単位に依存する可能性があります。数値列の尺度を確認し、必要なら訓練データだけで標準化器を適合します。
ワンホット化した0/1列を標準化するかどうかは、モデルと実装で検討します。数値列だけ標準化し、カテゴリ列はそのままにする設計もあります。重要なのは、学習時と推論時で同じ変換を適用し、交差検証の各fold内で統計量を計算することです。標準化を全データで先に行うと、平均や分散を通じて評価データの情報が漏れるため注意します。
線形回帰でL1正則化を使う|Lassoの特徴と解釈
回帰でL1正則化を使う代表的な方法がLassoです。目的変数が連続値で、候補特徴量が多い場合に、予測へ寄与する列を絞り込む用途があります。係数が0になった列をそのまま「不要」と断定するのではなく、複数の分割や再標本化で選択頻度を調べると、選択の安定性を確認できます。
from sklearn.linear_model import Lasso
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
model = Pipeline([
("scale", StandardScaler()),
("regressor", Lasso(alpha=0.01, max_iter=10000)),
])
model.fit(X_train, y_train)
prediction = model.predict(X_test)scikit-learnのLassoでは、alphaが正則化の強さに関係します。小さすぎると係数がほとんど縮まず、大きすぎると多くの係数が0になって予測性能が落ちます。max_iterを増やしても収束しない場合は、特徴量のスケール、alpha、許容誤差、入力の欠損や無限値を確認します。実験ではalphaと検証スコア、非ゼロ係数数を一緒に記録します。
分類モデルでL1正則化を使う|ロジスティック回帰の設定
二値分類や多クラス分類では、L1ペナルティ付きロジスティック回帰を使えます。テキストの単語出現、顧客属性、ワンホット化したカテゴリなど、特徴量が多い問題で、予測式を疎にすることができます。scikit-learnのLogisticRegressionではsolverごとに利用できるペナルティが異なるため、公式ドキュメントで組み合わせを確認します。
分類の正則化パラメータCは、一般に小さいほど正則化が強く、大きいほど弱くなる向きで設定されます。回帰のalphaと向きが異なるため、パラメータ名だけを比較しないでください。不均衡データではclass_weight、評価指標、しきい値も同時に設計します。係数の絶対値が大きい列を重要と読む前に、標準化、カテゴリの基準、相関、正則化強度を確認します。
正則化強度の選び方|交差検証で性能と疎性を比較する
正則化強度は、訓練データのスコアだけで決めません。訓練データを複数foldに分け、各候補値で学習して検証指標を比較します。回帰ならMAEやRMSE、分類ならF1、PR-AUC、再現率など、業務上の誤りに合う指標を選びます。最終テストデータは候補値の選択後に一度だけ使い、開発中の調整に流用しないようにします。
スコアがほぼ同じ候補が複数あるなら、非ゼロ係数が少ないモデル、推論が軽いモデル、係数の選択が安定したモデルを選べることがあります。ただし、疎であることが常に優先ではありません。取りこぼしのコストが高い業務では、わずかな精度差でも密なモデルを採用する場合があります。採用基準を事前に文書化し、後から都合よく選ばないことが大切です。
相関した特徴量とL1正則化|選択結果を過信しない
身長と腕の長さ、売上と注文数のように相関の強い特徴量があると、L1正則化は片方だけを残したり、分割によって残す列を入れ替えたりします。係数0になった列が情報を持たないのではなく、似た情報を別の列が代表している可能性があります。特徴量選択の結論を出すなら、相関行列、選択頻度、ドメイン知識を合わせて判断します。
同じグループの特徴をまとめて残したい場合は、Elastic Netやグループ正則化など別の方法を検討します。単一の学習結果から重要度ランキングを作り、施策の因果効果まで推論するのは危険です。L1は予測モデルの複雑さを制御する道具であり、特徴量の意味や介入可能性を直接証明するものではありません。
L1正則化のデータリーク対策|標準化と選択を分割内で行う
特徴量の標準化、欠損値補完、特徴量選択を全データへ先に適用すると、評価データの情報が訓練側へ入ります。L1で係数を0にする処理も学習の一部なので、交差検証の外で選択してはいけません。前処理とL1モデルをPipelineへまとめ、各foldでfitからやり直す構成を採用します。
時系列データでは未来の観測から標準化統計量や特徴量の選択を行わないようにします。顧客や患者など同一個体の行が複数ある場合は、同じ個体が訓練と検証へまたがらない分割を選びます。L1を使ったからリークがなくなるわけではなく、データ分割、前処理、評価の順序を一貫させる必要があります。
運用と解釈|係数0を業務判断へ直結させない
運用では、モデルの予測性能だけでなく、非ゼロ係数の数、特徴量選択の安定性、再学習での変動、推論時間を監視します。新しい期間で係数が大きく入れ替わる場合、データ分布の変化、特徴量の相関、正則化強度の不足や過剰を確認します。係数と前処理器を同じバージョンで保存し、どの列がどの変換後の列かを追跡できるようにします。
係数の符号は、他の特徴量を一定にしたときのモデル上の関係を表します。観測データだけから原因と結果を示すものではありません。施策を決める際は、係数、予測への寄与、実験や業務知識、個人情報・公平性の制約を合わせてレビューします。説明資料では、標準化後の単位、基準カテゴリ、L1強度、評価期間を明示します。
L1正則化まとめ|疎性と予測性能のバランスを検証する
L1正則化は、損失関数へ係数の絶対値の合計を加え、係数を縮小しながら一部を0にしやすくする方法です。L2正則化が係数を全体的に小さくするのに対し、L1は特徴量を絞り込む効果があります。Elastic Netは両方の性質を組み合わせ、相関した特徴量が多い場合の候補になります。
利用時は特徴量のスケールをそろえ、標準化・欠損補完・特徴量選択を交差検証の各訓練分割内で行います。正則化強度は業務指標で選び、スコア、非ゼロ係数数、選択の安定性、推論コストを記録します。0になった係数を因果関係の否定と解釈せず、相関とデータ分割の影響を確認したうえで業務判断へつなげてください。
よくある質問(FAQ)
Q. L1正則化とは何ですか?
L1正則化は、損失関数に係数の絶対値の合計を加え、係数を縮小して一部を0にしやすくする方法です。予測性能の改善だけでなく、特徴量を絞り込む目的にも使われます。
Q. L1正則化とL2正則化は何が違いますか?
L1は係数の一部を0にしやすく、L2は係数全体を小さくする傾向があります。特徴量を削減したいか、相関した列へ安定して係数を分けたいかで使い分けます。
Q. L1正則化で標準化は必要ですか?
単位や尺度が異なる数値列を比較するなら、標準化を検討します。標準化器は訓練データだけで適合し、検証・テストへ同じ変換を適用してデータリークを防ぎます。
Q. 正則化の強さはどう決めますか?
交差検証で複数の強度を比較し、業務に合う検証指標、非ゼロ係数数、選択の安定性、推論コストを見て決めます。最終テストデータは候補を決めた後に一度だけ使います。
Q. 係数が0になった特徴量は不要ですか?
不要と断定はできません。相関した特徴量の代わりに選ばれなかった可能性があり、データ分割や強度で結果が変わります。選択頻度や業務知識を合わせて判断してください。
参考資料
- scikit-learn「Lasso」
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html - scikit-learn「LogisticRegression」
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html - scikit-learn「ElasticNet」
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.ElasticNet.html - scikit-learn User Guide「Linear Models」
https://scikit-learn.org/stable/modules/linear_model.html - scikit-learn「StandardScaler」
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html
