はじめに
この実験では、scikit-learn の線形モデルを調べます。線形モデルは、回帰と分類タスクに使用される一連の手法です。これらのモデルは、目的変数が特徴量の線形結合であると仮定しています。これらのモデルは、単純さと解釈可能性のため、機械学習で広く使用されています。
以下のトピックを扱います。
- 最小二乗法
- リッジ回帰
- Lasso
- ロジスティック回帰
- 確率的勾配降下法
- パーセプトロン
機械学習の経験がない場合は、教師あり学習:回帰から始めてください。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使って練習しましょう。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
最小二乗法
機械学習の経験がない場合は、教師あり学習:回帰から始めてください。
最小二乗法(OLS)は、観測されたターゲットと予測されたターゲットの二乗誤差の和を最小化する線形回帰手法です。数学的には、次の形式の問題を解きます。 $$\min_{w} || X w - y||_2^2$$
まず、OLS を使って線形回帰モデルをフィッティングしてみましょう。
from sklearn import linear_model
reg = linear_model.LinearRegression()
X = [[0, 0], [1, 1], [2, 2]]
y = [0, 1, 2]
reg.fit(X, y)
print(reg.coef_)
- scikit-learn から
linear_modelモジュールをインポートします。 LinearRegressionのインスタンスを作成します。fitメソッドを使ってモデルを訓練データにフィッティングします。- 線形モデルの係数を表示します。
リッジ回帰
リッジ回帰は、最小二乗法の目的関数にペナルティ項を追加する線形回帰手法です。このペナルティ項は、係数をゼロに近づけることで過学習を軽減するのに役立ちます。モデルの複雑さは正則化パラメータによって制御できます。
リッジ回帰モデルをフィッティングしてみましょう。
reg = linear_model.Ridge(alpha=0.5)
reg.fit([[0, 0], [0, 0], [1, 1]], [0, 0.1, 1])
print(reg.coef_)
- 正則化パラメータ
alphaを 0.5 に設定してRidgeのインスタンスを作成します。 fitメソッドを使ってモデルを訓練データにフィッティングします。- リッジ回帰モデルの係数を表示します。
Lasso
Lasso は、最小二乗法の目的関数にペナルティ項を追加する線形回帰手法です。このペナルティ項は、一部の係数を正確にゼロに設定する効果があり、したがって特徴選択を行います。Lasso は疎モデル推定に使用できます。
Lasso モデルをフィッティングしてみましょう。
reg = linear_model.Lasso(alpha=0.1)
reg.fit([[0, 0], [1, 1]], [0, 1])
print(reg.coef_)
- 正則化パラメータ
alphaを 0.1 に設定してLassoのインスタンスを作成します。 fitメソッドを使ってモデルを訓練データにフィッティングします。- Lasso モデルの係数を表示します。
ロジスティック回帰
ロジスティック回帰は、ロジスティック関数を使って可能な結果の確率を推定する分類手法です。二値分類タスクに一般的に使用されます。ロジスティック回帰は、多クラス分類問題を処理するためにも拡張できます。
ロジスティック回帰モデルをフィッティングしてみましょう。
clf = linear_model.LogisticRegression(random_state=0).fit(X, y)
print(clf.coef_)
random_stateパラメータを 0 に設定してLogisticRegressionのインスタンスを作成します。fitメソッドを使ってモデルを訓練データにフィッティングします。- ロジスティック回帰モデルの係数を表示します。
確率的勾配降下法 (SGD)
確率的勾配降下法 (SGD) は、線形モデルを訓練するためのシンプルで効率的なアプローチです。サンプル数と特徴数が非常に多い場合に特に役立ちます。SGD は、各反復で訓練データの小さなサブセットを使用してモデルパラメータを更新するため、オンライン学習やアウトオブコア学習に適しています。
SGD を使ってロジスティック回帰モデルをフィッティングしてみましょう。
clf = linear_model.SGDClassifier(loss="log_loss", max_iter=1000)
clf.fit(X, y)
print(clf.coef_)
- ロジスティック回帰を行うために、
lossパラメータを "log_loss" に設定してSGDClassifierのインスタンスを作成します。 fitメソッドを使ってモデルを訓練データにフィッティングします。- SGD を使用して得られたロジスティック回帰モデルの係数を表示します。
パーセプトロン
パーセプトロンは、大規模学習に適したシンプルな線形分類アルゴリズムです。パーセプトロンは誤りのみを基にモデルを更新するため、ヒンジ損失を伴う確率的勾配降下法 (SGD) よりも学習が高速です。得られるモデルも疎になります。
パーセプトロンモデルをフィッティングしてみましょう。
clf = linear_model.Perceptron(alpha=0.1)
clf.fit(X, y)
print(clf.coef_)
- 正則化パラメータ
alphaを 0.1 に設定してPerceptronのインスタンスを作成します。 fitメソッドを使ってモデルを訓練データにフィッティングします。- パーセプトロンモデルの係数を表示します。
まとめ
この実験では、scikit-learn の線形モデルを調べました。最小二乗法、リッジ回帰、Lasso、ロジスティック回帰、確率的勾配降下法、およびパーセプトロンについて学びました。これらのモデルは回帰と分類の両方のタスクに使用できます。また、オンライン学習や特徴選択などのさまざまなアルゴリズムと技術を使ってこれらのモデルをフィッティングする方法も見ました。