確率的勾配降下法の実装

Machine LearningMachine LearningBeginner
今すぐ練習

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

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

はじめに

確率的勾配降下法(Stochastic Gradient Descent, SGD)は、機械学習でよく使われる最適化アルゴリズムです。これは、各反復で訓練データのランダムに選択されたサブセットを使用する勾配降下法のバリエーションです。このため、計算効率が良く、大規模なデータセットの処理に適しています。この実験(Lab)では、scikit-learn を使用して Python で SGD を実装する手順を説明します。

VM のヒント

VM の起動が完了したら、左上隅をクリックして Notebook タブに切り替え、Jupyter Notebook を開いて練習を行ってください。

場合によっては、Jupyter Notebook の読み込みが完了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題が発生した場合は、Labby に質問してください。セッション終了後にフィードバックを提供していただければ、迅速に問題を解決します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/preprocessing("Preprocessing and Normalization") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/metrics("Metrics") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-71102{{"確率的勾配降下法の実装"}} sklearn/preprocessing -.-> lab-71102{{"確率的勾配降下法の実装"}} sklearn/model_selection -.-> lab-71102{{"確率的勾配降下法の実装"}} sklearn/metrics -.-> lab-71102{{"確率的勾配降下法の実装"}} sklearn/datasets -.-> lab-71102{{"確率的勾配降下法の実装"}} ml/sklearn -.-> lab-71102{{"確率的勾配降下法の実装"}} end

ライブラリのインポート

まず、この実験(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 は、大規模な問題に対して機械学習で広く使用される強力な最適化アルゴリズムです。