2015-02-17 245 views
0

我是R和聚類世界的新手。我正在使用購物數據集來從中提取功能,以便識別有意義的內容。Kmeans聚類識別R中的知識

到目前爲止我已經學會了如何合併文件,刪除na,做錯誤平方和,鍛鍊平均值,按小組總結,做K平均聚類並繪製結果X,Y.

但是,我很困惑如何查看這些結果或確定什麼是有用的集羣?我是在重複一些事情還是錯過了某些東西?我對繪製X Y變量也很困惑。

下面是我的代碼,也許我的代碼可能是錯誤的。能否請你幫忙。任何幫助都會很棒。

# Read file 
mydata = read.csv(file.choose(), TRUE) 

#view the file 
View(mydata) 

#create new data set 
mydata.features = mydata 

mydata.features <- na.omit(mydata.features) 

wss <- (nrow(mydata.features)-1)*sum(apply(mydata.features,2,var)) 
for (i in 2:20) wss[i] <- sum(kmeans(mydata.features, centers=i)$withinss) 
plot(1:20, wss, type="b", xlab="Number of Clusters", ylab="Within groups sum of squares") 

# K-Means Cluster Analysis 
fit <- kmeans(mydata.features, 3) 
# get cluster means 
aggregate(mydata.features,by=list(fit$cluster),FUN=mean) 
# append cluster assignment 
mydata.features <- data.frame(mydata.features, fit$cluster) 

results <- kmeans(mydata.features, 3) 

plot(mydata[c("DAY","WEEK_NO")], col= results$cluster 

樣本數據變量,下面都是我有我的數據集內的變量,它的購物數據集收集了2年

PRODUCT_ID - 唯一標識每個產品 household_key - 唯一標識每個家庭 BASKET_ID - 唯一標識購買機會 DAY - 交易發生的日期 QUANTITY - 行程期間購買的產品數量 SALES_VALUE - 美元零售商從銷售中獲得的金額 STORE_ID - 標識獨特商店 RETAIL_DISC - disccount應用由於製造券 TRANS_TIME - 一天的時間,當交易發生的 WEEK_NO - 交易周出現1-102 製造商 - 代碼鏈接產品具有相同的製造一起 部 - 集團同類產品一起 品牌 - 表明私人或國家的標籤帶 COMMODITY_DESC - 同類產品組在一起下級 SUB_COMMODITY_DESC - 在最低水平

+0

您可能感興趣的函數'clusGap'在'cluster'包中。它計算k的許多可能值的'聚類'統計的好處。由於您尚未提供樣本數據,因此您的問題無法重現。另外,關於如何識別有用羣集的問題在統計和機器學習中是一個複雜的,未解答的問題。不是一個真正的編程問題。 – bdemarest 2015-02-18 00:58:24

+0

嗨我剛剛添加了我的數據集中的所有變量。我很難理解哪些特徵可以用於識別數據集中有意義的內容? – user2704941 2015-02-18 08:15:22

回答

0

我並不真正熟悉的羣體同類產品共同的k-means功能,其努力幫助沒有任何樣本數據。然而在這裏可能有所幫助:

kmeans返回一個類「kmeans」的對象,它有一個打印和一個擬合的方法。它與至少以下組件的列表:

  • 羣集:整數向量(從1:K)表示羣集,其中每個點被分配。
  • 中心:聚類中心矩陣。
  • totss:總平方。
  • 範圍:羣集內正方形向量,每個羣集一個組件。
  • tot.withinss:總的羣內平方和總和,即sum(withinss)。
  • betweenss:羣集之間的平方和,即totss-tot.withinss。
  • 大小:每個羣集中的點數。
  • iter:(外部)迭代次數。
  • ifault:整數:指示可能的算法問題 - 專家。

更多here

您可以像這樣訪問這些組件: 即,如果你想看看集羣:

results$cluster 

或對中心的詳細信息:

results$centers 
+0

嗨@maRtin謝謝你的回答,我已經完成了你提到的那個階段,一旦我運行了我的K意味着我有例如4個集羣,現在我希望檢索具有分配的集羣編號的所有數據。你能幫助我如何在R中實現這一點嗎? – user2704941 2015-02-18 16:12:37

+0

我添加了一個新答案。我希望這個幫助。但是,如果你喜歡我的答案,我會很樂意接受upvote。 Thx – maRtin 2015-02-19 19:03:07

+0

對不起,現在看到了這個,我想每次有人寫回答都會收到一封電子郵件通知,但我猜它不工作。如果你能讓我有一段時間,我想分析你的答案,我會給你一個更新。謝謝:) – user2704941 2015-02-20 15:54:01

