Pythonで機械学習入門③教師なし学習(後編)



Pythonで教師なし学習のk-means法や主成分分析ってどうやるのかな?

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

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

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

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

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

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

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

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

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

第2回ではその中でも、

  • 教師なし学習をおこない、データがどのクラスタに分類されているか確認する
  • 教師あり学習をおこない、DIPSから防御率を予測する

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

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

Pythonで教師なし学習をおこない、データがどのクラスタに分類されているか確認しよう!

人形 パソコン

第2回の続きからおこなっていきます!

今回は、実際にk-means法や主成分分析を使用していきます!

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

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

前回と同様に、2019年の日本プロ野球の投手の防御率ランキングのデータを用いて分析していきます!(データは日本プロ野データFreak様より引用させて頂いています。 2019年全球団防御率ランキング

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

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

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

友だち追加

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

python フォルダ

その後、ファイルを開き、前回と同様のデータを読み込ませます!

python コード

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

次に、k-means法をもちいて、て試しに4つの選手のクラスターを作成し、どの選手が最も類似しているかを分析していきます!

実際にk-meansのモデルを作成する前に、k-meansのプログラミングの流れを説明していきます。

  1. 平均となるk個の点をランダムに初期化する
  2. 各データを最も近い平均に分類し、平均の座標を更新する
  3. このプロセスを所定の回数繰り返し、最後にクラスターを作成する

今回流れを理解していなくてもk-mean法を行えますが、プログラムの中身を知ったほうが、どのようにkグループに分類するか理解できるのではと思い、ざっと説明しています!

では実際にk個のグループに分類していきましょう!

まず、k-means法を使うためにKMeanモデルを作成しkmeans_modelという変数に格納します。

今回は、4つのクラスタを作成するように設定していきます!

次に、データをクリーンアップする必要があるため、数値データのみを取得し、データが欠落している列を削除して、good_columnsという変数に格納します。

次に、新しいデータ「good_columns」でモデルをトレーニングさせます。

このトレーニングのさいに、先ほど話した①~③の流れをおこなっています!(笑)

ちなみにですが、①~③の流れにかんしては、「こーじ」様の動画の1:06~をみると非常に理解が深まります!

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

トレーニングが完了すると、モデルからラベルを取得して、labelsという変数に格納させ出力させていきます!

why
トレーニングとは、「学習させる」という意味だよ!

python コード

選手ごとにラベルを出力させることができました!

今回は4つのクラスターに分類しているため、ラベルは0, 1, 2, 3のクラスタになります!

主成分分析をもちいてデータを可視化させる

先ほど、4クラスタに選手を分類させましたが、このデータを視覚化したいので、選手をクラスター別にプロットします。

データを可視化させるために、主成分分析(PCA)を使用して、データを2次元にしてからプロットしていきます!

python コード

主成分分析をもちいて、日本プロ野球の投手をk = 4のクラスターでわけてプロットさせることができました!

ちなみにですが、プロットされたデータは以下の通りです。

python コード

特定の選手がどのクラスタに分類されるのか確認する

これらの4つのクラスターから、特定の選手がどのクラスタに分類されるのか確認していきまます!

今回は、防御率ランキングのTOP3の選手達がどのクラスタに分類されるのかをみます!

3人の選手のデータフレームそれぞれを変数に格納していきます。

python コード

その後、データフレームをリスト型にし、それぞれの選手がどのクラスタ分類されるのかを予測していきます!

python コード

結果をみると、それぞれの選手が別のクラスタに分類されていることがわかります!

つまり、防御率がクラスタを作成する際の重要な要素ではないことがわかります!

3人がそれぞれの別々のクラスタに属しているのは意外だね!



    教師あり学習をおこない、DIPSから防御率を予測しよう!

    ピッチャー

    ここでは、第2回の統計結果より、DIPSと防御率の間に正の相関があったので、試しにDIPSもとに選手ごとの防御率の予測値を出力したいと思います!

    この時、防御率の予測値を出力する方法は、教師あり学習の回帰が用いられます!

    理由としては、DIPSと防御率が比例の関係にあり、 Y=AX+B というような、売連続する値を予測するのに適しているためです!

    実際に復習も込めて学んでいきましょう!

    why
    教師あり学習の回帰についてはこちら!

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

    線形回帰モデルを作成し予測をする

    まずは、データを80%のトレーニングと20%のテストに分割し、訓練データとテストデータを作成していきます。

    python コード

    次に、回帰の手法の1つである、線形回帰モデルを使用して予測を行い、テストデータセットと実際の値に基づいて予測を出力します!

    python コード

    予測と実際の値を出力しましたが、モデルは値を厳密に予測しているようには見えないですね…!

    決定係数や平均二乗誤差を確認する

    最後に、この線形回帰モデルの決定係数や平均二乗誤差を確認し、モデルの当てはまりの良さをみていきます!

    決定係数とは
    使用したモデルが、予測するデータをどのくらい説明できているかを示す数値。
    平均二乗誤差とは
    モデルによって作成された回帰直線に対し、実際の点(データ)の一つ一つがどれだけ近いかを示す数値。
    python コード

    決定係数は1.0に近いほど良いですが、0.398と出力。

    平均二乗誤差は0に近いほど良いですが。0.62と出力。

    なんとも評価しづらい結果となりましたね。



    まとめ

    第2回では、

    • 教師なし学習をおこない、データがどのクラスタに分類されているか確認する
    • 教師あり学習をおこない、DIPSから防御率を予測する

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

    これにて教師なし学習は終了です!

    次回の第4回では、強化学習について学んでいきます!

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

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

    友だち追加

    コメントを残す

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

    CAPTCHA