Я думаю, что вы не должны быть озабочены выбором переменных для кластеризации, а go впереди визуализации и понимания кластеризации.
Если действительно есть сигнал, то есть некоторые признаки разделения в вашем набор данных, большинство алгоритмов кластеризации будет использовать больше полезных столбцов. Например, в приведенном ниже примере я использую кластер радужной оболочки, но добавил еще 10 бессмысленных столбцов:
library(apcluster)
set.seed(100)
df = iris[,1:4]
df = cbind(df,matrix(rnbinom(nrow(df)*10,mu=10,size=1),ncol=10))
scaled_df = scale(df)
pca = prcomp(scaled_df)
plot(pca$x[,1:2],col=iris$Species)
Вы можете видеть, что выше если вы проецируете на первые ПК, вы все равно можете увидеть то разделение, которое исходило от исходных данных. Если посмотреть на объяснение дисперсии, оно составляет около 30%, что имеет смысл, потому что другие столбцы просто шумовые:
head(100*(pca$sdev^2)/sum( (pca$sdev^2)))
[1] 21.624484 9.839297 9.657884 8.239994 7.875396 7.289238
Теперь, если мы выполняем кластеризацию, мы можем также извлечь идентификатор кластера и не ограничиваться к функции графика, предоставляемой пакетом:
apres <- apcluster(negDistMat(r=2), scaled_df,q=0.01)
clusters = apres@clusters
clusterid = data.frame(
cluster = rep(1:length(clusters),sapply(clusters,length)),
obs = unlist(clusters)
)
clusterid = clusterid[order(clusterid$obs),]
head(clusterid)
cluster obs
1 2 1
2 2 2
3 2 3
4 2 4
5 2 5
6 2 6
Теперь у нас есть data.frame, который сообщает нам для каждого наблюдения, которое мы предоставили в качестве входных данных, назначенный кластер. Давайте спроецируем это на pca, чтобы увидеть, как оно разделено:
library(RColorBrewer)
COLS = brewer.pal(length(unique(clusterid$cluster)),"Set3")
plot(pca$x[,1:2],col=COLS[clusterid$cluster],pch=20,cex=0.5)
Мы можем посмотреть на переменные, которые содержат сигнал,
plot(df[,1:2],col=COLS[clusterid$cluster],pch=20,cex=0.5)
А те, которые этого не делают:
plot(df[,9:10],col=COLS[clusterid$cluster],pch=20,cex=0.5)
Итак, если действительно есть разумный способ кластеризации ваших данных, который предлагает ваш pca, то, используя описанный выше подход, вы уже можете исследовать свои данные и выяснить, имеет ли смысл кластеризация. Настройте параметры кластеризации, и вы сможете легко визуализировать конечный результат.