2

樣本數據

我把一些樣本數據,所以我可以幫助你更好:

#generate sample data 
sampledata <- matrix(data=rnorm(200,0,1),50,4) 

#add ID to data 
sampledata <-cbind(sampledata, 1:50) 

#show data: 
head(sampledata) 
      [,1]  [,2]  [,3]  [,4] [,5] 
[1,] 0.72859559 -2.2864943 -0.5408501 0.1564730 1 
[2,] 0.34852943 0.3100891 0.6007349 -0.5985266 2 
[3,] -0.04605026 0.5067896 -0.2911211 -1.1617171 3 
[4,] -1.88358617 1.3739440 -0.5655383 0.9518367 4 
[5,] 0.35528650 -1.7482304 -0.3871520 -0.7837712 5 
[6,] 0.38057682 0.1465488 -0.6006462 1.3827544 6 

我有一個矩陣與DA ta點。每個數據點有4個變量(第1 - 4列)和一個id(第5列)。

應用的K-means

之後,我應用的k-means功能(但只列1:4,因爲它沒有多大意義,羣集ID):

#kmeans (4 centers) 
result <- kmeans(sampledata[,1:4], 4) 

分析輸出

如果我想看到的數據點屬於我可以輸入該集羣:

result$cluster 

其結果將是,例如:

[1] 4 3 2 2 1 2 4 4 3 3 3 3 2 1 4 4 4 2 4 4 4 1 1 1 3 3 3 3 1 3 2 2 4 4 2 4 2 3 1 2 2 2 1 2 1 1 4 1 1 1 

這意味着,數據點1屬於類4,第二個數據點屬於類3,等等... 如果我想檢索屬於羣1的所有數據點,我可以做到以下幾點:

sampledata[result$cluster==1,] 

這將輸出一個矩陣,在最後一列的所有值和數據點號:

  [,1]   [,2]  [,3]  [,4] [,5] 
[1,] 0.3552865 -1.748230422 -0.3871520 -0.78377121 5 
[2,] 0.5806156 0.479576142 1.1314052 1.60730796 14 
[3,] 1.1871472 1.280881477 -1.7227361 -0.89045074 22 
[4,] 0.8482060 0.726470349 0.6851352 -0.78526581 23 
[5,] -0.5324139 -1.745802580 0.6779943 0.99915708 24 
[6,] 0.2472263 -0.006298136 -0.1457003 -0.44789364 29 
[7,] 0.1412812 -0.247076976 0.9181507 -0.58570904 39 
[8,] 0.1859786 -1.768692166 0.5681229 -0.80618157 43 
[9,] -1.1577178 -0.179886998 1.5183880 0.40014071 45 
[10,] 1.0667566 -1.602875994 0.6010581 -0.49514049 46 
[11,] 0.2464646 1.226129859 -1.3628096 -0.37666716 48 
[12,] 1.2660358 0.282688323 0.7650636 0.23442255 49 
[13,] -0.2499337 0.855327072 0.2290221 0.03492807 50 

如果我想知道點有多少數據是第1組中,我可以輸入:

sum(result$cluster==1) 

這將返回13,以及對應於上述矩陣的行數。

最後一些繪圖:

首先,讓圖中的數據。既然你有一個多維數據框,並且你只能在一個標準圖中繪製兩個維度,你必須這樣做。選擇要繪製的變量,例如var 2和3(第2列和第3列)。這相當於:

sampledata[,2:3] 

繪製該數據,簡單地寫:

plot(sampledata[,2:3], col=result$cluster ,main="Affiliation of observations") 

使用argumemnt山坳(這代表顏色)通過鍵入相應的給個數據點的顏色到他們的簇隸屬關係山坳= $結果集羣

如果你也想看到的情節聚類中心,添加以下行:

+ points(result$centers, col=1:4, pch="x", cex=3) 

情節現在應該是這樣的(可變2比變量3):

(該點是數據點,該X's是聚類中心) enter image description here