はじめに
scikit-learn
を触ってみる夏休みの自由研究第二弾です。第一弾はこちら 。相変わらず初心者的な内容ですがご容赦ください。
今回は地方大会の成績を元に1回戦の対戦結果を学習して2回戦の得点力を予測することを考えてみました。念願の機械学習です(やってみたかっただけ感満載でスミマセン)。
学習データ
前回使用した 地方大会の打撃成績 を元に、代表校ごとの初戦の組み合わせから 相手高校の投手成績 を学習データに組み合わせて、初戦の得点数を学習させてみることにしました。
作成した学習データが こちら 。49校なので盛岡大付が初戦の相手校として2回出てくることになりますね。
学習と予測
上記の通り、地方大会のデータを元に打撃成績と相手の投手成績を全て説明変数として学習させます。目的変数は甲子園初戦の得点数です。
学習アルゴリズムは 線形回帰
にしました。例のごとくあえて他を選ぶ知識がないので…
そして学習結果を検証するための予測データとして2回戦の組み合わせを調べて学習データと同様に こちら にまとめました 。
#coding:utf-8
import pandas as pd
import numpy as np
from sklearn import linear_model
# 初戦の結果を学習
df = pd.read_csv('round1-result-2016.csv')
X = df.drop(['県','県No','学校名','対戦校','得点'], axis=1)
Y = df['得点'].as_matrix()
clf = linear_model.LinearRegression()
clf.fit(X, Y)
# 2回戦の予測
df_round2 = pd.read_csv('round2-game-2016.csv')
X_round2 = df_round2.drop(['県','県No','学校名','対戦校'], axis=1)
round2_pred=clf.predict(X_round2)
print(round2_pred)
結果
県 | 学校名 | 対戦校 | 得点 |
---|---|---|---|
岩手 | 盛岡大付 | 創志学園 | 2.37607605 |
奈良 | 智弁学園 | 鳴門 | 3.62097786 |
徳島 | 鳴門 | 智弁学園 | 5.76513128 |
山梨 | 山梨学院 | いなべ総合 | 3.88857396 |
三重 | いなべ総合 | 山梨学院 | 5.36922697 |
茨城 | 常総学院 | 中京 | 5.14173416 |
岐阜 | 中京 | 常総学院 | 7.22823584 |
愛知 | 東邦 | 八戸学院光星 | 8.83172441 |
青森 | 八戸学院光星 | 東邦 | 1.28556647 |
神奈川 | 横浜 | 履正社 | 7.68159192 |
大阪 | 履正社 | 横浜 | 4.58766162 |
和歌山 | 市和歌山 | 日南学園 | 2.27939976 |
宮崎 | 日南学園 | 市和歌山 | 4.78286132 |
鹿児島 | 樟南 | 花咲徳栄 | -1.30671611 |
埼玉 | 花咲徳栄 | 樟南 | 1.90896096 |
広島 | 広島新庄 | 富山第一 | 1.28968031 |
富山 | 富山第一 | 広島新庄 | 2.03399291 |
これを書いた8/13時点で盛岡大府は予測と違いますが智弁と鳴門の結果がわりと当たってて若干驚きました。なんか1つマイナスの結果がでてますが…相手校の地方大会の失点と防御率が0だからだと思います。
あくまでデータサイエンス的な数値遊びですのであしからず。実際の対戦や選手に対して何かを訴えたり批判する意図は一切ありませんので誤解なきようお願いします。