当前位置: 首页 > 知识库问答 >
问题:

在python中,如何在计算向量和矩阵之间的相似距离之前规范化数据?

穆劲
2023-03-14

我有一个用户的口味表:user\u偏好。head()

genres  Action Adventure Animation Children Comedy Crime Documentary Drama Fantasy Film-Noir Horror IMAX Musical Mys...
userId                                                                      
18         0       0         0        0       1      0        0        0      0        0        0     0     0       0   
65         9       4         0        4      12      8        1       15      6        4        0     0     0       2   
96         0      16        16        0      16      0        0        0     16        0        0     0    16       0   
121        8       0         0        0      69      9        0       21      0        0        0     0     0       0   
129       11      14         0        3      85      4        4       46      3        0        2     3     0      19   

我有电影类型内容表:

genres  Action Adventure Animation Children Comedy Crime Documentary Drama Fantasy Film-Noir Horror IMAX Musical Mys...
movieId                                                                     
10         0       0         0        0       1      0        0        0      0        0        0     0     0       0   
11         0       0         0        0       1      1        0        1      0        1        0     0     0       0   
12         0       1         0        0       1      0        0        0      0        0        0     0     0       0   
13         0       0         0        0       0      0        0        1      0        0        0     0     0       0   
14         0       1         0        0       0      1        1        0      0        0        0     0     0       1   

我正在尝试获取每个用户的偏好向量,并获取其与电影内容的相似性度量,以便通过点积推荐最偏好的电影:

distances = np.dot(movie_content_df, user_preference[1].reshape(-1, 1))

为了计算距离,我首先通过以下方式标准化了用户的偏好表:

from sklearn.preprocessing import MinMaxScaler

user_preference_tmp = user_preference.copy()
norm = MinMaxScaler().fit(user_preference_tmp)
user_preference_norm = norm.transform(user_preference_tmp)

print(user_preference[1])
print(user_preference_norm[1])
________________________________________________________________________
([ 0,  9,  4,  0,  4, 12,  8,  1, 15,  6,  4,  0,  0,  0,  2,  7,  7,  10,  0,  0])
[0. 0.00239107 0.00131709 0. 0.00355872 0.00212352 0.00300639 0.00044287 0.001469 0.00358637 0.01520913 0. 0. 0. 0.00174978 0.00237691 0.0026616 0.00241604 0. 0. ]

我不明白为什么规范化后用户偏好\u norm[1]表示不同的偏好?例如,第三个值和第五个值都是4,但在标准化后,我得到了0.001317090.00355872,或者最大值15转换为0.001469,这在点积之后给出的相似性值较小。

在计算点积之前对数据进行规范化是否正确?如果是,我做得对吗?

共有1个答案

曾奇略
2023-03-14

这给了我正确的输出,它代表了正确的用户偏好:

from sklearn.preprocessing import Normalizer
user_preference_tmp = user_preference.copy()

norm = Normalizer().fit(user_preference_tmp)
user_preference_norm = norm.transform(user_preference_tmp)

print(list(user_preference[1]))
print(user_preference_norm[1])
_______________________________________________________________________________
[0, 9, 4, 0, 4, 12, 8, 1, 15, 6, 4, 0, 0, 0, 2, 7, 7, 10, 0, 0]
[0.         0.31799936 0.14133305 0.         0.14133305 0.42399915
 0.2826661  0.03533326 0.52999894 0.21199958 0.14133305 0.
 0.         0.         0.07066653 0.24733284 0.24733284 0.35333263
 0.         0.        ]

 类似资料:
  • 问题内容: 我正在尝试使用Haversine公式来计算由纬度和经度标识的一长串位置的距离矩阵,该公式采用两个坐标对的元组来产生距离: 我可以使用嵌套的for循环计算所有点之间的距离,如下所示: 使用一个简单的函数: 但是考虑到时间的复杂性,这需要花费相当长的时间,大约需要20秒才能获得500点,而且我的清单要长得多。这让我着眼于矢量化,并且遇到了((docs)),但无法弄清楚如何在这种情况下应用它

  • 问题内容: 我为城市建立了邻接矩阵,并在它们之间建立了联系。例如AB,BC,CD。现在,我想知道是否可以计算未连接的城市之间的距离。是否可以计算未连接节点之间的矩阵距离并找到路径? 城市班 主要方法 这是我运行main方法时的输出,我认为一切都很好。 现在我想计算从A到D的距离,但我不知道该怎么做。我将不胜感激。谢谢! 问题答案: 要在加权图中找到最短路径(路线的每个部分都有不同的权重),可以使用

  • 我对计算两个numpy阵列(x和y)之间的各种空间距离感兴趣。 http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.distance.cdist.html 但是,上述结果会产生太多不需要的结果。我怎样才能限制它只用于我所需的结果。 我想计算[1,11]和[31,41]之间的距离;[2,22]和[32,42

  • 我试图使用Scala类计算两点之间的距离。但它给出了一个错误说 类型不匹配;发现:其他。需要类型(具有基础类型点):?{def x:?}请注意,隐式转换不适用,因为它们是不明确的:在[A](x:A)类型的对象Predef中确保[A]的方法any2Ensuring和在[A](x:A)“ArroAssoc[A]类型的对象Predef中的方法Ani2ArrowasSoc都是可能的其他转换函数。输入到?{

  • 本文向大家介绍Python文本相似性计算之编辑距离详解,包括了Python文本相似性计算之编辑距离详解的使用技巧和注意事项,需要的朋友参考一下 编辑距离 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。 例

  • 问题内容: 我需要创建一个类来计算两点之间的距离。我被困住了,我是一个完全的初学者。这是我的课程: 第二课。 我不确定如何在两个定义的点之间获取点对象(中间点)。 我可以创建点对象,但不确定如何通过位于这两个点对象之间的方法返回点对象。 问题答案: 平面上的两个点(x1,y1)和(x2,y2)之间的距离为: 但是,如果您想要的只是两个点的中点,则应将中点函数更改为: 这将返回一个全新的点对象,其点