脇山さんの投稿 でscikit-learnの存在を知りました。Sageと同じPythonベースと言うこともあり、使ってみたいと思っており、正月休みの最後に試して見ることにしました。
Sageにscikit-learnモジュールをインストールするもっとも簡単な方法は、Sageのシェルモードからeasy_installを使ってインストールする方法です
以下の様にsageをシェルモードで起動してからeasy_install -U scikit-learnを実行します。最後にexitでシェルモードを抜けることをお忘れなく。
$ sage -sh Starting subshell with Sage environment variables set. Don't forget to exit when you are done. Beware: * Do not do anything with other copies of Sage on your system. * Do not use this for installing Sage packages using "sage -i" or for running "make" at Sage's root directory. These should be done outside the Sage shell. Bypassing shell configuration files... Note: SAGE_ROOT=/Users/take/local/sage (sage-sh) $ easy_install -U scikit-learn ... 無事インストールできたら (sage-sh) $ exit
いくつかのマシンでインストールしたのですが、easy_installが上手くできなかったものもありました。 その場合には、ソースからインストールします。
(sage-sh) $ wget https://github.com/scikit-learn/scikit-learn/archive/master.zip (sage-sh) $ unzip master; rm master (sage-sh) $ cd scikit-learn-master (sage-sh) $ python setup.py install 無事インストールできたら (sage-sh) $ exit
ブログ「唯物是真」pythonの機械学習ライブラリscikit-learnの紹介 に出ているトイデータの例をSageで実行してみます。
load_digits関数で無事digitsを取り出すことができ、scikit-learnがsageにインストールできていることを確認しました。
(1797, 64) (1797, 64) |
次にpylabを使ってdigitsに含まれている画像を表示しようとするまったく表示されません。
|
Sageではpylabのshowの代わりにsavefigを使うことでSageがその結果を表示してくれるインタフェースになっているみたいです。
|
同じ結果は、Sageのmatrix_plotを使っても表示できます。 Sageのグラフ機能は柔軟性に富み、慣れると使いやすいです。(凝った表示の場合には、Rのggplot2が良いですが、...)
|
脇山さんの投稿にある例題をSageで試してみます。
Data Science London + Scikit-learn からデータをダウンロードし、Sageのワークシートの「Data」メニューからUpload or createを選択し、データをSageのワークシートにアップロードします。
Upload or createを使ってアップロードしたファイルは、ワークシートのDataディレクトリに保存され、そのままではSageでは使えません。 そこで、変数DATAを使ってワークシートのディレクトリを付けてデータにアクセスします。
脇山さんの投稿にそってSVMを使ってtest.csvのデータを識別してみます。
SVC(C=1, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False) SVC(C=1, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False) |
[ 1. 0. 1. ..., 1. 0. 1.] [ 1. 0. 1. ..., 1. 0. 1.] |
脇山さんのスライドにあるようにscikit-learnは良く設計されており、使用する手法を変更するだけで ほとんど同じように処理できるようになっています。
SVMで識別したのと同じ処理を「k近傍法」、「RandomForest」で計算した結果です。
[ 1. 0. 1. ..., 1. 0. 1.] [ 1. 0. 1. ..., 1. 0. 1.] |
[ 1. 0. 0. ..., 1. 0. 1.] [ 1. 0. 0. ..., 1. 0. 1.] |
|