我的特征向量具有连续(或广泛范围)和二进制组件。如果我只使用欧几里德距离,连续组件将产生更大的影响:
将对称与非对称表示为0和1以及一些不太重要的比率(范围从0到100),从对称变为非对称与距离变化25相比,距离影响很小。
我可以为对称性添加更多权重(例如,通过使其为0或100),但是有更好的方法吗?
答案 0 :(得分:10)
您可以尝试使用标准化的欧几里德距离,例如,在第一部分here的末尾描述。
它只是按标准偏差来缩放每个特征(连续或离散)。这比按照另一张海报所建议的范围(max-min
)进行缩放更为可靠。
答案 1 :(得分:1)
如果我正确理解您的问题,对数据集中的每个维度或列进行标准化(也称为“重新缩放”)是处理超重维度的传统技术,例如,
ev_scaled = (ev_raw - ev_min) / (ev_max - ev_min)
例如,在R中,您可以编写此函数:
ev_scaled = function(x) {
(x - min(x)) / (max(x) - min(x))
}
的工作原理如下:
# generate some data:
# v1, v2 are two expectation variables in the same dataset
# but have very different 'scale':
> v1 = seq(100, 550, 50)
> v1
[1] 100 150 200 250 300 350 400 450 500 550
> v2 = sort(sample(seq(.1, 20, .1), 10))
> v2
[1] 0.2 3.5 5.1 5.6 8.0 8.3 9.9 11.3 15.5 19.4
> mean(v1)
[1] 325
> mean(v2)
[1] 8.68
# now normalize v1 & v2 using the function above:
> v1_scaled = ev_scaled(v1)
> v1_scaled
[1] 0.000 0.111 0.222 0.333 0.444 0.556 0.667 0.778 0.889 1.000
> v2_scaled = ev_scaled(v2)
> v2_scaled
[1] 0.000 0.172 0.255 0.281 0.406 0.422 0.505 0.578 0.797 1.000
> mean(v1_scaled)
[1] 0.5
> mean(v2_scaled)
[1] 0.442
> range(v1_scaled)
[1] 0 1
> range(v2_scaled)
[1] 0 1
答案 2 :(得分:1)
你也可以试试Mahalanobis distance而不是欧几里德。