web-dev-qa-db-ja.com

Apache Spark Python DataFrames上のCosineの類似性

Recommender Systemの場合、全体のすべての列間のコサイン類似度を計算する必要がありますSpark DataFrame。

Pandas以前はこれを行っていました:

import sklearn.metrics as metrics
import pandas as pd

df= pd.DataFrame(...some dataframe over here :D ...)
metrics.pairwise.cosine_similarity(df.T,df.T)

これにより、列間の類似度マトリックスが生成されます(転置を使用したため)。

Spark(Python))で同じことをする方法はありますか?

(これを数千万行、数千列の行列に適用する必要があるため、Sparkで実行する必要があります)

12
Valerio Storch

組み込みのcolumnSimilarities()メソッドをRowMatrixで使用すると、コサインの類似度を正確に計算したり、 [〜#〜] dimsum [〜 #〜] メソッド。大規模なデータセットの場合はかなり高速になります。使用方法の違いは、後者の場合、thresholdを指定する必要があることです。

次に、再現可能な小さな例を示します。

from pyspark.mllib.linalg.distributed import RowMatrix
rows = sc.parallelize([(1, 2, 3), (4, 5, 6), (7, 8, 9), (10, 11, 12)])

# Convert to RowMatrix
mat = RowMatrix(rows)

# Calculate exact and approximate similarities
exact = mat.columnSimilarities()
approx = mat.columnSimilarities(0.05)

# Output
exact.entries.collect()
[MatrixEntry(0, 2, 0.991935352214),
 MatrixEntry(1, 2, 0.998441152599),
 MatrixEntry(0, 1, 0.997463284056)]
9
mtoto