一起使用分类和连续数据进行聚类

时间:2019-03-01 03:51:56

标签: r cluster-analysis

我正在尝试使用分类和连续数据创建一个无监督的模型。我想我已经解决了,但这是正确的方法吗?

加载库

library(tidyr)
library(dummies)
library(fastDummies)
library(cluster)
library(dplyr)

创建样本数据集

set.seed(3)
sampleData <- data.frame(id = 1:50, 
                     gender = sample(c("Male", "Female"), 10, replace = 
 TRUE),
                     age_bracket = sample(c("0-10", "11-30","31-60",">60"), 
 10, replace = TRUE),
                     income = rnorm(10, 40, 10),
                     volume = rnorm(50, 40, 100))

创建稀疏矩阵并进行缩放

sd1 <- sampleData  %>%
  dummy_cols(select_columns = c("gender","age_bracket"))%>%
  mutate(id = factor(id))%>%
  select(-c(gender,age_bracket))%>%
  mutate_if(is.numeric, scale)

glimpse(sd1)

使用pam()函数以k = 3生成k-均值模型

sd2 <- pam(sd1, k =3)

从模型中提取聚类分配的向量

sd3 <- sd2$cluster

构建segment_customers数据框

sd4 <- mutate(sd1, cluster = sd3)

计算每个群集的大小

count(sd4, cluster)

1 个答案:

答案 0 :(得分:0)

变量的虚拟编码是相当标准的,但是我不喜欢它。在很多情况下,这种恕我直言会引起很大的偏见,并妨碍解释。

在您的情况下,您可能还对其应用了标准化,这使得可变偏差更加严重。

您的文字声称使用k均值,但使用PAM。这些不一样。由于可解释性以及使用曼哈顿等其他指标的能力,PAM在这里是恕我直言的更好选择。产生的群集“中心”是数据点,而不是均值。

我建议您继续学习数学。 PAM尝试最小化到中心的距离之和。现在输入您要使用的距离,例如曼哈顿。现在,在其中替换为标准化和虚拟编码,您将获得方法尝试解决的实际问题。现在仔细看一下这个(可能相当大)的术语:这是否对您的问题有用,还是您在优化错误的功能?