第1話 ∫ニョロっと伸びるはエネルギー、バネは答を知っている
2008/12/05
おっはよー、こんにちわー、こんばんわー!
PLAY:
最小二乗法の歌
(MP3 Download)
バネの力は二乗でたまる 二乗でたまるはエネルギー肩の凝らないリラックス それがいちばんいいかたち 自然のフシギは最小原理 バネは答を知っている 力をためるは積分計算 微分で答を見つけるの
回帰分析って何だろな?
回帰分析っていうのは、よーするに その線をずーっと延ばしてみれば、どこに届くか予測できるってわけ。 もちろん人間がグラフを見て、直感で「ここじゃー」ってな感じに線を引いてもいいんだけど、それを直感にたよらず、しっかりと計算で引こうっていうのが回帰分析なんだ。 一口にグラフっていったけど、回帰分析に使うグラフには「原因」と「結果」が入ってないといけません。 一番簡単なのは、横軸 x が原因で、縦軸 y が結果になってるグラフ。 たとえば x が「やりこみ時間」で、y が「経験値」だったら、「時間をかけるほど -> 経験値が上がる」っていう「原因->結果のストーリー」ができるでしょ。 そんな感じ。 今日は、回帰分析の中でも一番簡単な、X->Yのグラフに直線を引く単回帰分析(直線回帰)をやってみるよ。
回帰分析は輪ゴムとわりばしで
それじゃあ、さっそく回帰分析用のプログラムを用意しなきゃ・・・ 1.板の上にグラフを書いて、データをプロットします。 2.プロットしたデータに画びょうをさして、輪ゴムをひっかけちゃう。 3.輪ゴムにわりばしを通して・・・ 4.手を離せば、ほら、回帰分析のできあがり! 輪ゴムがひっぱる力のバランスをとって、わりばしが止まったところが「最もあてはまりのよい直線」ってわけ。 ねっ、パソコンよりも簡単でしょ。 回帰分析って、こういうことだったんです。
でも、この「直線あてはめマシーン」、簡単なだけにちょっぴりずるしちゃってるの。
バネのエネルギーは積分で
それじゃあ、バネに溜まったエネルギーって、どうやって計算したっけ。 どうして三角形の面積になるかっていうと、、、 最初のスタートの時点では、引っ張る力はゼロ。 1ミリの地点では、引っ張る力が1。 2ミリの地点では、引っ張る力が2。。 3ミリの地点では、引っ張る力が3。。。 そんなかんじに、1ミリずつ小さな階段を足し合わせていけば、ほとんど三角形といっしょになるでしょ。 あれ〜、これって、昔、学校で聞いたことがあるよーな気がするなー・・・(遠い目)。 そう、この「力を足し合わせる」計算のことを、学校では「積分」って呼んでるんだ。 記号に書くと
∫x dx = 1/2 x^2 + C
ってな感じ。( + C はバネに力がかかっていないときの長さ。この例だと C=0 になってます。)記号にすると一気に難易度アップしたみたいに見えるけど、これって要するに三角形の面積のこと。 あの∫うにょろ〜って記号を見ただけで、ニョロニョロ虫みたいに毛嫌いする人がいるけど、実は全然たいしたことないんだね。 ちなみに、ニョロニョロ虫にはインテグラル(Integral)っていうカッコイイ名前が付いてるぞ。 名前がカッコイイと、式までカッコよく見えちゃうから、ふしぎだニョロ。
{バネに溜まったエネルギー}
これを世間一般の記号で書けば、= {バネの力を積分したもの} = {三角形の面積} = 1/2 x {バネの引っ張る力} x {バネの長さ} = 1/2 x {バネの固さ} x {バネの長さ} x {バネの長さ}
E = 1/2 k X^2
ってなります。E : エネルギー k : バネの固さ X : バネの長さ この式の中で大事なのは、「エネルギーはバネの長さの二乗になっている」ってこと。 バネの固さとか、1/2 っていうのは、このさい無視しちゃってOK。 だって、バネの固さが違っても、最後にわりばしが止まる場所は同じでしょ。 エネルギーを最小にするっていう方法は、この二乗ってところから「最小二乗法」って呼ばれてまーす。
微分で探すわりばしの位置
さて、バネのことがわかったら、次はわりばしの位置にチャレンジしてみよっか。
y = a x + b
っていう形の式に書けるはず。a は直線の傾き、b は直線がスタートする位置(切片)。 この a と b が決まれば、わりばしの位置がわかっちゃう。 ってことは、a と b が最後に知りたい答になってるんだよ。 次のステップは、データの画びょうがささっている位置から、わりばしまでの長さ。 たとえば x = 20, y = 50 っていうデータから、わりばしまでの長さはどれだけかな? x = 20 のとき、わりばしの位置(yの値)は、
y = 20 a + b
だよね。なので、データからわりばしまで、バネの長さは
{バネの長さ} = {データの位置} - {わりばしの位置} = 50 - (20 a + b)
になるよ。同じことを、今度は記号で書いてみるね。 x = x1, y = y1 っていうデータがあったとして、そこからわりばしまでの長さは
{バネの長さ} = y1 - (x1 a + b)
バネのエネルギーは、バネの長さの二乗ってことで
{バネのエネルギー} = {y1 - (x1 a + b)} ^ 2
これが1個のデータについてのエネルギー。それじゃあ、データが10個あったら、どうなるんだろう。 そのときには、(x1, y1) (x2, y2) (x3, y3) ... (x10, y10) っていう10個の数字の組があって、似たよーな式が10個できちゃいます。 全エネルギーは、その10個の式をぜーんぶ合わせたもの。 つまり10本のバネのエネルギーを合わせたことになるよね。 式が10倍に増えても、中身は同じことの繰り返しだから、きまじめに全部書かなくってもいいんだよ。 こういうときに便利なのがΣ(シグマ)っていう記号。 Σは「同じ式を、中身の値だけ変えて、繰り返し足し合わせる」って意味なんだ。
{10本のバネのエネルギー}
ふぅっ、これでやっと全エネルギーの式ができました。= Σ[ {yi - (xi a + b)} ^ 2 ] (i=1〜10) = Σ[ {yi - xi a - b} ^ 2 ] なんだかすごく複雑な式だにゃあ・・・ でも、めげずによーく見てみると、これって a の二次式になってることに気付いたかな? 二次式って、放物線をひっくり返したおわん型になってるでしょ。 だから、そのおわんの谷底が知りたかった答になってるの。 b についてもやっぱり二次式だから、おわんの谷底に答があるんだね。 さて、おわんの谷底になっている、エネルギーが一番小さくなるような a と b を探すには、どおすればいいのかなー? そんなとき、とっても強力な常套手段は「微分する」ってこと。 谷底は平らになってるから、傾きがゼロ。 つまり、微分してゼロになるところがエネルギー最小ポイントなのです。 あれっ、そういえばどこかで、そんな話を聞いたことがあるよーな、ないよーな・・・(はるかに遠い目)。 でしょ、でしょ。 覚えてる人は記憶をたよりに、教わったことがない人は努力と根性で、エネルギーの式を微分しちゃおう。 {10本のバネのエネルギー}を a で微分すると、
Σ[ {yi - xi a - b} ^ 2 ] / ∂a
{10本のバネのエネルギー}を b で微分すると、= 2 Σ[ xi ( xi a + b - yi ) ]
Σ[ {yi - xi a - b} ^ 2 ] / ∂b
a と b、それぞれの微分結果がゼロになる答を探していたんだから、イコールゼロ(= 0)ってすると、2本の式が出てくるよ。
= 2 Σ[ b + xi a - yi ]
2 Σ[ xi ( xi a + b - yi ) ] = 0
この2つの連立方程式を、すごい努力と根性で解くと、知りたかった答の a と b が出てくるんだ。2 Σ[ b + xi a - yi ] = 0 でも、努力と根性は最近あんまり流行ってないみたいだから、ワープして一気に答えにいっちゃえ。 (努力と根性が好きな頭脳派体育会系?!は、下の方の計算を見てね。)
直線の傾き : a = Σ[ (xi - x~)(yi - y~) ] / Σ[ (xi - x~)^2 ]
これが直線回帰の公式。直線の切片 : b = y~ - a x~ xi : 個々のデータの x 値 yi : 個々のデータの y 値 x~ : x の平均値 y~ : y の平均値 パソコンのソフトなんかは、実はこの「答の公式」を実行しているだけなんだ。
試しに使ってみよう
せっかく出した公式なんだから、試しに使ってみよっか。
{xの平均値} x~ = (3 + 5 + 8 + 17) / 4 = 8.25 {yの平均値} y~ = (200 + 400 + 720 + 850) / 4 = 542.5 Σ(xi - x~)(yi - y~) = (3 - 8.25)(200 - 542.5) + (5 - 8.25)(400 - 542.5) + (8 - 8.25)(720 - 542.5) + (17 - 8.25)(850 - 542.5) = 4907.5 Σ[ (xi - x~)^2 ] = (3 - 8.25)^2 + (5 - 8.25)^2 + (8 - 8.25)^2 + (17 - 8.25)^2 = 114.75 {傾き} a = 4907.5 / 114.75 = 42.77 {切片} b = 542.5 - 42.77 * 8.25 = 189.65 求める回帰直線の式は
y = 42.77 x + 189.65
この調子で3日間寝ずに72時間やりこんだら、経験値はy = 42.77 * 72 + 189.65 = 3269.09 と予想されるんだよねぇ・・・ やりすぎに注意! それじゃ、まったね〜!
努力と根性で解く わりばし計算
{10本のバネのエネルギー}を a で微分すると、
a = Σ[ (xi - x~)(yi - y~) ] / Σ[ (xi - x~)^2 ]
b = y~ - a x~ |