[英]Calculating Cosine Similarity in Julia for K-Means
我正在 Julia 中實現 K-means 聚類。
找出並實現 k-means 的修改,它可以通過向量之間的角度來測量相似度。
所以我假設可以為此使用余弦相似度,我通過計算歐幾里得距離的平方,使代碼與常規 K-means 一起工作:
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],:]))))
但這似乎不起作用。
我誤解了這個問題還是我執行錯了?
在我的Beta Machine Learning Package模塊Utils中,我將距離實現為:
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))
然后我在集群模塊中使用它們。 請注意,您需要標准庫 package LinearAlgebra
。
我設法通過使用距離github 中的 CosineDist function 來解決它。 盡管也可以使用 Github 或其他實現中提供的代碼手動計算距離。
我是如何做到這一點的,是計算每個數據點到第 i 個聚類中心的距離。
Distances[:, i] = [evaluate(CosineDist(), X[j,:], C[[i],:]] for j in 1:300] # Or the length of X
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.