python - sklearn:测量不同组自变量之间的相似性

标签 python algorithm scikit-learn cluster-analysis similarity

假设,我们有

 points1 = np.array([[0,0], [1,1], [0,1],[1,0]])
 points2 = np.array([[2,1], [0,0], [1,0],[0,1]])

现在它们是按建筑顺序排列的不过,这只是一个mve,在我的应用程序中,每个数组的元素都将被洗牌。(这里我们可以使用np.random.shuffle())。
如果查看数据集,可以看到3个元素是相同的点,而其中只有一个元素发生了更改换句话说:
[0,0]中的points2是最接近[0,0]points1的点,而[0,0]中的points1是最接近[0,0]points2的点。
[0,1]中的points2是最接近[0,1]points1的点,而[0,1]中的points1是最接近[0,1]points2的点。
[1,0]中的points2是最接近[1,0]points1的点,而[1,0]中的points1是最接近[1,0]points2的点。
[0,1]中的[1,0],[2,1]points2是最接近[1,1]points1的点,而[1,1]中的points1是最接近[2,1]points2的点
注意我是如何指定这两种方式的!事实上,第一个列表中的一个点可能最接近第二个列表中的一个点,但反过来可能不正确!(即,第二个列表中可能有一个点实际上最接近第一个列表中的同一点)。
另外,请注意,在最后一个要点中,我们有3个点最接近[1,1]。但是,在多个点最接近给定点的情况下,我想消除那些已经找到不同最接近点的点例如,在最后一个要点中,我将把[2,1]中的points2作为最接近[1,1]的点,因为[0,1]中的points2认为[0,1]中的points1是最接近的,而[1,0]中的points2认为[1,0]中的points1是最接近的,所以它们已经“发货”或“忙碌”。
我的问题
现在给定两个相同维度的数组(如上所述),即它们包含相同数量的点,我希望能够找到匹配项(如果没有唯一的匹配项,则为匹配项),以便:
points1中的每个点都与points2中的一个且只有一个点匹配使points2中的每个点与points1中的一个且仅一个点匹配。
这些匹配是因为它们是最接近的想象一下,我只有一个点列表,我对每个点应用了随机的冲击。然后我想基本上“猜猜”每一个点到哪里去了(它们应该是最接近的,但不要介意这一部分)。
我该怎么做?
我的尝试
首先,我试着编写一个函数,循环遍历points1中的每个点,并计算到points2中每个点的距离。在这之后,我会检查每一个距离列表,排序并找出最小值。因此,我会将每个点与最小距离的点相匹配。然而,这就陷入了这样一个问题:如果a是最接近的,并不意味着b是最接近a的,因此你可以最终得到匹配,其中许多点然后被匹配到一个点,以此类推。
我试过用sklearn.metrics.pairwise_distances_argmin_min(Y,X)来阅读here,但它似乎做了一些与我想要的略有不同的事情,因为再次没有将每一个点都匹配到一个并且只有一个点。(或者更好的是,在它的输出中,实际上我认为它只是根据首先声明为最接近的点来选择它)
你有什么建议吗?
基本上给出了两个点列表(大小相同),我想用距离来匹配这些点(我想任何距离指标都可以,也许欧几里德和曼哈顿是最好的)。如果可能的话,在找到匹配之后,我希望能够输出一个“相似度得分”。有什么想法吗?

最佳答案

计算list1和list2中所有元素之间的所有距离排列这些距离(实际上,这些对象将包含距离和对两个端点的引用)获取最小距离并配对该距离的端点。
然后得到下一个最小的距离,其中没有一个端点是成对的。继续,直到所有点都配对。
不幸的是,该算法具有O(N2)复杂度。只要您只需要将list与几百个(或者几千个)元素进行比较,它就可以工作。除此之外,它可能会非常缓慢。。。

关于python - sklearn:测量不同组自变量之间的相似性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45794540/

相关文章:

python - Django 动态 url 参数名称

python - 提高 python 正则表达式的性能

python - 使用 Out of Core 进行 Scikit Learn 多标签分类

machine-learning - 如何在 scikit-learn LogisticRegression 中设置拦截缩放

python - 使用 sort(list, key=str.lower) 进行不区分大小写的排序

python - 使用 Python 保存下载的 ZIP 文件

python - 内存递归与迭代的大 O 表示法是否相同?

algorithm - 许可证 key 模式检测?

algorithm - 从流中查找运行介质

python - 对 Sklearn Pipeline 和 Feature Union 的困惑