K-均值的Julia余弦相似性计算

K-均值的Julia余弦相似性计算,julia,k-means,spherical-kmeans,Julia,K Means,Spherical Kmeans,我正在Julia中实现K-means聚类 找出并实施对k-均值的修改,通过向量之间的角度来衡量相似性。 所以我假设可以使用余弦相似性,我通过计算th平方欧几里德距离,使代码使用正则K-均值,通过这个: Distances[:,i] = sum((X.-C[[i],:]).^2, dims=2) # Where C is center, Distances are added using the i-th center 我试图通过使用余弦相似性来做到这一点,例如: Distances[:, i]

我正在Julia中实现K-means聚类

找出并实施对k-均值的修改,通过向量之间的角度来衡量相似性。

所以我假设可以使用余弦相似性,我通过计算th平方欧几里德距离,使代码使用正则K-均值,通过这个:

Distances[:,i] = sum((X.-C[[i],:]).^2, dims=2) # Where C is center, Distances are added using the i-th center
我试图通过使用余弦相似性来做到这一点,例如:

Distances[:, i] = sum(1 .- ((X*C[[i], :]).^2 /(sum(X.^2, dims=2).*(C[[i],:]'*C[[i],:]))))
但这似乎不起作用


我是否误解了这个问题,或者我的实现是错误的?

我通过使用github的cosideList函数解决了这个问题。尽管也可以使用Github或其他实现中提供的代码手动计算距离

我这样做是为了计算每个数据点到第I个群集中心的距离

Distances[:, i] = [evaluate(CosineDist(), X[j,:], C[[i],:]] for j in 1:300] # Or the length of X
在我的模块中,我实现了如下距离:

using LinearAlgebra
"""L1 norm distance (aka _Manhattan Distance_)"""
l1_distance(x,y)     = sum(abs.(x-y))
"""Euclidean (L2) distance"""
l2_distance(x,y)     = norm(x-y)
"""Squared Euclidean (L2) distance"""
l2²_distance(x,y)    = norm(x-y)^2
"""Cosine distance"""
cosine_distance(x,y) = dot(x,y)/(norm(x)*norm(y))
然后我在集群模块中使用它们。 请注意,您需要标准库包
linearlgebra