まず、1つのデータまでの距離を2乗する
i 番目のデータの横・縦の位置を (xᵢ, yᵢ)、代表点の横・縦の位置を (pₓ, pᵧ) とします。
dᵢ は、この2点を結ぶ線の長さです。横のずれと縦のずれをそれぞれ2乗して足すと、斜めの線の長さの2乗になります。これは三平方の定理です。
点を動かして学ぶ、k-meansの入口
1個の代表点から、2個でデータを分担する考え方へ。点を動かしながら、k-meansの基本をたどります。
灰色の点1つが、データ1個です。全体を1つの位置で表すために置く青い点を、代表点と呼びます。この青い点を動かして、置き場所を考えます。
各データまでの距離をそれぞれ2乗して足した値が、2乗誤差(距離の2乗和)です。この値が小さくなる場所を探しましょう。
グラフの横軸:位置を記録した順番 →
青い点をドラッグして動かします。図をクリック・タップするか、位置のスライダーでも動かせます。
各データを同じ重みで扱います。横と縦は同じ目盛りです。数値は小数点以下2桁に丸めて表示しています。
「重心へ移動」で最小値を確かめたら、そこから少し動かしてみましょう。どの方向に動かしても、2乗誤差は増えます。
代表点は、置き場所を試している点。重心は、データの平均から決まる位置。代表点を重心に重ねたとき、全体とのずれを最も小さくできます。
ただし、データがばらついていれば、全部の線を同時に長さ0にはできません。だから、最小になっても誤差は0にはなりません。
デモで見た2乗誤差は、次の2つの計算を順番に行ったものです。
i 番目のデータの横・縦の位置を (xᵢ, yᵢ)、代表点の横・縦の位置を (pₓ, pᵧ) とします。
dᵢ は、この2点を結ぶ線の長さです。横のずれと縦のずれをそれぞれ2乗して足すと、斜めの線の長さの2乗になります。これは三平方の定理です。
データが n 個あれば、線も n 本あります。それぞれで計算した距離の2乗を足します。
先に各距離を2乗し、そのあとで合計する順番です。距離が2倍なら、その線から足される値は4倍になります。遠いデータとのずれが、大きく数えられる仕組みです。
データの個数を n、i 番目のデータの横・縦の位置を (xᵢ, yᵢ) とします。平均は「全部足して、個数で割る」計算です。横の平均を mₓ、縦の平均を mᵧ と書くと、次のようになります。
この点を m = (mₓ, mᵧ) とすると、どこに代表点 p を置いても、次の関係が成り立ちます。
‖p − m‖ は代表点から重心までの距離です。最後の項は必ず0以上で、代表点が重心に一致したときだけ0になります。だから、重心は距離の2乗和を最小にする唯一の位置です。
この関係は、データがどんな形に並んでいても成り立ちます。次の実験では、離れた2つのまとまりにも、この性質を使います。
横方向だけを考え、ずれを次のように分けて2乗します。
平均からのずれの和 ∑(xᵢ − mₓ) = 0 なので、中央の項は消えます。縦方向も同じように展開して足すと、上の式になります。
ここまでは、ひとまとまりのデータでした。まとまりが2つに離れていても、全体の重心1個で十分でしょうか。
次は、離れたデータで試そう ↓