L1 ロジスティック回帰の正則化パス

Machine LearningMachine LearningBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

L1ロジスティック回帰モデルは、L1正則化を使用してモデルに疎性を誘導する二値分類手法です。このモデルの正則化パスは、正則化強度が増加するにつれてモデルの係数を示します。この実験では、Irisデータセットを使用してL1ペナルティ付きロジスティック回帰モデルを学習し、その正則化パスをプロットします。

VMのヒント

VMの起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebookを使って練習しましょう。

Jupyter Notebookの読み込みには数秒かかる場合があります。Jupyter Notebookの制限により、操作の検証は自動化できません。

学習中に問題がある場合は、Labbyにお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49204{{"L1 ロジスティック回帰の正則化パス"}} ml/sklearn -.-> lab-49204{{"L1 ロジスティック回帰の正則化パス"}} end

Irisデータセットを読み込む

scikit-learnライブラリからIrisデータセットを読み込みます。このデータセットには、がく片の長さ、がく片の幅、花弁の長さ、花弁の幅の4つの特徴が含まれています。二値分類には最初の2つの特徴のみを使用します。

from sklearn import datasets

iris = datasets.load_iris()
X = iris.data
y = iris.target

X = X[y!= 2] ## 二値分類には最初の2つの特徴のみを使用
y = y[y!= 2]

X /= X.max() ## 収束を加速するためにXを正規化

正則化パスを計算する

異なる正則化強度のL1ペナルティ付きロジスティック回帰モデルを学習することで正則化パスを計算します。L1ペナルティ付きのロジスティック回帰損失に対して効率的に最適化できるliblinearソルバーを使用します。係数を収集する前にモデルが収束していることを確認するために、許容誤差の低い値を設定します。また、warm_start=Trueを使用します。これは、モデルの係数を再利用して次のモデルのフィットを初期化し、フルパスの計算を高速化することを意味します。

import numpy as np
from sklearn import linear_model
from sklearn.svm import l1_min_c

cs = l1_min_c(X, y, loss="log") * np.logspace(0, 10, 16)

clf = linear_model.LogisticRegression(
    penalty="l1",
    solver="liblinear",
    tol=1e-6,
    max_iter=int(1e6),
    warm_start=True,
    intercept_scaling=10000.0,
)
coefs_ = []
for c in cs:
    clf.set_params(C=c)
    clf.fit(X, y)
    coefs_.append(clf.coef_.ravel().copy())

coefs_ = np.array(coefs_)

正則化パスをプロットする

学習済みモデルの係数を使用して正則化パスをプロットします。係数は、正則化強度の対数に対してプロットされます。グラフの左側(強い正則化項)では、すべての係数が正確に0になります。正則化が徐々に緩くなると、係数が順に非ゼロの値をとるようになります。

import matplotlib.pyplot as plt

plt.plot(np.log10(cs), coefs_, marker="o")
ymin, ymax = plt.ylim()
plt.xlabel("log(C)")
plt.ylabel("Coefficients")
plt.title("Logistic Regression Path")
plt.axis("tight")
plt.show()

まとめ

この実験では、Irisデータセット上でL1ペナルティ付きロジスティック回帰モデルを学習し、その正則化パスをプロットする方法を学びました。正則化パスは、異なる正則化強度に対してモデルの係数がどのように変化するかを示します。この方法は、どの特徴がモデルに最も大きな影響を与えるかを特定できるため、特徴選択に役立ちます。