機械学習のwebラーニング課題で教師あり学習をいろいろ試してみた
はじめに
UdacityというwebラーニングコミュニティでIntro to Machine Learningっていうコースを学習している(このボリュームで全て無料!)
www.udacity.com
1-4章では教師あり学習について扱っていて、4章付属のpythonプログラムがいろいろな教師あり学習アルゴリズムを比較検討するのに役立ちそう、と思いついたので、4章まで受講し終わったこのタイミングでまずはざっとやってみた。
環境
$ sw_vers ProductName: Mac OS X ProductVersion: 10.10.5 $ python -V Python 2.7.11 $ pip freeze cycler==0.10.0 matplotlib==1.5.3 nltk==3.2.1 numpy==1.11.2 pyparsing==2.1.10 python-dateutil==2.6.0 pytz==2016.7 scikit-learn==0.18.1 scipy==0.18.1 six==1.10.0 Theano==0.8.2
ライブラリは色々入ってますが、matplotlib,numpy,scipy,scikit-learnあたりを主に使ってるはず。
コードの中身
コードのベースにしたのはこちらからダウンロードできる以下のスクリプト。
ud120-projects/choose_your_own/your_algorithm.py
あらかじめプロット関係のコードは書かれているので、your code here!の後に「各アルゴリズムのモジュールをインポート」「classifier導入」「fit」と3行程度追加するだけで図示できる。便利。
一例として、naive bayesの場合はこんな感じになる(一部抜粋)
### your code here! name your classifier object clf if you want the ### visualization code (prettyPicture) to show you the decision boundary from sklearn.naive_bayes import GaussianNB clf = GaussianNB() clf.fit(features_train, labels_train) try: prettyPicture(clf, features_test, labels_test) except NameError: pass plt.show()
試してみたアルゴリズムと出力結果
今回decision boundaryを図示してみたのは以下のアルゴリズム
- Naive Bayes
- Support Vector Machine(SVM)
- Decision Tree
- AdaBoost
- Random Forest
- k-Nearest Neighbor(kNN)
対象データ
自動運転車の速度制御がモチーフで、横軸に凸凹度(bumpiness 大きいほどでこぼこ)、縦軸に坂の緩急(grade 大きいほど急)を取ってある。
全データはfast(青)かslow(赤)かで既に色分けされている。
青と赤の領域をどのように分けるのか?が今回のお題。
1.Naive Bayes
使用したライブラリ、モジュール、classifier
from sklearn.naive_bayes import GaussianNB clf = GaussianNB()
参考:sklearn.naive_bayes.GaussianNB — scikit-learn 0.18.1 documentation
3.Decision Tree
使用したライブラリ、モジュール、classifier
from sklearn import tree clf = tree.DecisionTreeClassifier()
4.AdaBoost
使用したライブラリ、モジュール、classifier
from sklearn.ensemble import AdaBoostClassifier clf = AdaBoostClassifier()
参考:1.11. Ensemble methods — scikit-learn 0.18.1 documentation
5.Random Forest
使用したライブラリ、モジュール、classifier
from sklearn.ensemble import RandomForestClassifier clf = RandomForestClassifier()
参考:1.11. Ensemble methods — scikit-learn 0.18.1 documentation
6.k-Nearest Neighbor(kNN)
使用したライブラリ、モジュール、classifier
from sklearn.neighbors import KNeighborsClassifier clf = KNeighborsClassifier()
参考:sklearn.neighbors.KNeighborsClassifier — scikit-learn 0.18.1 documentation