Scikit - Learn の Lasso 回帰

Machine LearningMachine LearningBeginner
オンラインで実践に進む

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

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

はじめに

この実験では、密集データと疎データに対する Scikit-learn の Lasso 回帰アルゴリズムの使用方法を示します。Lasso アルゴリズムは、回帰係数に罰則を加える線形回帰手法です。この罰則により、モデルが疎な係数を生成するように促されます。Lasso アルゴリズムは、サンプル数に対して特徴量の数が多い場合に役立ちます。

VM のヒント

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

時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

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

ライブラリのインポート

必要なライブラリをインポートして始めます。Scikit-learn、NumPy、SciPy が必要です。

from time import time
from scipy import sparse
from scipy import linalg
from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso

密集データの生成

次に、Lasso 回帰に使用する密集データを生成します。Scikit-learn のmake_regression関数を使って、5000 個の特徴量を持つ 200 個のサンプルを生成します。

X, y = make_regression(n_samples=200, n_features=5000, random_state=0)

密集データで Lasso を学習する

次に、密集データと疎データのそれぞれに対して 2 つの Lasso 回帰モデルを学習します。alpha パラメータを 1 に設定し、最大反復回数を 1000 に設定します。

alpha = 1
sparse_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=1000)
dense_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=1000)

密集データに Lasso を適合させる

Scikit-learn のfit関数を使って、Lasso 回帰モデルを密集データに適合させます。また、適合プロセスに時間を計測し、各 Lasso モデルの時間を表示します。

t0 = time()
sparse_lasso.fit(X_sp, y)
print(f"Sparse Lasso done in {(time() - t0):.3f}s")

t0 = time()
dense_lasso.fit(X, y)
print(f"Dense Lasso done in {(time() - t0):.3f}s")

密集 Lasso と疎 Lasso の係数を比較する

密集 Lasso モデルと疎 Lasso モデルの係数を比較して、同じ結果が得られていることを確認します。係数の差のユークリッドノルムを計算します。

coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_)
print(f"Distance between coefficients : {coeff_diff:.2e}")

疎データの生成

次に、Lasso 回帰に使用する疎データを生成します。前のステップの密集データをコピーし、2.5 未満のすべての値を 0 に置き換えます。また、疎データを Scipy の圧縮疎列形式に変換します。

Xs = X.copy()
Xs[Xs < 2.5] = 0.0
Xs_sp = sparse.coo_matrix(Xs)
Xs_sp = Xs_sp.tocsc()

疎データで Lasso を学習する

次に、密集データと疎データのそれぞれに対して 2 つの Lasso 回帰モデルを学習します。alpha パラメータを 0.1 に設定し、最大反復回数を 10000 に設定します。

alpha = 0.1
sparse_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=10000)
dense_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=10000)

疎データに Lasso を適合させる

Scikit-learn のfit関数を使って、Lasso 回帰モデルを疎データに適合させます。また、適合プロセスに時間を計測し、各 Lasso モデルの時間を表示します。

t0 = time()
sparse_lasso.fit(Xs_sp, y)
print(f"Sparse Lasso done in {(time() - t0):.3f}s")

t0 = time()
dense_lasso.fit(Xs, y)
print(f"Dense Lasso done in  {(time() - t0):.3f}s")

密集 Lasso と疎 Lasso の係数を比較する

密集 Lasso モデルと疎 Lasso モデルの係数を比較して、同じ結果が得られていることを確認します。係数の差のユークリッドノルムを計算します。

coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_)
print(f"Distance between coefficients : {coeff_diff:.2e}")

まとめ

この実験では、Scikit-learn の Lasso 回帰アルゴリズムを密集データと疎データに適用する方法を示しました。Lasso アルゴリズムは、密集データと疎データに対して同じ結果を提供すること、および疎データの場合、アルゴリズムが高速であることを示しました。