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()
0っぽい文字が表示されていますね。
別の画像を見てみましょう。
>>> plt.imshow(digits.images[-1], cmap=plt.cm.gray_r, interpolation="nearest") >>> plt.show()
なんだかはっきりしませんね.. 答えは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の紹介
SVM(RBFカーネル)のハイパーパラメータを変えると何が起こるの?