Pythonで機械学習入門②教師なし学習(前編)



Pythonで教師なし学習ってどうやるのかな?

この記事では、Pythonや投資初心者でもできるように、機械学習の入門をレクチャーしていきます!

今回の記事は日本ディープラーニング協会(JDLA)様のG検定公式テキストを参考に作成しています!

加えて、記事中の説明として、こーじ(物理エンジンYouTuber)様の動画のリンクを貼らさせて頂いています。

(記事にでてくるコードは配布しております。まとめにあるリンクからダウンロードください。)

本記事は、全6回に渡って掲載される「Pythonで機械学習入門」シリーズの第2回になります!

このシリーズを読むとわかること

  • 機械学習の教師あり学習についてざっくり理解できる
  • 機械学習の教師なし学習についてざっくり理解できる
  • 機械学習の強化学習についてざっくり理解できる
  • 機械学習のニューラルネットワークについてざっくり理解できる
  • 機械学習の深層学習についてざっくり理解できる

機械学習について理解すれば、トレンドの技術である人工知能についてより正確な知識を身につけることができます!

それだけでなく、本記事ではPythonをつかい分析をするため プログラミングのスキルも磨けます!

第2回ではその中でも、

  • 教師なし学習をざっくり理解する
  • Pythonを用いて教師なし学習をおこなうデータを確認する

といったことをおこなっていきます!

それでは一緒にまなんでいきましょう!

教師なし学習をざっくり理解しよう!

生徒

第1回の教師あり学習と同様に、Pythonでコードを書く前に、教師なし学習について簡単に解説していきます!

教師なし学習を理解することで、あるECサイトを利用する顧客層がどういった人達なのかをわかったり、似たようなデータを一つにまとめたりすることができます!

加えて、教師なし学習はシリーズ終盤に学ぶディープラーニングにも組み込まれていますので、ここでしっかりと学習しておきましょう!

why
機械学習入門①をまだ見ていない方はこちら!

Pythonで機械学習入門①教師あり学習編

教師なし学習とは

教師なし学習とは
与えられたデータに出力がなく、データの構造や特徴そのものを求めるもの。

教師なし学習は、例えばECサイトの売上データから顧客にどんな特徴があるのか、といったデータそのものがもつ構造を把握する際に利用されます。

もう少し具体的に説明していきます。

今回の例の場合ですと、顧客データといっても、性別や年齢さらには購入履歴など様々です。

このとき、商品の購買意欲を向上させるためにどういったオススメすればいいのか、といったことが顧客データを利用する際に想定されます。

そこで、教師なし学習で大まかな顧客の特徴を掴み、特徴から基づいた戦略を思案することができるわけです!

教師あり学習との違い

第1回でも簡単に説明しましたが、教師あり学習との違いは、と出力(そこから割り出されるパターン)があるか否かになります。

教師なし学習は、データそのものの特徴や構造を対象にしていることに対して、教師あり学習はデータから予測値(回帰や分類)を求めていきます。

why
詳しい違いを知りたい方は機械学習入門①の「回帰と分類について」を見てね!

Pythonで機械学習入門①教師あり学習編

教師なし学習になんとなくわかったところで、具体的な手法にみていきましょう!

今回は数学的に厳密に理解していくことまではしませんので、どういったコンセプトでつくられた手法なのかをおさえていきましょう!

代表的な手法①-k-means法

まずは、k-means法について説明していきます!

k-means法は、ECサイトでユーザー情報に応じてオススメを出したりする際の分析などにつかわれます。

ファイナンスに限った話ですと、成長している企業の特徴と似ている企業を探し出すなんてこともできます!

k-means法とは
データをk個のグループに分け、元のデータからグループの構造を見つけだしまとめる手法。(ここでいうkは2 , 3 , 4…など整数です。)

このk個のkは自分で設定する値です。

また、グループのことを正確にはクラスタといいます!

