分類問題(分類アルゴリズム)
今回は分類問題のうち「二値分類」をやります。二値分類とは「データを2つの分類先に分けること」です。
データの用意
練習として新しいサンプルデータを使います。
元データはこちら
タイムS=「上がり3F」+「-3Fタイム」
となっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#[タイムS,上がり3F,-3Fタイム,] array([[68.3, 33.9, 34.4], [68.3, 34.3, 34. ], [68.3, 34.7, 33.6], [68.4, 34.2, 34.2], [68.4, 34.4, 34. ], [68.6, 35.2, 33.4], [68.6, 34.5, 34.1], [68.6, 33.8, 34.8], [68.6, 34.1, 34.5], [68.6, 34.7, 33.9], [68.7, 35.3, 33.4], [68.8, 34.3, 34.5], [68.9, 35.2, 33.7], [68.9, 34. , 34.9], [68.9, 35. , 33.9], [69.2, 35. , 34.2], [69.3, 35.4, 33.9], [69.4, 35.1, 34.3]]) |
今回は「データを2種類に分ける」のが目的なので、どういうふうに分けるかを決めないといけません。そこで各競走馬の走るペースによって「前半型」と「後半型」に分けることにします。
そこでレースのタイムを前後半に分けて、前半のタイム(-3Fタイム)が早い方を「前半型」後半のタイム(上がり3F)が早い方を「後半型」と呼ぶこととします。
(便宜上、前後半のタイムが同値のときは「前半型」としています。)
そして以後「タイムS」は使わないので削除。それと「前半型」を「1」、「後半型」を「-1」という項目を追加します。
実際に使うデータはこうなりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#[上がり3F, -3Fタイム] #上がり3F >= -3Fタイム : 1 (前半型) #上がり3F < -3Fタイム : -1 (後半型) array([[33.9, 34.4, -1. ], [34.3, 34. , 1. ], [34.7, 33.6, 1. ], [34.2, 34.2, 1. ], #「0」だが便宜上「1」とする [34.4, 34. , 1. ], [35.2, 33.4, 1. ], [34.5, 34.1, 1. ], [33.8, 34.8, -1. ], [34.1, 34.5, -1. ], [34.7, 33.9, 1. ], [35.3, 33.4, 1. ], [34.3, 34.5, -1. ], [35.2, 33.7, 1. ], [34. , 34.9, -1. ], [35. , 33.9, 1. ], [35. , 34.2, 1. ], [35.4, 33.9, 1. ], [35.1, 34.3, 1. ]]) |
グラフの描画
プロットしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import numpy as np import matplotlib.pyplot as plt %matplotlib inline data = np.loadtxt('csvのパス', # 読み込むファイル delimiter=',', # 区切り文字を指定 skiprows=1 # 1行目のタイトルを読み飛ばす ) x = data[:,0:2] # 1~2列目の成分をxに代入 t = data[:,2] # 2列目の成分をtに代入 # y軸の範囲を設定 x1 = np.arange(0, 40) plt.xlabel("3F") plt.ylabel("-3F") # 分類ラベルが1のデータをドットでプロット plt.plot( x[t == 1, 0], x[t == 1, 1], 'o' ) # 分類ラベルが-1のデータをxでプロット plt.plot( x[t == -1, 0], x[t == -1, 1], 'x' ) # グラフを表示 plt.show() |
結果
(前半型「x」後半型「o」)
こうなりました。
(赤矢印が1着馬:3F「33.9」、-3F「34.4」)
まとめ
今回はここまで。
分類問題に入っていきたいところでしたが、参考にしている本のサンプルデータに競馬のデータを入れて試す作業がどうもうまくいかないため(理解不足?)次回からは先に理論から入って、実践をあとにしようと思います。特に数式の意味を説明できないのでどの記号にどの数値を入れるのかが一番のつまづきポイント。次回は理論に入っていきたいと思います。