本文へスキップ

岩通ソフトシステム株式会社はソフトウェア開発からサービスまでをトータルで提供するソリューションプロバイダです。

scikit-learnの歩き方

本コラムでは、機械学習のサイトであり、パッケージでもあるscikit-learnの歩き方について説明します。Webとしてのscikit-learnは、とても大きなサイトであり、記述は英語ですので、私もそうでしたが、最初に訪れた人は、どこから見て行けば良いのか迷ってしまうと思います。サイトのすべてのコンテンツを理解したわけではありませんが、それでも少しは参考になると思い、本コラムを執筆します。
本コラムに掲載する画像は、scikit-learnのサイトから引用しています。また、本コラムは、2017年4月11日現在のscikit-learnのサイトの内容を参考にして記載しています。

1. scikit-learnについて

scikit-learnは、機械学習アルゴリズムのパッケージで、2007年にDavid Cournapeau氏によって開発が行われました。2010年に最初のパブリックリリース(V0.1beta)が発表され、現在では約30人のアクティブ・コントリビュータが活動しています。最新バージョンは、2017年4月11日現在で、0.18となっています。
scikit-learnは、教師あり学習、教師なし学習の機械学習アルゴリズムをPythonのインターフェースを通じて提供しています。


© 2010 - 2016, scikit-learn developers (BSD License).


scikit-learnのサイトのURLは、http://scikit-learn.org/stable/です。このページは、上の画像のようになっています。
なお、開発を行っているコントリビュータの一覧は、http://scikit-learn.org/dev/about.html#peopleにあります。

scikit-learnのホームページを見ると分かるように、クラシフィケーション、回帰、クラスタリング、次元削減などの代表的なアルゴリズムを提供しており、ドキュメントも英語ですが、しっかりしていて、使用例も豊富です。
ただし、残念なことに、Deep Learningについては、今のところ扱っていません。

なお、scikit-learnのライセンスは、BSD Licenseを使用しています。BSD Licenseは、条件を満たせば、商用用途でも使用することができます。BSD Licenseの下で各種の機械学習のソースプログラムも公開されています。

さて、scikit-learnの簡単な説明は、このくらいにして、scikit-learnの歩き方について、以降で説明していきます。

2. scikit-learnの歩き方

ここでは、まず、大まかな歩き方の順番や概要について説明します。インストール、ドキュメントなどの各項目の詳細な説明は、それぞれの項目に対応した項で説明します。

まず、何といっても英語のサイトなので、一番の問題は英語だと思います。そこで、英語が苦手な人へのアドバイスですが、英語を見るのもいやだ、でも仕事なのでどうしても読んで、使えるようにならないといけないという人は、Google ChromeなどのWebページの翻訳機能を使うと良いと思います。Google Chromeの翻訳機能しか使ったことはありませんが、けっこう良い翻訳をしてくれていると感じました。もちろん、翻訳しきれないところや、翻訳してはいけないパラメタ名などを翻訳してしまうこともありますが、専門用語も、かなりの部分が適切に翻訳されていました。

次に、scikit-learnを実行できる環境を作ってから説明を読んでいくのが良いと思います。
実行環境があれば、試してみたい時に、例題プログラムやAPIを実行することができます。
ところで、Homeメニューの右にInstallationというメニューがありますが、ここを開いて、pythonすらインストールしていない状態で、scikit-learnをインストールしようとしても、インストールすら行うことはできません。では、どうすれば、良いかは、2.1インストールに記載してありますので、そちらを読んで下さい。

次にトップページからどこを読むかということですが、トップページには、Classification、Regression、Clusteringなどのメニューが並んでいますが、ここから入って行くのは。サイトの構成や機械学習が少し分かってからにします。
各ページの最上部にオレンジ色で、Home、Installation、Documentation、▽、Examplesというメニューがあります。初心者の方は、このメニューを、まず、使っていくのが良いと思います。

機械学習についての知識があまりないので、そこから勉強したいということであれば、Documentationメニューを選択して、ドキュメントの一覧ページを表示します。画面は、下記の画面が表示されます。


