我有一组数据,包含用户通过选择完成的问题和答案。我试图构建一个用户-用户推荐引擎,根据他们对问题的回答找到相似用户。一个重要点是问题是随机排列的,没有顺序,而且数据是流式的。
所以对于每个用户,我的数据看起来像这样:
user_1: {"question_1": "choice_1", ...}user_2: {"question_3": "choice_4", ...}user_3: {"question_1": "choice_3", ...}
我发现大多数教程都是关于用户-物品推荐的,但没有关于用户-用户推荐的。
我意识到聚类和余弦相似度可能是很好的选择,我发现columnSimilarity非常高效。
rows = sc.parallelize([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])mat = RowMatrix(rows)sims = mat.columnSimilarity()
我有两个问题:
将每个用户定义为列,将问题/选择定义为行来获得我需要的结果是否明智?
我应该如何将这种类型的数据向量化为数字?如果我需要进行聚类的话。
提前谢谢你 🙂
回答:
遗憾的是,事情不能这样做。这太好了,不可能是真的,对吗?
columnSimilarity
适用于瘦高矩阵,所以如果你有一个希望执行此任务的用户-用户矩阵,它将不起作用。例如,如果你有100万用户)
从你的描述来看,我认为你可能有一个矮宽矩阵,columnSimilarity
对你不起作用。
如果你希望执行用户-用户协同过滤,聚类将是一种方法。(其他方法中,LSH也是一个不错的选择。)