新年あけましておめでとうございます。
このブログは、株式会社ネットワーク応用通信研究所のメンバーが技術的な情報を発信するために立ち上げました。
筆者の思いつきではじめたので、とりあえず非公式という扱いです。
第一回は、Rubyによる重回帰分析について紹介します。
重回帰分析は、ある変数(目的変数)の値を、他の複数の変数(説明変数)の値から予測する方法です。
今回は、重回帰分析を使って、真・女神転生に登場する悪魔の「防御」パラメータの値を予測してみたいと思います。
真・女神転生では、悪魔は力・知・魔・体・速・運といった基本パラメータを持っており、これらに基づいて他のパラメータの値が決定されます。
例えば、「命中」パラメータは「(力 / 4) + 速」という計算式によって決定されます。
ところが、「攻撃」パラメータや「防御」パラメータの計算式については明らかになっていません。
そこで、重回帰分析を用いて、「防御」パラメータの値を予測します。
まず、こちらのスクリプト(Ruby 2.3以降でないと動作しません)で攻略サイトから全悪魔のデータをダウンロードし、JSON形式に変換します。
JSONデータは以下のような構造になっています。
次にSciRubyプロジェクトのStatsampleライブラリをインストールします。
これで準備は完了です。
Statsampleで重回帰分析を行うには、Statsample::Regression.multiple
メソッドを使用します。
第一引数には分析対象のデータ、第二引数には目的変数の名前を指定します。
分析対象のデータは、{目的変数名 => 値の配列, 説明変数名1 => 値の配列, 説明変数名2 => 値の配列, ...}
のような形式のハッシュを用意して、to_datasetメソッドを呼び出すことで得られます。
悪魔ではなく人間の場合、防御パラメータは「防具の防御力 + (体/ 2) + (速 / 2)」で決定されることがわかっているので、説明変数として体・速の二つを使ってみることにしましょう。
では、実際に実行してみましょう。
Equation=-12.946 + 3.208体 + 0.891速
という予測式が得られました。
例えば、妖魔ハヌマーン(体=15・速=26)にこの予測式を当てはめると防御パラメータの予測値は58.34となりますが、実際の値は60なので近い値です。
ただし、サンプルによっては大きく外れることもありますので、未知の悪魔に出会った場合には注意してください。