そして、k-mean法などデータをいくつかにクラスタにわけることクラスタ分析(クラスタリング)といいます!

手順は以下の4つにて行われます。

  1. まずは適当に各データをk個のクラスタに振り分ける
  2. 各クラスタの重心を求める
  3. 求まったk個の重心と各データとの距離を求め、各データを最も距離が近い重心に対応するクラスタに振り分け直す
  4. 重心の位置が(ほぼ)変化しなくなるまで2, 3を繰り返す

この1~4を記事にて説明するよりも、物理エンジン(アルゴリズム)系ユーチューバーの「こーじ」様の動画の方が非常にわかりやすいのでぜひご覧ください!!

引用:アルゴリズムがデータを分ける様子を可視化した【K-means】【クラスタリング】

why
是非、他の動画も面白いのでみてみてね!

代表的な手法②-主成分分析(PCA)

つぎに、主成分分析について説明していきます!

主成分分析は、ある商品が売れたとき、多くの売れた要因をまとめたり、その売れた要因がどのくらい寄与(売上に貢献したのか)のかの割合を出す際につかわれます!

ファイナンスに限った話ですと、例えば日経平均を動かす要因で、どの業種が日経平均に影響を与えやすいのかを分析する際に用いられます!

主成分分析とは
相関性をもつ多数の特徴量から、相関性のない少ない特徴量へと次元削減する手法。

専門的な用語が多々ありますが、例を用いて説明します。

例えば、消費者がラーメン屋に求めるものは何か、という議題があるとします。(筆者はラーメンに精通しているわけではないので温かく見守ってください笑。)

このとき、みそ味である、卵が美味しいなど色々意見が出ると思いますが、大まかに3つのカテゴリーにわけられたとします。

  • 「出汁に拘っている・野菜が新鮮・麺がモチモチ」などの味や素材に関するもの
  • 「安い、値段の割に沢山食べられる、無料でトッピングがつく」などの値段に関するもの
  • 「接客態度が丁寧、待っている客の管理やテーブルへの誘導がスムーズ」といったラーメン以外の環境に関するもの

こうしたとき、ラーメン屋に求めるものは1「味・素材」, 2「値段」, 3「ラーメン以外の環境」という結論になりました。

このように、消費者がラーメン屋に求めるものというデータ群から、関係性(相関性)がありそうな多くのデータ(特徴量)を、相関性のない少ない特徴量へとまとめていく(次元削減)ことが主成分分析です!

また、3次元や4次元のデータを可視化するときに、2次元のデータにしx軸とy軸の2で描画するときにも用いられます。

 

