5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

scikit-learnによる機械学習実装の本質部分

Last updated at Posted at 2019-04-04

目的

 機械学習ライブラリscikit-learnは非常に少ないコード量で機械学習モデルを実装できる。しかし、多くの解説記事においては学習モデルの評価、グラフ描画等を同時に解説するがゆえに、何が機械学習の本質なのかが見えにくい。そこで本記事では、scikit-learnによる機械学習モデル実装の本質部分のみを抽出して解説する。

概要

 scikit-learnを使ったpythonでの機械学習について、必要最小限の流れをまとめる。必要最小限とは、モデルを実装、使用するまでに必要な最小限の作業を指す。必要なデータを集めた状態からスタートし、以下の流れを書く。

  1. 入力データの整形
  2. モデルの選択
  3. 学習(フィッティング)
  4. モデルの使用(実際の予測)

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 = 目的変数
の関係があり、正しく学習・予測できた。

まとめ

  1. 説明変数 $X$, 目的変数 $y$を用意
  2. sklearnからモデルをインポート、インスタンスを生成
  3. インスタンス.fit(X, y) で学習
  4. 予測したいデータX_predについて、インスタンス.predict(X_pred)で予測。
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?