You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何选用可同时计算数值列与二进制列距离的距离函数?

混合数据(数值+二进制)的距离计算方法

你的数据集同时包含连续数值变量(V1)和二进制哑变量,且两类变量权重相同,直接用dist()的binary方法并不合适——因为这个方法仅针对二元数据,会忽略数值变量的实际差异。下面是两个实用的R解决方案:

1. 用cluster::daisy()(推荐)

daisy()是专门为混合类型数据设计的距离计算函数,默认的Gower距离能完美适配你的场景:它会自动识别变量类型,对连续变量计算标准化后的绝对差,对二进制变量计算匹配/不匹配的比例,且默认所有变量权重相等,刚好符合你“两类变量重要性相同”的要求。

示例代码:

library(cluster)
# 先处理得到目标数据集
df_processed <- tibble( Observation = c(1:6), V1 = c(3, 5, 4, 6, 9, 5),
                        V2 = c("a", "b", "a", "c", "b", "a"), 
                        label = c("Red", "Red", "Blue", "Blue", "Red", "Blue")) %>% 
  select(2:4) %>% 
  fastDummies::dummy_cols() %>% 
  select(c(-V2, -label))

# 计算混合数据距离矩阵
dist_matrix <- daisy(df_processed, metric = "gower")
# 可选:转换为常规dist对象,方便后续聚类等操作
dist_matrix <- as.dist(dist_matrix)

2. 自定义标准化+曼哈顿距离

如果你不想额外加载包,可以先把数值变量V1标准化到0-1区间(和二进制变量的取值范围对齐),再用曼哈顿距离计算——曼哈顿距离对0-1尺度的连续变量和二进制变量,默认权重是一致的。

示例代码:

library(scales)
# 标准化V1到0-1范围
df_scaled <- df_processed %>% 
  mutate(V1 = rescale(V1, to = c(0, 1)))

# 计算曼哈顿距离
dist_matrix <- dist(df_scaled, method = "manhattan")

内容的提问来源于stack exchange,提问作者Rizzle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:00:34