Scikit - Learn を使った機械学習パイプラインの構築

Beginner

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

はじめに

機械学習において、パイプラインとは、入力データを変換してからモデルを構築するために順次実行される一連のステップです。Scikit-learn は、複数の処理ステップをチェーン化するために使用できるパイプラインクラスを提供しており、複数の前処理とモデリングステップを含む複雑なモデルを構築するのを簡単にします。

このチュートリアルでは、Scikit-learn を使用して特徴選択と SVM 分類を備えたパイプラインを構築する方法を示します。パイプライン内に特徴選択を統合して過学習を防止する方法と、モデルをよりよく理解するためにパイプラインを調べる方法を示します。

VM のヒント

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

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

学習中に問題が発生した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

データセットの生成と分割

まず、Scikit-learn の make_classification 関数を使って二値分類用のデータセットを生成します。また、Scikit-learn の train_test_split 関数を使って、データセットを訓練用とテスト用のサブセットに分割します。

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(
    n_features=20,
    n_informative=3,
    n_redundant=0,
    n_classes=2,
    n_clusters_per_class=2,
    random_state=42,
)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

パイプラインの構築

ここでは、特徴選択と SVM 分類の 2 つのステップからなるパイプラインを構築します。特徴選択には Scikit-learn の SelectKBest 関数を、SVM 分類には Scikit-learn の LinearSVC 関数を使用します。SelectKBest 関数は、各特徴と目的変数の間の ANOVA F 値を計算する f_classif メソッドに基づいて、最も情報量の多い k 個の特徴を選択します。この例では k=3 と設定します。

from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.pipeline import make_pipeline
from sklearn.svm import LinearSVC

anova_filter = SelectKBest(f_classif, k=3)
clf = LinearSVC(dual="auto")
anova_svm = make_pipeline(anova_filter, clf)

パイプラインの学習

ここでは、fit メソッドを使って訓練用サブセット上でパイプラインを学習します。学習中に、SelectKBest 関数は ANOVA F 値に基づいて最も情報量の多い 3 つの特徴を選択し、LinearSVC 関数は選択された特徴に基づいて線形 SVM 分類器を学習します。

anova_svm.fit(X_train, y_train)

パイプラインの評価

ここでは、predict メソッドを使ってテスト用サブセット上でパイプラインを評価します。パイプラインは ANOVA F 値に基づいて最も情報量の多い 3 つの特徴を選択し、LinearSVC 関数は選択された特徴に基づいて予測を行います。

from sklearn.metrics import classification_report

y_pred = anova_svm.predict(X_test)
print(classification_report(y_test, y_pred))

パイプラインの調査

モデルをよりよく理解するために、パイプラインを調査することができます。選択された特徴のインデックスを使用して、元の特徴名を取得することができます。

anova_svm[:-1].inverse_transform(anova_svm[-1].coef_)

まとめ

このチュートリアルでは、Scikit-learn を使って特徴選択と SVM 分類を備えたパイプラインを構築する方法を示しました。パイプライン内に特徴選択を統合して過学習を防止する方法と、モデルをよりよく理解するためにパイプラインを調査する方法を紹介しました。パイプラインは、モジューラーかつ効率的な方法で複雑なモデルを構築するための強力なツールです。