Model Based k-Meansで直線への割付を推定

やったことを,とりあえずグラフを載せます。

f:id:atksh:20181212234117j:plain

↑のように,2つの直線にノイズがのったデータから, 元の直線の推定とそれに基づいた分類をModel Based k-Meansでやってみました。

(元の直線を表示するの忘れましたが,求めています。)

Model Based k-Meansって何?

The Top Ten Algorithms in Data Miningによると

Another broad generalization is to view the “means” as probabilistic models instead of points in Rd. Here, in the assignment step, each data point is assigned to the model most likely to have generated it. In the “relocation” step, the model parameters are updated to best fit the assigned datasets.

とあります。 ざっくりというと「通常のk-Meansの割付ステップで最も 近いクラスタを選ぶ代わりに,その近さを 確率で測ってクラスタを割付け, 更新ステップでは,クラスタ 重心の更新の代わりに,モデルの パラメタ更新を行う」ということです。

アルゴリズム

コードは載せるまでもないと思いますので,アニメーションで示します。

f:id:atksh:20181213011853g:plain

「初期化 → 割付(一番誤差が少ない直線へ)→ 更新(切片と傾きの推定)→ 割付 → ・・・ → 更新 → 割付」 の初めの5ステップ分です。

また,割付については,確率の代わりに誤差を用いています。 つまり一番近い(yの差が小さい)直線に割り付けられるようにしています。

拡張可能性

  1. 割付をソフトにしてデータのすべてを重み付けで学習
  2. モデルを非線形*1にして表現力↑
  3. ソフトな割付を別のモデルで学習して,予測のアンサンブルの重みに

3つ目に付いてですが,kaggleなどでアンサンブルをよくやりますが,通常そのウエイトをサンプルによらずに固定するところ, これが動的に変えられるようになると,精度あがったりするのかなと思います。

つまり,各データごとに適切なモデルを選ぶことができる可能性*2があるということです。

*1:GBDTやNNなど

*2:もちろん過学習の問題も大きくなりますが