はじめに
確率的勾配降下法(Stochastic Gradient Descent, SGD)は、機械学習でよく使われる最適化アルゴリズムです。これは、各反復で訓練データのランダムに選択されたサブセットを使用する勾配降下法のバリエーションです。このため、計算効率が良く、大規模なデータセットの処理に適しています。この実験(Lab)では、scikit-learn を使用して Python で SGD を実装する手順を説明します。
VM のヒント
VM の起動が完了したら、左上隅をクリックして Notebook タブに切り替え、Jupyter Notebook を開いて練習を行ってください。
場合によっては、Jupyter Notebook の読み込みが完了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題が発生した場合は、Labby に質問してください。セッション終了後にフィードバックを提供していただければ、迅速に問題を解決します。
ライブラリのインポート
まず、この実験(Lab)で必要なライブラリをインポートする必要があります。その中には scikit-learn も含まれます。
import numpy as np
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
データの読み込み
次に、scikit-learn からアヤメのデータセット(iris dataset)を読み込みます。このデータセットは、アヤメの花の測定値とそれに対応する種のラベルから構成される古典的な機械学習データセットです。
iris = load_iris()
X = iris.data
y = iris.target
データの前処理
SGD を適用する前に、データを前処理することが多くの場合有益です。この場合、scikit-learn の StandardScaler を使用して特徴量を標準化します。
scaler = StandardScaler()
X = scaler.fit_transform(X)
データの分割
データセットを訓練セット(training set)とテストセット(test set)に分割します。訓練セットは SGD 分類器を訓練するために使用され、テストセットはその性能を評価するために使用されます。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
分類器の訓練
これで、scikit-learn の SGDClassifier クラスを使用して SGD 分類器を作成し、訓練することができます。線形分類器で一般的に使用される「ヒンジ(hinge)」損失関数を使用します。
clf = SGDClassifier(loss='hinge', random_state=42)
clf.fit(X_train, y_train)
予測を行う
分類器の訓練が完了したら、新しいデータに対する予測を行うために使用することができます。ここでは、テストセットのターゲットクラスを予測するために使用します。
y_pred = clf.predict(X_test)
性能の評価
最後に、テストセットに対する予測の正解率(accuracy)を計算することで、分類器の性能を評価します。
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
まとめ
この実験では、scikit-learn を使用して確率的勾配降下法(Stochastic Gradient Descent, SGD)を実装する方法を学びました。アヤメのデータセットを読み込み、データを前処理し、訓練セットとテストセットに分割し、SGD 分類器を訓練し、予測を行い、分類器の性能を評価しました。SGD は、大規模な問題に対して機械学習で広く使用される強力な最適化アルゴリズムです。