この記事では、Pythonや投資初心者でもできるように、機械学習の入門をレクチャーしていきます!
今回の記事は日本ディープラーニング協会(JDLA)様のG検定公式テキストを参考に作成しています!
加えて、記事中の説明として、こーじ(物理エンジンYouTuber)様の動画のリンクを貼らさせて頂いています。
(記事にでてくるコードは配布しております。まとめにあるリンクからダウンロードください。)
本記事は、全6回に渡って掲載される「Pythonで機械学習入門」シリーズの第3回になります!
機械学習について理解すれば、トレンドの技術である人工知能についてより正確な知識を身につけることができます!
それだけでなく、本記事ではPythonをつかい分析をするため プログラミングのスキルも磨けます!
第2回ではその中でも、
- 教師なし学習をおこない、データがどのクラスタに分類されているか確認する
- 教師あり学習をおこない、DIPSから防御率を予測する
といったことをおこなっていきます!
それでは一緒にまなんでいきましょう!
Pythonで教師なし学習をおこない、データがどのクラスタに分類されているか確認しよう!

第2回の続きからおこなっていきます!
今回は、実際にk-means法や主成分分析を使用していきます!


前回と同様に、2019年の日本プロ野球の投手の防御率ランキングのデータを用いて分析していきます!(データは日本プロ野データFreak様より引用させて頂いています。 2019年全球団防御率ランキング )
分析するデータを読みこむ
まずは、下記のLINE@から「機械学習入門2_教師なし学習_後編」のファイルと「ML_data」をダウンロードします。
メッセージにて、「機械学習」とお送りいただければダウンロードができます。

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

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

分析するデータを読みこむ
次に、k-means法をもちいて、て試しに4つの選手のクラスターを作成し、どの選手が最も類似しているかを分析していきます!
実際にk-meansのモデルを作成する前に、k-meansのプログラミングの流れを説明していきます。
- 平均となるk個の点をランダムに初期化する
- 各データを最も近い平均に分類し、平均の座標を更新する
- このプロセスを所定の回数繰り返し、最後にクラスターを作成する
今回流れを理解していなくてもk-mean法を行えますが、プログラムの中身を知ったほうが、どのようにkグループに分類するか理解できるのではと思い、ざっと説明しています!
では実際にk個のグループに分類していきましょう!
まず、k-means法を使うためにKMeanモデルを作成しkmeans_modelという変数に格納します。
今回は、4つのクラスタを作成するように設定していきます!
次に、データをクリーンアップする必要があるため、数値データのみを取得し、データが欠落している列を削除して、good_columnsという変数に格納します。
次に、新しいデータ「good_columns」でモデルをトレーニングさせます。
このトレーニングのさいに、先ほど話した①~③の流れをおこなっています!(笑)
ちなみにですが、①~③の流れにかんしては、「こーじ」様の動画の1:06~をみると非常に理解が深まります!
引用:アルゴリズムがデータを分ける様子を可視化した【K-means】【クラスタリング】
トレーニングが完了すると、モデルからラベルを取得して、labelsという変数に格納させ出力させていきます!



選手ごとにラベルを出力させることができました!
今回は4つのクラスターに分類しているため、ラベルは0, 1, 2, 3のクラスタになります!
主成分分析をもちいてデータを可視化させる
先ほど、4クラスタに選手を分類させましたが、このデータを視覚化したいので、選手をクラスター別にプロットします。
データを可視化させるために、主成分分析(PCA)を使用して、データを2次元にしてからプロットしていきます!

主成分分析をもちいて、日本プロ野球の投手をk = 4のクラスターでわけてプロットさせることができました!
ちなみにですが、プロットされたデータは以下の通りです。

特定の選手がどのクラスタに分類されるのか確認する
これらの4つのクラスターから、特定の選手がどのクラスタに分類されるのか確認していきまます!
今回は、防御率ランキングのTOP3の選手達がどのクラスタに分類されるのかをみます!
3人の選手のデータフレームそれぞれを変数に格納していきます。

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

結果をみると、それぞれの選手が別のクラスタに分類されていることがわかります!
つまり、防御率がクラスタを作成する際の重要な要素ではないことがわかります!
教師あり学習をおこない、DIPSから防御率を予測しよう!

ここでは、第2回の統計結果より、DIPSと防御率の間に正の相関があったので、試しにDIPSもとに選手ごとの防御率の予測値を出力したいと思います!
この時、防御率の予測値を出力する方法は、教師あり学習の回帰が用いられます!
理由としては、DIPSと防御率が比例の関係にあり、 Y=AX+B というような、売連続する値を予測するのに適しているためです!
実際に復習も込めて学んでいきましょう!


線形回帰モデルを作成し予測をする
まずは、データを80%のトレーニングと20%のテストに分割し、訓練データとテストデータを作成していきます。

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

予測と実際の値を出力しましたが、モデルは値を厳密に予測しているようには見えないですね…!
決定係数や平均二乗誤差を確認する
最後に、この線形回帰モデルの決定係数や平均二乗誤差を確認し、モデルの当てはまりの良さをみていきます!

決定係数は1.0に近いほど良いですが、0.398と出力。
平均二乗誤差は0に近いほど良いですが。0.62と出力。
なんとも評価しづらい結果となりましたね。
まとめ
第2回では、
- 教師なし学習をおこない、データがどのクラスタに分類されているか確認する
- 教師あり学習をおこない、DIPSから防御率を予測する
といったことをおこなっていきました!
これにて教師なし学習は終了です!
次回の第4回では、強化学習について学んでいきます!
記事にでてくるコードはLINE@にて配布をしております!
ラインのメッセージ欄に「機械学習」とお送りいただければ、ダウンロードリンクを送付いたします!
