擅长:python、mysql、java
<p>是的,余弦距离是一个很好的指标,找到相似的项目,我相信它是最常用的指标推荐系统。在</p>
<p>对于数据结构,我建议使用<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html" rel="nofollow noreferrer">pandas dataframe</a>来保存数据集。它很容易创建、灵活并且可以很容易地转换为numpy数组(<code>df.values</code>将为您提供内部numy数组)。在</p>
<pre><code>df = pd.DataFrame(
data=[{ "Criteria1" : 5, "Criteria2" : 2, "Criteria3" : 1 },
{ "Criteria1" : 0, "Criteria2" : 1, "Criteria3" : 5 },
{ "Criteria1" : 4, "Criteria2" : 2, "Criteria3" : 1 }],
index=["item1", "item2", "item3"])
</code></pre>
<p>创建数据帧,如下所示。在</p>
^{pr2}$
<p>你可以使用数据帧从sklearn使用任何距离度量。在</p>
<pre><code>>> from sklearn.metrics.pairwise import cosine_similarity
>> cosine_similarity(pd.Series(useritem), df)
array([[ 0.98524468, 0.40967325, 0.98765833]])
</code></pre>
<p>注意:不推荐使用1d数组的余弦相似性,因此上面的代码将给您一个错误,因为useritem是<code>(3,)</code>形状。您可以使用<code>pd.Series(useritem).values.reshape(1, -1)</code>将其重塑为更合适的<code>(1, 3)</code>。在</p>