ここで、お勧めなのが、一番左上のQuick Startです。ただし、とっかかりとしては良いのですが、もう少し詳しく、だけど簡単に、という方のためには、その下のTutorialsがあります。Quick Startをとりあえずやってみて理解したら、その次にTutorialsに進むのがお勧めです。Tutorialsまで読んでみて、やはり機械学習については良く分からないという場合には、当たり前ですが、まず、市販の書籍を読むことをお勧めします。

また、機械学習はだいたい分かるので、いきなりAPIに行きたいという人もいるかもしれませんが、ちょっと思いとどまっていただいて、scikit-learnを始めて使う方の場合は、scikit-learnとしてのいろいろなお約束を理解してから使うのが結局早道だと思いますので、Quick StartとTutorialsの必要だと思う部分を、とりあえずざっと見るというのが良いと思います。Quick StartもTutuorialsも機械学習自体の説明もしていますが、scikit-learnを使う上での一般事項についても説明されています。

Tutorialsの目次のページにChoosing the right estimatorという項目があります。DocumentsのメニューのFlow Chartからも同じページに行けるのですが、何のアルゴリズムを使えば良いか分からない時に、このチャートが使えます。詳細は、2.2.3 Flow Chartを参照してください。

さて、ここまでくると、後は使うだけということになります。
User Guideには、各アルゴリズムの詳しい説明があり、APIには各アルゴリズムのAPIが紹介されています。とりあえず、演習問題としてアルゴリズムを使ってみたいという方は、Examplesに豊富な例がありますので、こちらを使ってみるのも良いと思います。
いずれの項目も、膨大な量がありますから、自分が興味のあるアルゴリズムや、やりたいことができるアルゴリズムを探して、それについてやってみるのが良いと思います。すべてをやろうとすると、他の仕事をせず、それだけやっても数ヶ月から下手をすると年単位になると思います。User Guideについては、2.2.4を、APIについては2.2.5を、Examlesについては2.3を参照してください。

2.1. インストール

scikit-learnのインストールについて記載されたページのURLは、http://scikit-learn.org/dev/install.htmlです。



このページの説明を読んで、インストールすることができますが、Canopy、Anaconda、WinPythonなどのサードパーティのパッケージをインストールすることをお勧めします。これらのパッケージには、scikit-learnを初め、scikit-learnが必要とするすべてのプログラムが含まれています。また、それ以外に役に立つの各種のプログラムも同時にインストールしてくれます。
逆に言えば、これらのパッケージをインストールしている場合には、scikit-learnが既にインストールされていますので、改めてインストールする必要はありません。scikit-learnのInstallationのページでもサードパーティのディストリビューションをインストールすることを推奨しています。

2.2. Documentation

Documentationページは、
・Quick Start
・Tutorials
・Development
・Related packages
・User Guide
・API
・Flow Chart
・Additional Resources
・FAQ
から構成されています。いくつかの内容について説明していきます。

2.2.1. Quick Start

機械学習で問題を解くソースコードを参照しながら、機械学習をscikit-learnを使って行う際に最低限必要なことを学べるように構成されています。学習した内容の保存方法や読込み方法などについても例があるので、このページをまず読んでから次に進むのが良いと思います。

2.2.2. Tutorials

Quick Startと比べると、こちらの方は、分量がそこそこあり、例えば、複数のアルゴリズムを統合して使うpipelineや顔写真から誰の顔かを推定する例題まであり、このTutorialsを勉強するだけで、かなり機械学習については理解することができるようになっています。たぶん、ここを全部読むと、scikit-learnの使い方をだいたいイメージできるようになると思います。

2.2.3. Flow Chart

初心者向けのアルゴリズムを選択するためのフローチャートです。STARTから初めて質問に答えて行くだけで適したアルゴリズムが分かるようになっています。



