はじめに
教師あり学習では、2 つのデータセット間の関係を学びたいと考えています。1 つは観測データ X で、もう 1 つは予測したい外部変数 y です。
教師あり学習問題には、主に 2 つのタイプがあります。分類と回帰です。分類では、観測値のクラスまたはカテゴリを予測することが目的であり、回帰では、連続的な目的変数を予測することが目的です。
この実験では、教師あり学習の概念を探り、Python の人気のある機械学習ライブラリである scikit-learn を使ってそれを実装する方法を見ていきます。最近傍法による分類、線形回帰、サポートベクターマシン (SVM) などのトピックを扱います。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
最近傍法による分類
このステップでは、最近傍法による分類の概念と、scikit-learn を使ってそれを実装する方法を探ります。さまざまなアヤメの花の測定値からなるアヤメデータセットを使います。
アヤメデータセットを読み込む
import numpy as np
from sklearn import datasets
iris_X, iris_y = datasets.load_iris(return_X_y=True)
データを学習用とテスト用に分割する
np.random.seed(0)
indices = np.random.permutation(len(iris_X))
iris_X_train = iris_X[indices[:-10]]
iris_y_train = iris_y[indices[:-10]]
iris_X_test = iris_X[indices[-10:]]
iris_y_test = iris_y[indices[-10:]]
最近傍法による分類器を作成して適合させる
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(iris_X_train, iris_y_train)
予測を行う
predictions = knn.predict(iris_X_test)
線形回帰
このステップでは、線形回帰の概念と、scikit-learn を使ってそれを実装する方法を探ります。患者の生理的変数と 1 年後の病状進行からなる糖尿病データセットを使います。
糖尿病データセットを読み込む
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]
線形回帰モデルを作成して適合させる
from sklearn import linear_model
regr = linear_model.LinearRegression()
regr.fit(diabetes_X_train, diabetes_y_train)
予測を行い、性能指標を計算する
predictions = regr.predict(diabetes_X_test)
mse = np.mean((predictions - diabetes_y_test)**2)
variance_score = regr.score(diabetes_X_test, diabetes_y_test)
サポートベクターマシン (SVM)
このステップでは、サポートベクターマシン (SVM) の概念と、分類タスクにどのように使用できるかを探ります。SVM は、異なるクラスのデータポイントを最大限に分離する超平面を見つけることを目的としています。
線形 SVM を作成して適合させる
from sklearn import svm
svc = svm.SVC(kernel='linear')
svc.fit(iris_X_train, iris_y_train)
異なるカーネルを持つ SVM を作成して適合させる
svc_poly = svm.SVC(kernel='poly', degree=3)
svc_rbf = svm.SVC(kernel='rbf')
svc_poly.fit(iris_X_train, iris_y_train)
svc_rbf.fit(iris_X_train, iris_y_train)
まとめ
この実験では、さまざまな教師あり学習手法と、scikit-learn を使ってそれらを実装する方法を学びました。最近傍法による分類、線形回帰、およびサポートベクターマシン (SVM) について説明しました。これらの手法を使うことで、高次元の観測値から出力変数を予測し、データを異なるカテゴリに分類することができます。これらの手法を現実世界のデータセットに適用することで、医療、金融、社会科学などのさまざまな分野で洞察を得て予測を行うことができます。