はじめに
この実験では、機械学習において大規模かつ疎な問題を解くために一般的に使用される強力な最適化アルゴリズムである確率的勾配降下法(Stochastic Gradient Descent:SGD)を検討します。scikit-learn ライブラリの SGDClassifier と SGDRegressor クラスを使用して線形分類器と回帰器を訓練する方法を学びます。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリをインポートする
まず、必要なライブラリをインポートする必要があります。機械学習とデータ前処理には scikit-learn ライブラリを使用します。
import numpy as np
from sklearn.datasets import load_iris
from sklearn.linear_model import SGDClassifier, SGDRegressor
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, mean_squared_error
データを読み込んで前処理する
次に、アヤメのデータセットを読み込み、StandardScaler を使って特徴量をスケーリングすることで前処理を行います。
## アヤメのデータセットを読み込む
iris = load_iris()
X, y = iris.data, iris.target
## 特徴量をスケーリングする
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
## データを訓練用とテスト用に分割する
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
SGD を使って分類器を訓練する
今度は、SGDClassifier クラスを使って分類器を訓練します。log_loss 損失関数と l2 ペナルティを使用します。
## SGD を使って分類器を訓練する
clf = SGDClassifier(loss="log_loss", penalty="l2", max_iter=100, random_state=42)
clf.fit(X_train, y_train)
## テストセットに対する予測を行う
y_pred = clf.predict(X_test)
## 分類器の精度を測定する
accuracy = accuracy_score(y_test, y_pred)
## 精度を表示する
print("Classifier Accuracy:", accuracy)
SGD を使って回帰器を訓練する
次に、SGDRegressor クラスを使って回帰器を訓練します。二乗誤差(squared_error)損失関数と l2 ペナルティを使用します。
## SGD を使って回帰器を訓練する
reg = SGDRegressor(loss="squared_error", penalty="l2", max_iter=100, random_state=42)
reg.fit(X_train, y_train)
## テストセットに対する予測を行う
y_pred = reg.predict(X_test)
## 回帰器の平均二乗誤差を測定する
mse = mean_squared_error(y_test, y_pred)
## 平均二乗誤差を表示する
print("Regressor Mean Squared Error:", mse)
まとめ
この実験では、scikit-learn ライブラリを使って確率的勾配降下法(Stochastic Gradient Descent:SGD)を用いて線形分類器と回帰器を訓練する方法を学びました。アヤメのデータセットで分類器を訓練し、その精度を測定し、回帰器を訓練して平均二乗誤差を測定しました。SGD は、大規模で疎な機械学習問題を効率的に処理できる強力な最適化アルゴリズムです。