2023 年度「データサイエンス基礎」 2023-05-30

§4.1 最小二乗法

データ (x1, y1), (x2, y2), (x3, y3), ..., (xN, yN) に対し、 それらの間に y = ax + b なる一次式の関係がありそうで、 それからのずれは誤差だとしたら、 誤差が最も小さくなる a と b の値は? という問題を解くのが最小二乗法である。 (一次関数以外の関係を想定する場合もある。)

ここでは、誤差 d を | yi - (axi + b) |2 の和と定義し、それを最小にするよう a, b を定めるものとする。 この問題は、未知数 a, b に関する平方完成をおこなうことで解ける。

やってみるが、この計算は後日、追ってみるのでもよい。 d = ∑( yi - (axi + b) )2 となる。 以下、∑ は i を 1 から N まで動かしてとるものとする。 d = ∑(yi2) + a2∑(xi2) + b2N - 2a∑(xiyi) + 2ab∑xi - 2b∑yi となる。ここで 求めるのは a と b であり、 ∑... はすべて実験データから出る定数である。 そこで ∑(yi2) = P, ∑(xi2) = Q, ∑(xiyi) = R, ∑xi = S, ∑yi = T とおくと d = P + Qa2 + Nb2 - 2Ra + 2Sab - 2Tb となる。 これを、まずは b は定数だと思って平方完成し、 続いてその定数項を b について平方完成すると d = Q(a+(Sb-R)/Q)2 + (QN-S2)/Q * (b+(SR-TQ)/(QN-S2))2 + 定数項、となる。 よって a = -(Sb-R)/Q, b = -(SR-TQ)/(QN-S2) で d は最小となる。 これらの a, b は、後者の式から b = (∑(xi2)∑yi - ∑(xiyi)∑xi) / (N∑(xi2) - (∑xi)2) となり、これを前者に代入することで a = (N∑(xiyi) - ∑xi∑yi) / (N∑(xi2) - (∑xi)2) となることがわかる。 ここで a, b の分母の N∑(xi2) - (∑xi)2 は xi の分散の N2 倍だから、 全ての xi が等しくない限り、正である。

sxy を §3.4 で出てきた共分散、 sx, sy を x, y の標準偏差、 mx, my を x, y の平均とするとき、 a = sxy / sx2, b = my - amx となる。 sxy/(sxsy) が相関係数だったから、 a は「相関係数 * (sy/sx)」とも書ける。 b は、直線 y = ax + b が (mx, my) を通るように決まる。

以下、a を「傾き」、b を「切片」と呼ぶ。

新規ファイル 230530.xlsx を作って、以下をおこなえ。

A 列 B 列を、LMS の data.xlsx の A 列 B 列からコピーせよ。 これを測定データとする。(それにしては桁数が多いが。) A 列と B 列の散布図を出せ。 その際、散布図のうち二番めのものを用いると、折れ線グラフのように点が曲線で結ばれる。 確認したらこのグラフは消す。 E1 に「=slope(b1:b25,a1:a25)」と打ち込め。傾きの値である。 E2 に「=intercept(b1:b25,a1:a25)」と打ち込め。切片の値である。 (英単語 intercept の意味はここでは「切片」である。)

C1 に =$e$1*a1 + $e$2 と打ち込み、C25 まで増やせ。 これは何を意味するか、考えよ。 A, B, C の三列を範囲して、さきほどのように散布図にせよ。 これで、一次関数によるデータの近似が、視覚的にも得られた。

保存し、この 230530.xlsx のみを LMS からではなくアカンサスのメッセージででもなく、メールで送れ。

送信アドレスに採点結果を返信する。

(最小二乗法については、GS 科目「論理学と数学の基礎(数学的発想法)」でもとりあげるようである。)

(興味のある者は、slope 関数や intercept 関数に頼らず、 自力でこれらの値を計算させてみよ。)

§4.2 一次関数以外での近似

データ xi, yi の間に y = be-ax の関係がありそうなとき。 両辺の自然対数をとると log(y) = log(b) - ax となり一次関数に帰着する。

正規分布に似た、 y = be-ax2 の関係がありそうなとき。 X = x2 と置き換えると y = be-aX となり、 上のケースに帰着できる。

§4.3 謝辞

今回のプリント作成にあたっては、 昨年度、小幡正雄先生が作られた、最小二乗法のプリントに教えられた点が多くあります。 ここの感謝の意を表します。

おまけ:きょうのデータの作り方の種明かし

A1 から A25 を =rand()*10+0.2 とし、 B1 を =0.7*a1+rand()*3+0.3 として B25 までのばしました。 こうやって作った 2 * 25 個のデータを D 列 E 列にコピーしましたが、 貼り付けのさいに「貼り付けのオプション」で「値」を選びました。 こうすると、値そのものがコピーされるので、F9 キーを押すなどしても、 もう値は変わらなくなります。

そして D 列 E 列を散布図にして確認ののち、 D, E 列を範囲指定した状態で「ホーム」タブの中の「編集」の中の「並べ替えとフィルター」。 その中の「ユーザー設定の並べ替え」を選び、D 列が昇順になるようにしました。

この D 列 E 列が data.xlsx の A 列 B 列です。

雑感

乱数で 1000 行を埋める実習がいくつもありました。お疲れさまでした。 でも、考えてみてください。 コンピュータがなくて、サイコロを何千回も振るとしたら、きっと手が痛くなります。 それよりは楽だった、と考えましょう。

数学や物理学の授業でも、質問をしましょう

この四回の実習では、みなさんから多くの質問が出ました。 数学や物理学の授業でも、質問をしましょう。 みなさんが入学試験を突破し、授業料を払ったのは、 先生方に質問をする権利を得るためだった、ともいえると思います。

「聞くは一時の恥、聞かぬは一生の恥」ということわざがありますが、 聞くのは恥でもなんでもありません。

また、授業中に質問することで、 授業時間を“奪って”しまったと考えることはありません。 質問は、ほかの履修者にとっても役立ちます。 ほかの人の質問を聞くことで、 自分では気づいていなかった視点から見直すことができるからです。


岩瀬順一