Javaで重回帰分析したい
重回帰分析ならば、Excelでも十分できるんだけど、これをJava環境で行いたいという趣味的な内容です。
こちらと同じデータを使ってみます(手入力)
https://corvus-window.com/excel_multiple-regression-analysis/
arffデータならばこんな形になります。目的変数をlastにしました。train.arffなどととします。
@RELATION salary2
@ATTRIBUTE 年齢 numeric
@ATTRIBUTE 通勤時間 numeric
@ATTRIBUTE 扶養人数 numeric
@ATTRIBUTE 出身大学 numeric
@ATTRIBUTE 年収 numeric
@data
35,60,2,48,670
58,70,3,61,1200
40,45,0,52,680
38,45,2,55,820
24,30,0,58,510
27,55,0,61,550
49,80,3,44,890
30,60,0,45,480
53,70,1,50,730
25,80,1,47,430
コマンドラインで実行
Wekaは普通のリリース版で使えますが、これまでのようにmini-wekaを使ってみます。
java -cp mini-weka-3.9.15955.jar:. weka.classifiers.functions.LinearRegression -t train.arff
出力結果
年収 =
10.9962 * 年齢 +
84.6026 * 扶養人数 +
11.7295 * 出身大学 +
-433.3844
上記サイトとなんか違う・・・・。
ここでオプションを見ると、
-S <number of selection method>
Set the attribute selection method to use. 1 = None, 2 = Greedy.
(default 0 = M5' method)
というのが見つかりました。
このオプションを指定しないと、-S 0 と同じ扱いになり、自動的に項目選択モードのM5方式(表現が間違っているかもしれません)が使用されるということです。-S 2 は貪欲法。-S 1 は項目選択をしないようです。
これを参考に
java -cp mini-weka-3.9.15955.jar:. weka.classifiers.functions.LinearRegression -S 1 -t train.arff
とすると、
年収 =
11.533 * 年齢 +
-2.0274 * 通勤時間 +
94.0915 * 扶養人数 +
9.3459 * 出身大学 +
-220.303
となり、上記サイトと同じ結果が得られました。
※将来的には、M5と貪欲法ってのをマスターしたいです。