前回は、回帰直線を数学的に詳しく学びました。今回は前回の知識を使って、Java言語で回帰直線のグラフを描きましょう。Officeソフトで回帰直線を得ることと、Java言語のプログラムで回帰直線を得ることの比較は、電卓での計算と筆算での計算の比較に例えられます。2つの結果が等しい、あるいは非常に近ければ、それぞれの方法が正しく実行されたかどうかの確認になります。
サンプルのソースコードが少々長くなりますが、解答の必要な部分はわずかです。是非ともくじけずに取り組んでみてください。
問題 最小二乗法を用いて、回帰直線の定数を求め、データにフィットするグラフを描きましょう。
今回の問題で示すソースコードには、最小二乗法を計算する部分のコードが欠落しています。コードを補充して完成させてください。
できる限り短いコードにするために、GUIでプログラムを終了させるためのコードを含みません。Windows上で実行中ならコマンドプロンプトのウインドウをアクティブにし、CTRL+C[1]のキー操作でプログラムを終了する必要があります。その他のOS上で実行中なら、プロセスをkillして終了させてください。
今回読み込むデータは次のCSV[2]ファイルです。各行にひとつの座標値(x,y)が記述されています。このデータファイルをテキストエディタで作成して、Sample_RegLine.javaと同じディレクトリにファイル名"data001.csv"として保存してください。
コンパイル時には、ソースコードの5行目に示した-Xlint:uncheckedというオプション[3]を忘れずに付けてください。Java言語の古い規格を使用していますので、このオプション無しにはコンパイルが許可されません。コンパイルが許可されませんから、実行に必要なクラスファイルが作成されません。
正しくプログラムを作成したとしても、次のような警告を表示します。
今回のプログラムが正しく実行されると、次の出力と別ウインドウに表示されるグラフ(図61.1)を得ることができます。
「バッチジョブを~」はCTRL+Cで表示されますので、yキーを押し、エンターキーを打ってください。グラフが画面から消えて、プログラムが終了します。グラフ右上の×ボタンを押してもプログラムは終了しません。この出力は、第59回の図59.9でOfficeソフトを使った結果とまったく同じです。
それでは、以下に未完成のソースコードを示します。83行目からにコードを追加しましょう[4]。コードの足りないのは、最小二乗法を実行して回帰直線の定数を求めるメソッドです。
解説
問題 最小二乗法を用いて、回帰直線の定数を求め、データにフィットするグラフを描きましょう。
コードの不足していた部分を示します。いかがでしょう。前回までに学んだややこしい数式の羅列も、コードにしてしまうと、こんなにシンプルです。結局、肝心な部分はこれだけなのです。
今回はここまで
Java言語を使って回帰直線を得る実習は、首尾よくこなせたでしょうか。表示されたグラフは、Officeソフトで表示したグラフと一致したでしょうか。回帰直線の定数は正しかったでしょうか。Officeソフトで得た定数よりも、精度の高い値が得られたはずです。プログラミング言語を利用する価値は、ここにあります。市販のソフトウエアにできないところに「手を届かせる」ことができるのです。
お疲れ様でした。長いコードを打ち込むことは大変だったことでしょう。