目的
機械学習ライブラリscikit-learnは非常に少ないコード量で機械学習モデルを実装できる。しかし、多くの解説記事においては学習モデルの評価、グラフ描画等を同時に解説するがゆえに、何が機械学習の本質なのかが見えにくい。そこで本記事では、scikit-learnによる機械学習モデル実装の本質部分のみを抽出して解説する。
概要
scikit-learnを使ったpythonでの機械学習について、必要最小限の流れをまとめる。必要最小限とは、モデルを実装、使用するまでに必要な最小限の作業を指す。必要なデータを集めた状態からスタートし、以下の流れを書く。
- 入力データの整形
- モデルの選択
- 学習(フィッティング)
- モデルの使用(実際の予測)
1. 入力データの整形
使用するデータ例は下記2つのテーブルのものとする
訓練データ
説明変数1 | 説明変数2 | 目的変数 |
---|---|---|
1 | 6 | 7 |
2 | 7 | 9 |
3 | 8 | 11 |
4 | 9 | 13 |
5 | 10 | 15 |
予測データ
説明変数1 | 説明変数2 |
---|---|
50 | 100 |
訓練データの説明変数を $X$ 、訓練データの目的変数を $y$($X$は行列で$y$はベクトルなのでそれぞれ大文字と小文字を使用する) 、予測したいデータを $X_{\rm pred}$ として以下の形式で用意する。
X=\begin{bmatrix}
x_{11} & x_{12} & \cdots & x_{1n}\\
x_{21} & x_{22} & \cdots & x_{2n}\\
\vdots & & & \vdots\\
x_{n1} & x_{n2} & \cdots & x_{nn}\\
\end{bmatrix}
,~~
y= \begin{bmatrix}
y_1 \\
y_2 \\
\vdots \\
y_n \\
\end{bmatrix}
,~~
X_{\rm pred}=\begin{bmatrix}
x'_{11} & x'_{12} & \cdots & x'_{1n}\\
x'_{21} & x'_{22} & \cdots & x'_{2n}\\
\vdots & & & \vdots\\
x'_{n1} & x'_{n2} & \cdots & x'_{nn}\\
\end{bmatrix}
行方向(縦)に各サンプル、列方向(横)に特徴量となるように配列を作ることに留意する。例のデータでは以下のようになる。コード上では内側配列が列方向、外側配列が行方向となる。
X = [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]]
y = [7, 9, 11, 13, 15]
2. モデルの選択
使うモデルはこちら(チートシート)を参考にすると良い。例では簡単のため、線形回帰モデルを使用した。
sklearnライブラリから該当クラスをインポートし、インスタンスを生成して使用する。
from sklearn.linear_model import LinearRegression
model = LinearRegression()
3. 学習(フィッティング)
訓練データを元にモデルを学習(フィッティング)する。scikit-learnではモデルによらず一般にfit
メソッドを用いる。2で生成したインスタンスのfit
メソッドを、第1引数を訓練データの説明変数($X$)、第2引数を訓練データの目的変数($y$)として呼び出す。教師無し学習の場合、目的変数は無いので第2引数は無い。
以上で機械学習モデルが完成した。
model.fit(X, y) #modelインスタンスの学習
4. モデルの使用(実際の予測)
3の機械学習モデルを使用して実際に予測を行う。予測には、モデルによらず一般にpredict
メソッドを使用する。3でfitを行なったインスタンスを使うことに注意する。引数には予測したいデータ($X_{\rm pred}$)を使う。
X_pred = [[50, 100]]
print(model.predict(X_pred))
>> [150. ]
訓練データでは
説明変数1 + 説明変数2 = 目的変数
の関係があり、正しく学習・予測できた。
まとめ
- 説明変数 $X$, 目的変数 $y$を用意
- sklearnからモデルをインポート、インスタンスを生成
-
インスタンス.fit(X, y)
で学習 - 予測したいデータ
X_pred
について、インスタンス.predict(X_pred)
で予測。