賛成+1, 反対-1, 欠損0のベクトルのようなデータをUMAP, DBSCAN, HDBSCANするときには注意が必要 なぜならこの種のデータはしばしば「同一点に重なるデータ」があり、近傍k個のデータ点をとって密度を計算する系のアルゴリズムから見ると「とても密度の高いクラスタがある」と見えるから
いかにも意味のありげなクラスタができている図
元データは「3%が+1、3%が-1、残りが0」という100次元のベクトル5000個
このUMAPのplotのうち「非ゼロの値が1個しかない点」を赤にするとこうなる
「意味ありげなクラスタ」に見えたものの中に芯のように赤い点があるのがわかる
「非ゼロの値が2個以上のデータ」4920件に限定してUMAPしなおすとこうなる
さきほどの意味ありげなクラスタに見えたものがほとんど消えて、単なるアーティファクトだったことがわかる
個数を数えてみる
原点のデータが8個、たまたま2個重なってるデータがいくつか(12個だった)
この2個重なっている点だけを赤でplotしたものがこれ
アーティファクトのクラスターの芯になっていることがわかる
これは生成データでだけ起こるトリッキーな現象ではなく、現実のデータでも起こること
現実のデータから得られた下記のようなUMAPに対してDBSCANでのクラスタリングを試行錯誤していた
2次元データからDBSCANしてもあまりうまくいかなかったので、次元削減前の84次元空間で試していたが、パラメータによっては「中央付近の明らかにクラスタに見えるものを除外したクラスタ」ができて不穏だった
この原因が何かを探究する過程でわかったが「中央付近のクラスタに見えるもの」が欠損値の少ないデータの集まりで、周囲の複雑な意味ありげな形だったものは欠損値多めのデータだった
この結果を見て、欠損値多めのデータの密度が高いというところから上記のような現象に気づいた
元々このデータは
matrix.dropna(thresh=3)してたのだけど、ここをmatrix.dropna(thresh=10)に変えたところUMAPの結果は下記のようになった
複雑な形状はほとんどすべてアーティファクトだったというわけ