機械学習記6日目 ~ 機械学習ライブラリ(scikit-learn)

〇ひとこと

 今日は引っ越し(部屋替え)があり、早朝から大忙しでした。なんと、午後9時の段階で進捗0(ゼロ)。 「もう、今日は機械学習の勉強できないかな~」 しかし、勉強は毎日続けないと意味がない!(「継続は力なり」とも言いますし.....)

 

 今日から機械学習ライブラリの勉強に入っていきます。まず、scikit-learn(サイキットラーン)について調べていきたいと思います。

 

■scikit-learn(サイキット・ラーン)

 scikit-learnとは、オープンソース(BSDライセンス)のライブラリで、機械学習に必要な回帰、分類、クラスタリングなどのアルゴリズムを備えています。また、Python数値計算ライブラリであるNumPyやSciPyを内部で利用しています。

 

f:id:hackU0001:20190225112633p:plain

図1.scikit-learn公式サイト

 

うっっ。まさかの全部英語。
 

気を取り直して、ここでもう一度、機械学習の種類をおさらいしておきます。機械学習の手法は、大きく分けると次の種類があります。

 

教師あり学習

 教師あり学習の特徴は、学習データにラベルがついていることです。この正解付きデータを元に、データの特徴、パターンを学習します。そして、正解ラベルのないデータに対して、そのデータがどの正解ラベルと一致するかを予測します。

 教師あり学習は、さらに正解ラベルの種類によって「回帰」(regression)と分類(classification)に分けられます。

 

教師なし学習

 教師なし学習は、正解ラベルのないデータに対して、特徴や共通点、パターンなどを発見する手法です。正解ラベルがないので、学習データをそろえる手間は少なくなりますが、どのような特徴やパターンが導き出されるかは、やってみなければわからないという問題があります。

 教師なし学習の手法には「クラスタリング」(clustering)や「次元圧縮(dimentionaliry reduction)などがあります。

 

 

強化学習

 機械学習には「教師あり学習」「教師なし学習」の、どちらにも分けることができない手法も登場しています。例えば、「強化学習」と呼ばれる手法では、行動した結果に応じて報酬が与えられるようにすることで、徐々により良い行動へと進むように学習します。

 

▶scikit-learnの機械学習アルゴリズム

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)

 

 

f:id:hackU0001:20190225113906p:plain

図2.アルゴリズムマップ

 

このマップは、質問にYes , No と回答していくと、最適な機械学習アルゴリズムへたどり着くチャートです。

例えば、「START」➡「50個以上のサンプル(学習データ)がありますか?」という質問に対して、「NO」なら、「もっと学習データを用意してください」と怒られます。

「カテゴリ予測ですか?」という質問に「YES」と答えると、「学習データにラベルがついていますか?」という質問に進み、「Yes」なら「教師あり学習アルゴリズムの分類グループへ」、「NO」なら「教師なしアルゴリズムクラスタリングループ」へ進みます。

 

 もっとも、最適なアルゴリズム(を実装したクラス)がわかっても、まだどうやって利用すればいいのかわかりません。そこで本格的な機械学習アルゴリズムへ進む前に、scikit-learnの機械学習アルゴリズムの中でも、最も単純だと言われている回帰(regression)アルゴリズムを試してみたいと思います。