情報領域演習第一:P演習

電気通信大学情報理工学域I類 (情報系)
2018年度後学期


[一覧に戻る]


課題D4

問題

観測データに対して直線を当てはめる,という状況はよく発生する.これは回帰分析と呼ばれるデータ解析手法に関係するが,その初歩をやってみよう.

1つのデータが2つの値 $x$, $y$ で表されるとし,$x$ が原因,$y$ がその結果であるような状況を考える.そのようなデータが複数ある場合,$i$ 番目のデータに対する2つの値は $x[i]$, $y[i]$ と表されるとする.データが $n$ 個あるならば,ここから,配列 xarr = [$x[0]$, $x[1]$, $x[2]$, ..., $x[n-1]$] と yarr = [$y[0]$, $y[1]$, $y[2]$, ..., $y[n-1]$] を作ることができる.このようなデータに対する回帰直線とは,$y = ax + b$ という方程式が表す直線で,その傾き $a$ と切片 $b$ が次の式で計算されるもののことである. \[ a = \dfrac{\displaystyle n \sum_{i=0}^{n-1} x[i]y[i] - \sum_{i=0}^{n-1}x[i] \sum_{i=0}^{n-1}y[i]} {\displaystyle n \sum_{i=0}^{n-1}x[i]^2 - \left(\sum_{i=0}^{n-1}x[i]\right)^2}, \] \[ b = \dfrac{\displaystyle \sum_{i=0}^{n-1}x[i]^2\sum_{i=0}^{n-1}y[i] - \sum_{i=0}^{n-1}x[i]y[i] \sum_{i=0}^{n-1}x[i]} {\displaystyle n \sum_{i=0}^{n-1}x[i]^2 - \left(\sum_{i=0}^{n-1}x[i]\right)^2}. \] データを表す配列 xarr と yarr が与えられたとき,そのデータに対する回帰直線の傾き a と切片 b を計算するメソッド regression(n, xarr, yarr) を作成せよ.

入力仕様

出力仕様

ヒント

Rubyのprintfにおいて,表示される数の小数点以下の桁数を指定するためには,「f」を用いる.例えば,
printf("%.3f", x)
とすれば,x を小数点以下第3位まで表示する.

irb> regression 3, [1.000, 2.000, 3.000], [2.000, 3.000, 4.000]
1.000 1.000
=> nil
irb> regression 5, [1.000, 2.000, 3.000, 4.000, 5.000], [1.000, 2.000, 1.300, 3.750, 2.250]
0.425 0.785
=> nil
irb> regression 5, [-3.000, -1.000, 0.000, 2.000, 4.000], [9.000, 1.000, 0.000, 4.000, 16.000]
1.096 5.562
=> nil

提出法

CED (CentOS) にて,プログラムを作成したディレクトリで以下を実行せよ.
% ~oa000833/enshu1p/checker_d4.rb ファイル名
「Submission successfully completed.」と表示されれば,提出が完了したことになる.


[一覧に戻る]


[Teaching Top] [Top]
okamotoy@uec.ac.jp