簡體   English   中英

計算 K-Means 的 Julia 中的余弦相似度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM