我是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 - 由于制造优惠券而应用的折扣 TRANS_TIME - 交易发生的时间 WEEK_NO - 交易周发生在1-102 MANUFACTURER - 将产品与同一制造商联系在一起的代码 部门 - 将类似产品组合在一起 品牌 - 表示私人或国家标签带 COMMODITY_DESC - 在较低级别将类似产品组合在一起 SUB_COMMODITY_DESC - 在最低级别将类似产品分组
答案 0 :(得分: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
我有一个带数据点的矩阵。每个数据点有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 col(这代表颜色)通过键入col = result $ cluster
为数据点提供与其群集关联相对应的颜色如果您还想在绘图中查看群集中心,请添加以下行:
+ points(result$centers, col=1:4, pch="x", cex=3)
该图现在应该如下所示(对于变量2与变量3):
(点是数据点,X是簇中心)
答案 1 :(得分:0)
我对k-means函数并不熟悉,没有任何样本数据很难提供帮助。然而,这可能会有所帮助:
kmeans返回类“kmeans”的对象,该对象具有print和fit方法。它是一个至少包含以下组件的列表:
更多here。
您可以像这样访问这些组件: 即如果你想看看集群:
results$cluster
或者有关于这些中心的更多细节:
results$centers