如何根据兴趣对 knn sklearn 的输出进行交互,以便匹配人员



我对机器学习很陌生。我正在尝试根据 SetA 中的人与 SetB 中的人进行匹配(1=低,10=高(。我的真实数据集有 40 个特征(稍后我还想对某些特征以及不太常见的兴趣设置更高的权重 - 我相信这会对我有所帮助?

示例数据集:

>>> 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]]

我不明白输出?我知道一个类似问题的解释,但我不知道如何将其应用于这种情况,因为有 2 个不同的数据集。

最终,我想要一个匹配项的最终数据帧,例如:

SetA             SetB
personA1        personB2
personA2        personB1
personA3        personB3

您得到的结果是从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.69041576(如果您手动计算欧几里得距离,则可以轻松检查这一点(。

几点评论:

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

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

最新更新