我正在尝试使用分类和连续数据创建一个无监督的模型。我想我已经解决了,但这是正确的方法吗?
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)
sd2 <- pam(sd1, k =3)
sd3 <- sd2$cluster
sd4 <- mutate(sd1, cluster = sd3)
count(sd4, cluster)
答案 0 :(得分:0)
变量的虚拟编码是相当标准的,但是我不喜欢它。在很多情况下,这种恕我直言会引起很大的偏见,并妨碍解释。
在您的情况下,您可能还对其应用了标准化,这使得可变偏差更加严重。
您的文字声称使用k均值,但使用PAM。这些不一样。由于可解释性以及使用曼哈顿等其他指标的能力,PAM在这里是恕我直言的更好选择。产生的群集“中心”是数据点,而不是均值。
我建议您继续学习数学。 PAM尝试最小化到中心的距离之和。现在输入您要使用的距离,例如曼哈顿。现在,在其中替换为标准化和虚拟编码,您将获得方法尝试解决的实际问题。现在仔细看一下这个(可能相当大)的术语:这是否对您的问题有用,还是您在优化错误的功能?