ポケモンと回帰分析。
昔、ゲーム好きなやつが「ポケモンは属性値ですべて決まる」
属性値なんか知らずに、ただ自転車こいで、ただ伝説のポケモンを追いかけているだけの楽しみしかしていなかったから、そいつに「なんのポケモン使ってる?」と聞かれたときは、うまーく話をそらした記憶がある。そんな苦い記憶を思い出させるような、タイトル。
今回もSmart-Hintさまです。
いつもわかりやすい解説のほど、ありがとうございます。
今回やりたいこと
ポケモンの重さを予測したい
どうやって予測するのか
- 単回帰分析
- 重回帰分析
単回帰分析
単回帰分析とは
一つの変数で、ある数字を求める
(今回の場合で言うと、高さ→重さを求める)
手順
- データの確認
- データの下準備
- データの分割
- 高さと重さの散布図を描画
- 単回帰分析
高さと重さの散布図を描画
実装したコード
内容
poke_xに高さ、poke_yに重さのデータを入れる
↓
横軸に高さ、縦軸に重さを設定した散布図を描画
出力結果
単回帰分析
内容
得られた散布図をもとに単回帰分析を行う
実装したコード
from sklearn.linear_model import LinearRegression
import numpy as np
poke_x = np.array(poke_x).reshape(-1,1)
poke_y = np.array(poke_y).reshape(-1,1)
model_lr = LinearRegression()
model_lr.fit(poke_x, poke_y)
import matplotlib.pyplot as plt
import seaborn
plt.plot(poke_x, poke_y, 'o')
plt.plot(poke_x, model_lr.predict(poke_x), linestyle="solid")
plt.show()
print('モデル関数の回帰変数 w1: %.3f' %model_lr.coef_)
print('モデル関数の切片 w2: %.3f' %model_lr.intercept_)
print('y= %.3fx + %.3f' % (model_lr.coef_ , model_lr.intercept_))
print('決定係数 R^2: ', model_lr.score(poke_x, poke_y))
ポイント
・単回帰分析を行うために、データを学習用に変換する必要がある。
(シリーズ型→2次元配列)
まとめ
参考にさせていただいたサイトには、コードが書いていなかったので、手探りでなんとか単回帰分析に成功。ただ、最後に得られた散布図+直線を単回帰分析と言うのか、直線の数式(y=ax+b)を単回帰分析というのか、それともこの過程すべてを単回帰分析と言うのかわからずに、とりあえずそれっぽいことができた。今回は、手を動かすうえでは成功と言えるが、頭がついてきていないので、真の成功は次回に持ち越し。