在创建基于内容的推荐器时,我有几个二进制测量,结合整数测量值,我希望比较两个矢量。
例如,考虑以下两个用户和特征t1 - t5,其中的特征可以是,例如:
... [ t1 t2 t3 t4 t5]
User1 0 1 1 18 4
User2 1 1 1 15 2
User2 1 1 0 4 8
数据(显然)不是跨行的高斯。如何计算这些用户之间的相似度分数?我是否需要首先将特征标准化?
我正在寻找如下结果(在Python中,只是为了显示结果。我不需要它在Python中。):
a = array([[0, 1, 1, 18, 4],
[1, 1, 1, 15, 2],
[1, 1, 0, 4, 8]])
print squareform(1 - pdist(a, metric='cosine'))
print squareform(1 - pdist(a, metric='correlation'))
print squareform(1 / (1 + pdist(a, metric='euclidean')))
产生输出:
[[ 0. 0.994 0.627]
[ 0.994 0. 0.566]
[ 0.627 0.566 0. ]]
[[ 0. 0.991 0.384]
[ 0.991 0. 0.273]
[ 0.384 0.273 0. ]]
[[ 0. 0.211 0.064]
[ 0.211 0. 0.074]
[ 0.064 0.074 0. ]]
但我想确定我并没有过分强调t4& t5值。
答案 0 :(得分:1)
您可以为您的应用使用指标。至少这些数据并不代表特定的数据。
更重要的是规范化。你需要定义,多少年,例如,更多的经验等同于大学的多少年等等(这些是你需要定义的规范化系数。)
考虑以下三个用户:
UserA 1 1 1 10 5
UserB 1 1 0 10 5
UserC 1 1 1 10 4
谁与UserA
:UserB
或UserC
更相似?它显然取决于一些语义知识,而不仅仅取决于数字。
如果一个用户有两倍的经验,他的两倍好吗? (这个问题与指标有关。但它可能不是那么重要。)
请注意,correlation
和cosine
实际上应用了规范化。但这不适合具有不同语义的元素。 correlation
会将两个向量移动到相等的平均值,并将它们缩放为具有相等的色散。但是这样你可以混合使用 years 和布尔实体。