距离和相似系数

时间:2022-05-07 21:26:21
一、距离和相似系数


r语言中使用dist(x, method = "euclidean",diag = FALSE, upper = FALSE, p = 2) 来计算距离。其中x是样本矩阵或者数据框。method表示计算哪种距离。method的取值有:
euclidean                欧几里德距离,就是平方再开方。
maximum                切比雪夫距离
manhattan            绝对值距离
canberra                Lance 距离
minkowski            明科夫斯基距离,使用时要指定p值
binary                    定性变量距离.
定性变量距离: 记m个项目里面的 0:0配对数为m0 ,1:1配对数为m1,不能配对数为m2,距离=m1/(m1+m2);
diag 为TRUE的时候给出对角线上的距离。upper为TURE的时候给出上三角矩阵上的值。


r语言中使用scale(x, center = TRUE, scale = TRUE) 对数据矩阵做中心化和标准化变换。
如只中心化 scale(x,scale=F) , 


r语言中使用sweep(x, MARGIN, STATS, FUN="-", ...) 对矩阵进行运算。MARGIN为1,表示行的方向上进行运算,为2表示列的方向上运算。STATS是运算的参数。FUN为运算函数,默认是减法。下面利用sweep对矩阵x进行极差标准化变换
1
>center <</code>- sweep(x, 2, apply(x, 2, mean)) #在列的方向上减去均值。
2
>R <</code>- apply(x, 2, max) - apply(x,2,min)   #算出极差,即列上的最大值-最小值
3
>x_star <</code>- sweep(center, 2, R, "/")        #把减去均值后的矩阵在列的方向上除以极差向量
1
>center <</code>- sweep(x, 2, apply(x, 2, min)) #极差正规化变换
2
>R <</code>- apply(x, 2, max) - apply(x,2,min)
3
>x_star <</code>- sweep(center, 2, R, "/")




有时候我们不是对样本进行分类,而是对变量进行分类。这时候,我们不计算距离,而是计算变量间的相似系数。常用的有夹角和相关系数。
r语言计算两向量的夹角余弦:


1
y <</code>- scale(x, center = F, scale = T)/sqrt(nrow(x)-1)
2
C <</code>- t(y) %*% y
相关系数用cor函数