丸い枠が質問で四角い枠がアルゴリズムです。まず、最初の質問が「データの数が50以上か?」ですが、50未満だったら、もっとデータを集めて下さいとなるところが、笑わせてくれます。四角いアルゴリズムの箱は、クリックすると、そのアルゴリズムの説明に飛んでくれるので、使い勝手は良いと思います。ただし、このフローチャートだけで、scikit-learnが持つすべてのアルゴリズムを網羅しているわけではないので、これ以上は、自力で探すということになります。

2.2.4. User Guide

アルゴリズムごとの説明があります。アルゴリズムごとの説明では、そのアルゴリズムがどのように動くのか、どんなことができるのか、類似アルゴリズムの種類、計算量、使用例など、可視化した図なども使って説明されています。使いたいアルゴリズムがあれば、まず、ここを読んでアルゴリズムの概要を理解してからAPIを読むのが良いと思います。



User Guideは、Supervised learning、Unsupervised learning、Model selection and evaluationなどの大きなカテゴリに分かれており、それぞれが、さらにアルゴリズムの種類などでの小さなカテゴリに分けられています。

2.2.5. API

各アルゴリズムのAPIが網羅されています。カテゴリ分けされていますので、使いやすいと思います。
カテゴリは、30以上に分かれており、Clustering、Biclustering、Covariance Estimatorsなどのアルゴリズムごとに分かれています。



以下は、Tutorialsからの抜粋になりますが、scikit-learnではAPIの使い方は、名称なども含めて、以下のように統一されています。したがって、異なるアルゴリズムでも、APIの名前は、コンストラクタを除いて同じですので、AのアルゴリズムからBのアルゴリズムに移る時に、APIの名称がアルゴリズムによって変わってしまうという心配はいりません。

  • アルゴリズム名が付いた関数
    アルゴリズム名(sklearn.svm.SVC( )など)が付いた関数は、そのモデルのコンストラクタ関数という位置づけで、アルゴリズムで使用するハイパーパラメタなどを指定します。
  • fit関数
    トレーニング用のデータセットを受け入れて、アルゴリズムがデータセットを使用して学習を行います。
  • predict関数
    学習した内容に基づいて予測を行います。テスト時および実践時に使用します。
  • pickleパッケージ
    学習結果をファイルに保存することができます。また、ファイルに保存された学習結果をモデルに読みだすことができます。なお、pickleはscikit-learnの一部ではなく、Pythonのビルトインモデルです。なお、pickleにはセキュリティ上と保守上の問題がありますので、使用には注意が必要です。また、joblibパッケージでも学習結果のファイルへの格納と読出しが行えます。

APIの説明ページの各関数のパラメタ説明部分の右側にsourceと書かれたリンクがあります。このリンクをクリックすると、このAPIのソースコードが表示されます。中身がどうなっているのか知りたい人は、コードを読むことができます。なお、ソースコードは、Pythonで書かれています。

2.3. Examples

膨大な量の例題があります。こちらも、カテゴリに分かれていますので、探しやすいと思います。
当然、例題を実行するためのソースコードとその結果が載っています。ソースコード部分は、関数名などにリンクが張られているため、その関数が何をしているのか知りたい場合には、クリックするだけで、その関数の説明を表示することができるので、便利です。



こちらもカテゴリ分けされており、基本的にはアルゴリズムの種類で分かれています。

3. その他の注意点

ここでは、scikit-learnを使用する上で注意する必要がある点について説明します。

・scikit-learnでは、特に記述がない限り、入力データはfloat64に変換されます。
・モデルのコンストラクタで指定したハイパーパラメタは、sklearn.pipeline.Pipeline.set_paramsを使用して再設定することができます。
・fit関数を複数回呼び出した場合は、以前の学習データは上書きされます。
・scikit-learnは、Pythonの数学パッケージであるNumPy、SciPy、matplotlibと密接に連携して動作します。

言語としてのPythonについては、説明がありません。ただし、Pythonの使い方については参考になるソースがたくさん掲載されています。

弊社から

弊社では、機械学習関連の教育および開発も行っておりますので、お気軽にご相談ください。