/【機械学習入門|Python|scikit-learn】結局何ができる?cheat-sheetから解説してみる篇2017.11.08【機械学習入門|Python|scikit-learn】結局何ができる?cheat-sheetから解説してみる篇TweetPocketはじめにこんにちは、岩橋です。今回から複数回に渡って、Python機械学習ライブラリscikit-learnのcheat-sheetを解説してみたいと思います。筆者が機械学習を勉強し始めた際、ニューラルネットワーク・サポートベクターマシン・ランダムフォレストなど...アルゴリズムばかりが先に情報として溢れていて「機械学習」を俯瞰して体系的に見ることが難しい状況でした。結局何ができるの?...そんな時に出会ったのが、この「cheat-sheet」でした。=主成分分析の4つの目的の達成の為に使用されること、そしてその目的と状況に応じてアルゴリズムが決定されることがわかります。この4つの目的を組み合わせることで、あらゆることを可能にするのが「機械学習」となります。第1回では、cheat-sheetの解説と少し実践もしてみたいと思います。最終的には今回紹介する全てのアルゴリズムを実践したいと思っています...汗。解説classification(識別:教師あり学習)◉ざっくり言うと:『特徴』と『グループ』のデータセットを教師学習とし、グループが分からない『特徴』データを入力した場合に『グループ』を識別。・教師学習用のデータセットが100,000以上あるとき・LinearSVC識別がうまくいかない(非線形での識別が必要な)とき・サンプルデータセットがテキストデータであるときex)迷惑メールかそうでないかの識別などが可能。regression(回帰:教師あり学習)◉ざっくり言うと:『手掛かり』と『答え』のデータセットを教師学習とし、答えが分からない『手掛かり』データを入力した場合に『答え』を予測(数値から数値を予測)。データセットが100,000以上あるとき・全ての特徴量が重要でない(重要な特徴の考察をしたい)ときex)*1の場合、シワの数が重要、身長と体重は重要でないというような考察が可能。データセットが100,000以上あるとき・全ての特徴量が重要であるとき・Ridge回帰、LinesarSVR回帰がうまくいかない(非線形での回帰が必要な)ときclustering(分類:教師なし学習)◉ざっくり言うと:漠然とした『特徴』のデータセットをパターン(似ている・近しい特徴)を見つけて分類(塊化)。簡単に分類できなさそうなものについて『グループ』を定義しやすくする為の手段。etc)の粒子をいくつかの塊に分類。etc)をいくつかの塊に分類。reduction(次元削減,主成分分析:教師なし学習)◉ざっくり言うと:データのばらつきが大きい部分に着目し、逆にばらつきが小さい部分を無視するような視点に変換することで、データ圧縮(次元削減)や主成分分析を実施する手段。3次元を2次元に落とし込み状況を把握しやすくするという点で写真を撮り・写真から判断するという行為に似ている。◉こんなイメージで使われる:・画像などの大きいデータの次元を削減。・データセットの構造が非線形である・対象のデータセットが100,000以上あるとき・IsomapPCA、SpectralEmbeddingPCAがうまくいかないとき実践!classification(識別:教師あり学習)をやってみたそれでは、classificationの【SGD識別】アルゴリズムを使った実践していきます。今回は上記アルゴリズムを使って、アヤメ(花)の「種類」をその「花びらの長さ」と「がくの長さ」から識別してみたいと思います。Pythonで機械学習環境を構築1「Anaconda」をPCにインストールAnacondaはPythonと機械学習でよく使うライブラリを、まとめてインストールしてくれます。notebookはpythonの実行環境の一つです。使用するライブラリをインポートしていきます。次にデータセットを読み込みます。機械学習を勉強していく上でサンプルデータは必要不可欠です。以下は筆者がよく使うサイトで様々なサンプルデータを提供してくれます。今回もこちらからサンプルデータを借りることにします。header=None)念の為データの中身を確認しましょう。・petal-length=花びらの長さ・sepal-length=がくの長さを使用します。'sepal-length']]次にデータの標準化です。このままSGDアルゴリズムを用いて識別することも可能ですが、標準化することで精度の高い予測が可能になります。データセットは、次元によって数値の単位がバラバラであったり、大きさが極端に異なったりする場合がよくあります。出てしまうこともあります。そこで使用するデータセットの各次元のスケールを揃えてあげることで、前述のようなリスクを防ぐことができます。これを標準化と言います。2)次に【SGD識別】アルゴリズムの準備をします。その際に損失計算に使われる関数を指定します。今回はヒンジ損失関数を使用します。目的関数)というものがあります。実データと予測データの差を損失といい、これを定義するロジックを損失関数といいます。教師あり学習の多くのアルゴリズムは、この損失を最小にするような予測データを出力できるように、内部の係数を動的に調整していきます。損失はアルゴリズムが予測する為に使う目印と言って良いかもしれません。#ヒンジ損失関数を指定データセットを学習データセットとテスト(予測実施)データセットに分割します。今回は90%(135セット)を学習データ、10%(15セット)をテストデータとします。ds_train_label)#予測実行pre=clf_result.predict(ds_test)予測が完了しました。実際の「class」と予測した「class-predict」を比較してみましょう。dtype=object)df_result['class']=ds_test_label.reset_index(drop=True)df_result['class-predict']=prepd.DataFrame(df_result)一行目のみ不一致でそれ以外は一致しました。pre)print(ac_score)0.933333333333(約93%で予測成功)という結果になりました。花びらの長さ・がくの長さ)とでプロットしデータ構造を把握してアルゴリズムを選定していくことになります。次回は実践に比重を置いたブログにしていきたいと思います。冒頭でも言いましたが、最終的には今回紹介した全てのアルゴリズムを実践することが目標です。最近だと話題のニューラルネットワークアルゴリズムも使えるようになったようですね。引き続き頑張っていきたいと思います...汗。ご清覧頂きありがとうございました。Parkでは一緒に技術のウエディングパークを創っていくエンジニアを募集しています。興味のある方はぜひ一度気軽にオフィスに遊びにきてください。機械学習SNSでもご購読できます。