ノイズの多いデータまたは異常値を使用したクラスタリング


9

このような2つの変数のノイズの多いデータがあります。

x1 <- rep(seq(0,1, 0.1), each = 3000)
set.seed(123)
y1 <- rep (c(0.2, 0.8, 0.3, 0.9, 0.65, 0.35,0.7,0.1,0.25, 0.3, 0.95), each = 3000)
set.seed(1234)
e1 = rnorm(length(x1), 0.07,0.07)
set.seed(1223)
e2 = rnorm(length(x1), 0.07,0.07)
set.seed(1334)
yn <- rnorm(20000, 0.5,0.9)
set.seed(2344)
xn <- rnorm(20000, 0.5,0.9)
y <- c(y1 + e1,yn) 
x <- c(x1 + e2, xn) 
plot(x,y,  xlim=c(0,1.2), ylim = c(0,1.2), pch = ".", col = "gray40") 

よく見ると、潜在的に10個のクラスターがあることが視覚的にわかります。

ここに画像の説明を入力してください

ただし、データ全体には多くの点が広がっています。

plot(x,y,   pch = ".", col = "gray40") 

ここに画像の説明を入力してください

10個のクラスターを作りたいのですが。K-meansクラスター分析を試してみました。

xm1 <- cbind(x,y)
cl1 <- kmeans(xm1, 10)
colrs <- c("red", "green", "blue1", "pink", "green4","tan", 
 "gray40", "yellow", "black", "purple") 
plot(xm1, col = colrs[cl1$cluster], pch = ".", xlim=c(0,1.2), ylim = c(0,1.2))

ここに画像の説明を入力してください

plot(xm1, col = colrs[cl1$cluster], pch = ".")

ここに画像の説明を入力してください

とにかく、このタイプのデータにより多くの正義を行うことができる(カーネルk-means、最近傍など)。もしそうなら、どうすればこれを行うことができますか?


1
これまでのところ何が問題になっていますか?あなたが持っているもの(k-meansクラスター分析)が受け入れられないのはなぜですか?
スティーブS

dbscanまたは光学アルゴリズムを調べます(en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/…を参照)
Giorgio Spedicato

回答:


6

データが混合ガウスで構成されているように見えるため、混合ガウスモデリング(別名:EMクラスタリング)を試してください。これにより、このタイプのデータではk平均よりはるかに優れた結果が得られます。

「ノイズ」が均一に分布している場合は、混合モデルに均一な分布を追加することもできます。

データのクリーン度がはるかに低い場合は、DBSCAN、MeanShift、OPTICS、HDBSCAN *などを使用することを検討してください。密度ベースのクラスタリングは、このデータに適しているようです。DBSCANはノイズに対しても非常に耐性があります(「N」はノイズを表します)。


3

この記事をご覧になることをお勧めします。著者は、外れ値が削除され、残りのデータがクラスター化される堅牢な方法を提案します。それが彼らがこの方法を「トリミング」と呼んだ理由です。Rパッケージtclustもありましたが、これによるとCRANから削除されました。とにかく、記事は読む価値があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.