首页 > 解决方案 > 如何重新排序一组数据点以最小化另一组数据点的错误

问题描述

我有以下 15 个数据点:

[0.287 , 0.0691, 0.856, 0.731, 0.895, 0.76, 0.496, 0.749, 0.77, 0.684, 0.667, 0.386, 0.4, 0.334, 0.346]

而且我希望更改这些数据点的顺序,以便使用以下 15 个数据点集来最大程度地减少错误:

[0.1, 0.3, 0.5, 0.7, 0.9, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.3, 0.2, 0.1]

我可以尝试第一组数据点的所有排列,看看哪个给出最小的错误,但这将永远......

标签: pythonpandasnumpyscikit-learnscipy

解决方案


错误地假设您的意思是总和绝对差。不难检查这个错误是否最小化,a并且b具有相同的排名顺序。因此,a可以使用argsort

>>> a = np.array([0.287 , 0.0691, 0.856 , 0.731 , 0.895 , 0.76 , 0.496 , 0.749 , 0.77 , 0.684 , 0.667 , 0.386 , 0.4 , 0.334 , 0.346 ])
>>> b = np.array([0.1, 0.3, 0.5, 0.7, 0.9, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.3, 0.2, 0.1])
>>> 
>>> best_shuffle = np.empty(a.size,int)
>>> best_shuffle[b.argsort(kind="stable")] = a.argsort(kind="stable")
>>> 
>>> np.abs(b-a[best_shuffle]).sum()
1.3499000000000005

推荐阅读