scikit-learnによる機械学習入門

最近社内でscikit-learnを使った機械学習の勉強会が開催されています。

scikit-learnというのはPythonで実装された機械学習ライブラリで、MahoutやMLlibなどと比べると非常に手軽に試すことができるのが特長です。実装されているアルゴリズムも豊富で、プロトタイピングに使ってもよし、そこまで大量のデータを扱うのでなければそのまま実用してもよし、という便利なものです。
まずは環境構築からscikit-learnのチュートリアルを実行するところまでをやってみます。

手元のMacにはPython 2.7.6が入っていたのでpipのインストールから。ホントはpyenvとか使って環境を作ったほうがいいのかもしれませんが、今回はとりあえずお手軽に試すということで。

curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | sudo python

pipでscikit-learnをインストールします。

sudo pip install scikit-learn

ここでは以下の一番簡単なチュートリアルをやってみます。
http://scikit-learn.org/stable/tutorial/basic/tutorial.html

Pythonの対話シェルを立ち上げます。

$ python
>>> 

scikit-learnではテスト用のデータセットも提供されているので、それをロードします。

>>> from sklearn import datasets
>>> digits = datasets.load_digits()

ロードしたデータを表示してみます。digits.dataが入力データ、digits.targetが判定結果になります。

>>> print(digits.data)  
[[  0.   0.   5. ...,   0.   0.   0.]
 [  0.   0.   0. ...,  10.   0.   0.]
 [  0.   0.   0. ...,  16.   9.   0.]
 ...,
 [  0.   0.   1. ...,   6.   0.   0.]
 [  0.   0.   2. ...,  12.   0.   0.]
 [  0.   0.  10. ...,  12.   1.   0.]]
>>> digits.target
array([0, 1, 2, ..., 8, 9, 8])

このデータを使ってサポートベクターマシンによる教師あり機械学習を試してみます。

>>> from sklearn import svm
>>> clf = svm.SVC(gamma=0.001, C=100.)

テストデータのうち、最後の1件以外のデータを使って学習を行います。学習を行う場合はfitというメソッドを使用します。

>>> clf.fit(digits.data[:-1], digits.target[:-1])  
SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,
  gamma=0.001, kernel='rbf', max_iter=-1, probability=False,
  random_state=None, shrinking=True, tol=0.001, verbose=False)

これで学習モデルができたので、テストデータの最後の1件を推定させてみます。推定にはpredictというメソッドを使用します。scikit-learnでは学習する場合にはfit、推定する場合にはpredictというように、アルゴリズムに関わらず統一されたインターフェースになっているそうです。

>>> clf.predict(digits.data[-1])
array([8])

テストデータのdigits.targetの最後の1件は8だったので、正しく判定できているようです。

と、まあこんな感じでscikit-learnを使うと機械学習を簡単に試すことができます。アルゴリズムやパラメータを変えながら精度を見ていくということもスクリプト言語のほうがやりやすそうですね。scikit-learnによる機械学習については今後も自分の学習がてら少しずつ紹介していきたいと思います。