【问题标题】:Clustering using categorical and continuous data together一起使用分类数据和连续数据进行聚类
【发布时间】:2019-03-01 15:11:46
【问题描述】:

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

加载库

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)

使用 k = 3 的 pam() 函数生成 k-means 模型

sd2 <- pam(sd1, k =3)

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

sd3 <- sd2$cluster

构建 segment_customers 数据框

sd4 <- mutate(sd1, cluster = sd3)

计算每个簇的大小

count(sd4, cluster)

【问题讨论】:

    标签: r cluster-analysis


    【解决方案1】:

    变量的虚拟编码是相当标准的,但我不喜欢它。在许多情况下,恕我直言,这会导致很大的偏差,并妨碍可解释性。

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

    您的文本声称使用 k-means,但使用了 PAM。这些不一样。恕我直言,PAM 在这里是一个更好的选择,因为它具有可解释性以及使用其他指标(例如曼哈顿)的能力。生成的集群“中心”是数据点,而不是平均值。

    我建议降低到数学水平。 PAM 试图最小化到中心的距离总和。现在输入您使用的距离,例如曼哈顿。现在替换其中的标准化和虚拟编码,您就会得到您的方法试图解决的实际问题。现在仔细看看这个(可能相当大)术语:这对您的问题有帮助,还是您优化了错误的功能?

    【讨论】:

      猜你喜欢
      • 2018-12-26
      • 2022-09-27
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 2013-05-15
      • 2017-05-17
      相关资源
      最近更新 更多