機械学習記6日目 ~ 機械学習ライブラリ(scikit-learn)
〇ひとこと
今日は引っ越し(部屋替え)があり、早朝から大忙しでした。なんと、午後9時の段階で進捗0(ゼロ)。 「もう、今日は機械学習の勉強できないかな~」 しかし、勉強は毎日続けないと意味がない!(「継続は力なり」とも言いますし.....)
今日から機械学習ライブラリの勉強に入っていきます。まず、scikit-learn(サイキットラーン)について調べていきたいと思います。
■scikit-learn(サイキット・ラーン)
scikit-learnとは、オープンソース(BSDライセンス)のライブラリで、機械学習に必要な回帰、分類、クラスタリングなどのアルゴリズムを備えています。また、Pythonの数値計算ライブラリであるNumPyやSciPyを内部で利用しています。
うっっ。まさかの全部英語。
気を取り直して、ここでもう一度、機械学習の種類をおさらいしておきます。機械学習の手法は、大きく分けると次の種類があります。
教師あり学習の特徴は、学習データにラベルがついていることです。この正解付きデータを元に、データの特徴、パターンを学習します。そして、正解ラベルのないデータに対して、そのデータがどの正解ラベルと一致するかを予測します。
教師あり学習は、さらに正解ラベルの種類によって「回帰」(regression)と分類(classification)に分けられます。
教師なし学習は、正解ラベルのないデータに対して、特徴や共通点、パターンなどを発見する手法です。正解ラベルがないので、学習データをそろえる手間は少なくなりますが、どのような特徴やパターンが導き出されるかは、やってみなければわからないという問題があります。
教師なし学習の手法には「クラスタリング」(clustering)や「次元圧縮(dimentionaliry reduction)などがあります。
▶強化学習
機械学習には「教師あり学習」「教師なし学習」の、どちらにも分けることができない手法も登場しています。例えば、「強化学習」と呼ばれる手法では、行動した結果に応じて報酬が与えられるようにすることで、徐々により良い行動へと進むように学習します。
scikit-learnには、機械学習アルゴリズムが数多く実装されていますが、大まかに次の4つのグループに分けることができます。
●回帰(regression)
実効値をデータで学習し、実効値を予測します。scikit-learnが搭載するアルゴリズムには、SGD回帰、LASSO回帰などがあります。
●分類(classification)
正解ラベルとそのデータを学習し、データに対してのラベルを予測します。scikit-learnが搭載するアルゴリズムには、カーネル近似、k近傍法などがあります。
●クラスタリング(clustering)
データの似ている部分をグループにして、データの特徴やパターンを発見します。scikit-learnが搭載するアルゴリズムには、K平均法、スペクトラルクラスタリングなどがあります。
●次元圧縮(dimensionality reduction)
データの次元を削減して、固有の構造を見つけ出す方法です。または、他の手法の入力に利用したりします。scikit-learnが搭載するアルゴリズムには、主成分分析(PCA)、カーネルPCAなどがあります。
▶どのアルゴリズムが最適か
このように、scikit-learnには多くのアルゴリズムが実装されています。実際には、上記に掲載したアルゴリズムの倍以上あります。これだけ多いと、最適なアルゴリズムをサーチしている間に心をポッキリ折られてしまいますね? そんな我々を救ってくれる図がscikit-learn公式サイトにあります。(図2参照:http://scikit-learn.org)
このマップは、質問にYes , No と回答していくと、最適な機械学習アルゴリズムへたどり着くチャートです。
例えば、「START」➡「50個以上のサンプル(学習データ)がありますか?」という質問に対して、「NO」なら、「もっと学習データを用意してください」と怒られます。
「カテゴリ予測ですか?」という質問に「YES」と答えると、「学習データにラベルがついていますか?」という質問に進み、「Yes」なら「教師あり学習アルゴリズムの分類グループへ」、「NO」なら「教師なしアルゴリズムのクラスタリングループ」へ進みます。
もっとも、最適なアルゴリズム(を実装したクラス)がわかっても、まだどうやって利用すればいいのかわかりません。そこで本格的な機械学習アルゴリズムへ進む前に、scikit-learnの機械学習アルゴリズムの中でも、最も単純だと言われている回帰(regression)アルゴリズムを試してみたいと思います。