sentdexさんの動画で学ぶ機械学習

難しいことを簡単に学ぶ方法

難しいことを簡単に学ぶ方法 ― 強力なスキルを新たに身に着けるための3つのステップ

  • 初日からいきなり何かを作る
  • シロウトがYouTubeに投稿しているビデオが良い
  • 自分は何を分かっていないのかを把握できる

同意見です。機械学習Youtubeの動画から学べると思います。

sentdexさんの機械学習動画をはじめてみる

Scikit-learn Machine Learning with Python and SKlearn

機械学習に関する動画は多数ありますが、ラーニングパスとゴールが明確であり、文章での説明もあるsentdexさんの動画が僕に適していると思いました。プレイリスト内の動画は全26件あります! (sentdexさんがシロウトというわけではありません!)

今日は第1回と第2回を見てみます。

第1回 機械学習概要

Intro to Machine Learning with Scikit Learn and Python

機械学習ってそんなにムズかしくないよ、教師あり・教師なしの訓練があるよなど機械学習の概要や必要なPythonのライブラリの説明があります。ここでの詳しい説明はパスします..

第2回 サポートベクターマシンのサンプル

Simple Support Vector Machine (SVM) example with character recognition

第2回はsklearnのチュートリアルの1つである「手書き文字の画像認識」を紹介しています。

手書き文字の画像認識

データはsklearnに含まれている手書き文字データを利用します。

>>> import matplotlib.pyplot as plt
>>> from sklearn import datasets
>>> from sklearn import svm
>>> digits = datasets.load_digits()
>>> print(len(digits.data))
1797

データ件数は1797件ですね。0件目のデータと回答(数値)を見てみましょう。

>>> print(digits.images[0])
[[  0.   0.  10.  14.   8.   1.   0.   0.]
 [  0.   2.  16.  14.   6.   1.   0.   0.]
 [  0.   0.  15.  15.   8.  15.   0.   0.]
 [  0.   0.   5.  16.  16.  10.   0.   0.]
 [  0.   0.  12.  15.  15.  12.   0.   0.]
 [  0.   4.  16.   6.   4.  16.   6.   0.]
 [  0.   8.  16.  10.   8.  16.   8.   0.]
 [  0.   1.   8.  12.  14.  12.   1.   0.]]
>>> print(digits.target[0])
0

画像はMatplotlibのimshow()で表示できます。

plt.imshow(digits.images[0], cmap=plt.cm.gray_r, interpolation="nearest")
plt.show()

スクリーンショット 2016-02-10 12.18.00.png

0っぽい文字が表示されていますね。

別の画像を見てみましょう。

>>> plt.imshow(digits.images[-1], cmap=plt.cm.gray_r, interpolation="nearest")
>>> plt.show()

スクリーンショット 2016-02-10 12.37.55.png

なんだかはっきりしませんね.. 答えは8です。この答えを機械学習を使って導き出すのが今回のゴールです。

>>> print(digits.images[-1])
[[  0.   0.  10.  14.   8.   1.   0.   0.]
 [  0.   2.  16.  14.   6.   1.   0.   0.]
 [  0.   0.  15.  15.   8.  15.   0.   0.]
 [  0.   0.   5.  16.  16.  10.   0.   0.]
 [  0.   0.  12.  15.  15.  12.   0.   0.]
 [  0.   4.  16.   6.   4.  16.   6.   0.]
 [  0.   8.  16.  10.   8.  16.   8.   0.]
 [  0.   1.   8.  12.  14.  12.   1.   0.]]
>>> print(digits.target[-1])
8

判別器はSVMを使います。(「clf = svm.SVC()とするより、gamma、Cを設定すると良い。今は深く掘り下げない。」と記事に書いてますので今回はスルーします)

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

1件目〜1787件目のデータを教師用データとして学習します。

>>> x,y = digits.data[:-10], digits.target[:-10]
>>> clf.fit(x,y)

では例の最後のデータの数値を予測してみましょう。

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

正解の8が表示されていますね。

まとめ

SVMとは何か..については多くのサイトで説明されていますので省略します... 後半は株価予測もできる?らしいので早くそこに行きたいです。

参考

Intro to Machine Learning with Scikit Learn and Python

pythonの機械学習ライブラリscikit-learnの紹介

Sklearnを使った機械学習

sklearnで手書き文字認識

SVM(RBFカーネル)のハイパーパラメータを変えると何が起こるの?

scikit.learn手法徹底比較! SVM編

Twitter @sentdex

TipMe

TipMe with IndieSquare