如何解释knn sklearn的输出,以便根据兴趣匹配人员

2024-09-20 04:07:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我对机器学习很陌生。我试着根据SetA的人和SetB的人的兴趣等级(1=低,10=高)来匹配他们。我的真实数据集有40个特性(稍后我还想对某些特性以及不太常见的兴趣设置更高的权重-我相信this会帮助我吗?)

示例数据集:

>>> dfA = pd.DataFrame(np.array([[1, 1, 1], [4, 4, 4], [8, 8, 8]]),
                   columns=['interest1', 'interest2', 'interest3'],
                  index=['personA1','personA2','personA3'])

>>> dfB = pd.DataFrame(np.array([[4, 4, 3], [2, 2, 1], [1, 2, 2]]),
                   columns=['interest1', 'interest2', 'interest3'],
                  index=['personB1','personB2','personB3'])

print(dfA, "\n", dfB)


>>>           interest1  interest2  interest3
personA1          1          1          1
personA2          4          4          4
personA3          8          8          8 

          interest1  interest2  interest3
personB1          4          4          3
personB2          2          2          1
personB3          1          2          2

我正在使用sklearn的最近邻算法:

knn = NearestNeighbors(n_neighbors = 2).fit(dfA)

distances, indicies = knn.kneighbors(dfB)

>>> print(distances, "\n \n", indicies)

>>>[[1.         4.69041576]
 [1.41421356 4.12310563]
 [1.41421356 4.12310563]] 

 [[1 0]
 [0 1]
 [0 1]]

我不理解输出?我知道一个类似的问题explanation,但是我不知道如何将其应用于这种情况,因为有两个不同的数据集

最终,我需要一个匹配的最终数据帧,如:

SetA             SetB
personA1        personB2
personA2        personB1
personA3        personB3

Tags: 数据兴趣dfasetadfbsetbinterest1personb1
1条回答
网友
1楼 · 发布于 2024-09-20 04:07:55

您得到的结果是从SetA中选择的SetB中给定人的最近邻居
换句话说,第一个元素distances[0]告诉你personB1与SetA中两个最近邻居的距离indicies[0]告诉你这两个人的指数

在本例中:
indicies[0] = [1, 0]表示SetA1中personB1的最近邻居是SetA[1]=personA2和SetA[0]=personA1。
distances[0] = [1. 4.69041576]告诉我们personB1和personA2之间的距离是1,personB1和personA1之间的距离是4.69041776(如果您手工计算欧几里德距离,您可以很容易地进行检查)

几句话:

  • 从你对问题的描述来看,你似乎只对SetA中的一个人(而不是两个最近邻居)的最近邻居感兴趣。如果是这种情况,我建议将knn参数中的n_neighbories=2更改为n_neighbories=1

  • 小心索引:在数据集中,标签从1开始(personA1,personA2,…),但在knn中,索引总是从0开始。当事情变得更复杂时,这可能会导致混乱,因为SetA[0]=personA1,所以要注意它

相关问题 更多 >