2015-09-10 12 views

回答

1

在談論的基質,其中:

每個維度是稀疏以每行至多L個非零元素

並且其值是:

的A的條目已被縮放爲[-1,1]

這不是必需條件,您可以在密集的矩陣上運行它。實際上,如果你用點心筆者從the databricks blog檢查示例代碼,你會發現,RowMatrix是從密集的矢量的RDD創建事實:

同樣在CosineSimilaritySpark example評論給出作爲輸入的密集矩陣這不是縮放的。

您需要注意的是,唯一可用的方法是columnSimilarities(),它計算列之間的相似性。因此,如果您的輸入數據文件以record = row的方式構造,那麼您必須先進行矩陣轉置,然後運行相似性。要回答你的問題,不要在RowMatrix上沒有transpose,MLlib中的其他類型的矩陣確實有這個功能,所以你必須先做一些轉換。

Row similarity is in the works不幸的是,它並沒有成爲最新的Spark 1.5。

至於其他選項,你必須自己實現它們。需要O(mL^2)洗牌的幼稚強力解決方案非常容易實現(笛卡爾+您的選擇類似度量),但表現非常糟糕(從經驗來講)。

你也可以看看一個叫做DISCO的同一個人的不同算法,但是它沒有在Spark中實現(並且該論文也假定了L稀疏性)。

最後請注意,DIMSUM和DISCO都是估計值(儘管非常好)。