RでK平均クラスタリングを使用していくつかのデータをクラスタリングしようとしています。クラスタリングされるデータは、つぶやきのサンプルの特定の機能です。つぶやきには、xまたはyのいずれかのラベルが付けられています。データの例を以下に示します。ユーザー名とIDは削除され、これらのフィールドはクラスタリングには使用されません。K-はRでクラスタリングする
は概ね17K Y標識と、24.6kデータ項目の合計があり、残りはX標識。クラスタリングの後に私が期待することは、それぞれのクラスタにおおよそ対応する量のデータを持つ2つのクラスタです。しかし、クラスタリングは、すべてのデータの最大の大多数を同じクラスタに割り当て、2番目のクラスタには数千のアイテムしか割り当てないようです。クラスタリング結果は以下の通りです:ほとんどすべてのデータは、私は私の問題が何であるかわからないんだけど、2
をクラスタ化するために割り当てられている
あなたが見ることができるように、それができるのいずれか私のデータの構造やRの実装に問題があります。
ggplot2
を含むクラスタリングとプロットの両方のさまざまな方法を試しました。 This questionは使用されていましたが、私の結果は変わりませんでした。
My Rの実装は以下のとおりです。正規化の方法はthis answerから取得されることに注意してください。 2つの異なるラベルを持っていても、私のデータが同じクラスタに割り当てられている理由を誰かが正しい方向に向けることができますか?
Clustering.R
#Imports
library(jsonlite)
library(tm)
library(fpc)
#Includes
source("./Clustering_Functions.R")
#Program
rawData <- getInput()
clusterData <- filterData(rawData)
clusterData <- scaleData(clusterData)
aCluster <- performClustering(clusterData)
table(rawData$stance, aCluster$cluster)
plotOutput(clusterData, aCluster)
Functions.R
getInput <- function() {
json_file <- "path/file.json"
#Set data to dataframe
frame <- fromJSON(json_file)
return(frame)
}
#Filter the raw data, remove columns not for clustering
filterData <- function(frame) {
kcFrame <- frame[c(-3, -4, -9)]
return (kcFrame)
}
#Scale the columns to uniform data, values 0-100
scaleData <- function(kcFrame) {
doScale <- function(x) x* 100/max(x, na.rm = TRUE)
kcFrame <- data.frame(lapply(kcFrame, doScale))
return (kcFrame)
}
#Apply K-means clustering
performClustering <- function(kcFrame) {
kc <- kmeans(kcFrame, centers = 2)
return (kc)
}
#Graph the clusters
plotOutput <- function(kcFrame, kc) {
plotcluster(kcFrame, kc$cluster)
}
編集:私はこの問題は私のデータであると思われる。特徴の点でラベルxとyとの区別が不十分であることを意味する。