结合不同的相似性来建立最终的相似性

Leg*_*eg0 6 cluster-analysis distance similarity data-mining

我几乎是数据挖掘和推荐系统的新手,现在正试图为具有这些参数的用户构建某种rec系统:

  • 教育
  • 利益

为了计算它们之间的相似性,我将应用余弦相似性和离散相似性.例如:

  • city:如果x = y则d(x,y)= 0.否则,d(x,y)= 1.
  • 教育:在这里我将使用余弦相似性,因为单词出现在部门名称或学士学位
  • 兴趣:用户可以选择硬编码的兴趣数量,并根据以下两个向量计算余弦相似度:

1 0 0 1 0 0 ... n
1 1 1 0 1 0 ... n
Run Code Online (Sandbox Code Playgroud)

1意味着利益的存在,并且n是所有利益的总数.

我的问题是:如何以适当的顺序组合这三个相似之处?我的意思是只是总结它们听起来不太聪明,是吗?我也想听听关于我的"新手相似系统"的评论,哈.

Sea*_*wen 6

没有一成不变的答案,因为这里的答案很大程度上取决于您的输入和问题领域。因此,机器学习的许多工作都是准备输入的艺术(而不是科学)。我可以给你一些一般性的想法供你思考。您有两个问题:从这些项目中找出有意义的相似之处,然后将它们组合起来。

城市相似度听起来很合理,但实际上取决于您的领域。难道真的是在同一个城市就代表一切,在相邻城市就没有什么意义吗?例如,位于类似规模的城市有什么意义吗?处于同一个状态?如果他们这样做了,你的相似性应该反映了这一点。

教育:我理解为什么你可能会使用余弦相似度,但这并不能解决这里的真正问题,即处理表示同一事物的不同标记。你需要“eng”和“engineering”来匹配,以及“ba”和“bachelors”,诸如此类的东西。一旦你以这种方式准备了令牌,它可能会产生良好的结果。

兴趣:我不认为余弦是这里的最佳选择,尝试一个简单的谷本系数相似度(只是交集的大小超过并集的大小)。

你不能只是对它们求和,因为我假设你仍然想要一个 [0,1] 范围内的值。你可以对它们进行平均。这就假设每个的输出都是直接可比的,如果你愿意的话,它们是相同的“单位”。他们不在这里;例如,它们并不像是概率。

在实践中,对它们进行平均可能仍然有效,也许可以使用权重。例如,在同一个城市和拥有完全相同的兴趣一样重要。这是真的还是应该不那么重要?

您可以尝试测试不同的变化和权重,希望您有一些针对历史数据进行测试的方案。我会向您推荐我们的项目Mahout,因为它有一个完整的推荐和评估框架。

然而,所有这些类型的解决方案都是hacky和启发式的。我认为您可能想要采用更正式的方法来进行特征编码和相似性。如果您愿意购买一本书并且喜欢《Mahout》,《Mahout in Action》在聚类章节中很好地介绍了如何选择和编码特征,以及如何从中产生相似性。