このように、教師なし学習はデータの特徴や構造に対して対象を置かれていることが理解できたと思います!



    Pythonを用いて教師なし学習をおこなうデータを確認しよう!

    ロボット おもちゃ

    教師なし学習についてなんとなく理解したところで、実際にPythonをもちいて学んでいきましょう!

    今回は、2019年の日本プロ野球の投手の防御率ランキングのデータを用いて、特定の選手がどのクラスタに分類されるのかk-means法や主成分分析を用いてみていきます!

    (データは日本プロ野データFreak様より引用させて頂いています。 2019年全球団防御率ランキング

    今回は、まず分析するデータがどういったものなのか確認していくことを主に行っていきます!

    分析するデータを読みこむ

    まずは、下記のLINE@から「機械学習入門2_教師なし学習_前編」のファイルと「ML_data」をダウンロードします。

    メッセージにて、「機械学習」とお送りいただければダウンロードができます。

    友だち追加

    その後、ジュピターノートブックを使いファイルを読み込みます!

    フォルダ

    その後、ファイルを開き、以下のコードを実行します。

    python コード

    そして、今回求めたいデータを読み込ませます!(データの詳細は次の見出しにて説明します)

    python コード

    データを読み込むことができました!

    読み込んだデータの特徴を確認する

    読み込んだデータは、2019年の日本プロ野球の投手の防御率ランキングのデータです。

    今回のデータは規定投手回の1/2以上の選手のデータとなっています。

    加えて、防御率以外に、勝利数や奪三振数などのデータもあります。

    今回はそれぞれの指標についての説明は割愛させていただきますので、もし詳しい指標について知りたい方は右のサイトをご利用ください。野球用語集【ベースボールモンスター】

    まずは、データが何行(何人)あって、何列(投手の成績の特徴量の個数)あるか確認します!

    python コード

    今回のデータは63人の選手がいて、各選手に成績に対しての31個の特徴量があることがわかります。

    63人というサンプル数は少ない印象ですが、このまま続けたいと思います!

    次に今後k-means法をおこなう上で必要となっていく各データ(特徴量)の平均をみきます!

    (第2回でよりプログラミングに沿ったk-means法の説明をしていきます。)

    python コード

    これをみると、防御率が1試合あたり3.8点で、勝利数が7.1勝、敗北数が6.1敗…と確認ができます!

    ついでに、平均のデータが多くて見づらいかもしれませんので、防御率だけに絞って平均値をみていきます。

    python コード

    特徴を相関関係をみる

    データのさらに調査していくために、データ間で相関関係があるか簡単にみていきます。

    今回はペアワイズ散布図を作成してデータをさらに調査します。

    ペアワイズ散布図とは
    さまざまな列が他の列とどのように相関しているかを確認するために使われる散布図。

    今回は、奪三振や被安打数のような、試合数ごとによって左右されてしまう指標ではない、

    防御率、勝率、DIPSのみで比較していきます。

    ここで、野球マニアでないと聞き馴染みのないDIPSについてのみ説明します。

    DIPSとは
    できるだけ投手の能力のみで評価するために、主に投手の能力で数値ががきまる「奪三振数」「与四死球数」「被本塁打数」で投手の真の能力を測ろうとするもの

    具体的な計算式は省きますが、防御率や勝利率といった指標をDIPSでは用いらずに計算していることを抑えておきましょう!

    なぜなら、計算式に防御率や勝利率を用いた場合、明らかにデータ間で関係してしまうからです。

    ペアワイズ散布図を作成していきます。

    ここで、”防御率”や”勝率”という単語が漢字であり、pythonの描画ライブラリが漢字を受け付けないため、英語表記に名前を変化して描画します。

    python コード

    ペアワイズ散布図を描画します!

    python コード

    棒グラフのx軸がデータの値の目盛り(y軸が目盛りごとのデータ数が示しており)、散布図が2つのデータ間の相関関係を表しています。

    なんとなくですが、これをみると意外にもWinRate(勝率)とDefenssiveRate(防御率)に負の相関があるのではと推測できます。

    ただ、この場合その相関関係がどの程度正か負かはわかりません。

    これをよりよく視覚化するには、ヒートマップを作成していきます!

    ヒートマップとは
    行列の個々の値を、色や濃淡として表現した可視化グラフの一種。
    python コード ヒートマップ

    これをみると、確かにWinRate(勝率)とDefenssiveRate(防御率)に相関係数-0.45という負の相関があることがわかります。

    他方、DIPSとDefenssiveRate(防御率)に相関係数0.65という正の相関があることもわかります!

    このことから、データ間に関係性や特徴があり、データをクラスタにわけることができるのではと考えます。

    次回、実際にk-means法や主成分分析をもちいてみていきます!



    まとめ

    第2回では、

    • 教師なし学習をざっくり理解する
    • Pythonを用いて教師なし学習をおこなうデータを確認する

    といったことをおこなっていきました!

    第3回では、実際に実際にk-means法や主成分分析をおこない、教師なし学習を実践的に学んでいきます!

    記事にでてくるコードはLINE@にて配布をしております!

    ラインのメッセージ欄に「機械学習」とお送りいただければ、ダウンロードリンクを送付いたします!

    友だち追加

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA