2017-07-05 8 views
1

RでK平均クラスタリングを使用していくつかのデータをクラスタリングしようとしています。クラスタリングされるデータは、つぶやきのサンプルの特定の機能です。つぶやきには、xまたはyのいずれかのラベルが付けられています。データの例を以下に示します。ユーザー名とIDは削除され、これらのフィールドはクラスタリングには使用されません。K-はRでクラスタリングする

example data

は概ね17K Y標識と、24.6kデータ項目の合計があり、残りはX標識。クラスタリングの後に私が期待することは、それぞれのクラスタにおおよそ対応する量のデータを持つ2つのクラスタです。しかし、クラスタリングは、すべてのデータの最大の大多数を同じクラスタに割り当て、2番目のクラスタには数千のアイテムしか割り当てないようです。クラスタリング結果は以下の通りです:ほとんどすべてのデータは、私は私の問題が何であるかわからないんだけど、2

をクラスタ化するために割り当てられている

clustering results

あなたが見ることができるように、それができるのいずれか私のデータの構造や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) 
} 

編集:私はこの問題は私のデータであると思われる。特徴の点でラベルxyとの区別が不十分であることを意味する。

答えて

0

あなたの実装はうまくいきます。それはあなたのデータの構造であるかもしれないと考えてください。この種の行動を見るのは珍しいことではありません。多数のクラスと少数のクラス/クラスターを持つケースがよくあります。 「健康的な」分布に由来する1つのクラスターとして、少数は「不健全な」分布(例えば病気に関して考える)から生じる。

また、それは監督されていない方法であることを考慮して、基本的なデータ構造の点で最大の違いを明らかにすることを目的としています。もう一度病気の患者がいるかどうかを考えてみましょう。もしあなたがk-手段でそれらを集めれば、それは健康/病気ではなくむしろ男性と女性のクラスターにはならないでしょう。

数kを増やそうとするか、監督/半監督クラスタリングアプローチを選択してください(Rにはかなりのオプションがあります、Googleはそこにあなたの友人です)。

関連する問題