我有一个现实世界的问题,我认为需要某种优化,而不是我所关心的数据数组上的简单排序。我将在下面概述问题:
我有一个由不同设备组成的数据集,每个设备都有一个属性A和B.A和B不相互依赖,但是,我想以特定的方式打包其中的3个。
在所选的3个设备中,值应相互相似。
B值也应相互相似。
例如,在这些数据中,有:
250个设备(每个A和B的单个值)
A
B
最终,这些设备应分三组打包,分别在A值和B值之间取得良好的平衡。对于每个属性,如果没有包含每个条件的相同值的三元组,也可以使用相邻的区域。
我想将这些设备分组为3个包,因为在给定约束的情况下可以使用多个包。
所以我的问题是:这是什么类型的组合问题以及在Python中实现它的方法是什么?关于这些类型的问题的任何资源都将非常受欢迎,因为我对这个引人入胜的主题很新。
如果解释的任何部分不清楚,请告诉我,我会尽力澄清。谢谢!
为清晰起见编辑 以下是一些示例数据:
DeviceNumber = [1,2,3,4,5,6]
A = [0.3, 0.3, 0.4, 0.2, 0.3, 0.4]
B = [0.02, 0.04, 0.03, 0.02, 0.02, 0.03]
我希望它将它分组以便
模块1将具有设备1,4,5
模块2将具有设备2,3,6
让我们假设A和B的数据是正态分布的。
我想我正在尝试最小化A值和B值之间的差异,并找到将它们分组的方法。
编辑2: 所以,数据在起作用,我现在还没有,但这里有一些图表,我用12个设备的A和B的价值分布
多个设备具有相同的A值。这些设备之间也可能具有类似的B值。如果是这样,我想将其中的三个放在一起,删除它们,然后重复检查值和分组。随着比赛减少,我想扩大我的分组搜索条件。
我希望能够解决更多问题。再次感谢所有反馈!到目前为止!
答案 0 :(得分:1)
您的问题似乎是标准的群集分析,特别是k-medoids。考虑到k-medoids的工作方式,您不需要从集合中删除集群,只需将 k 设置为 n / 3。
似乎没有一个“权威的”k-medoids Python包实现算法,但pyCluster看起来合理(只有基于C的文档)。 SciPy.cluster明显缺席。
鉴于您在图像中显示的样本数据,您最终会得到类似这样的眼睛k-medoids聚类:
答案 1 :(得分:0)
这不是答案,但我需要的澄清不适合评论。
首先,如果你可以通过更多地了解你想要实现的目标而使问题变得不那么抽象,那么这将有很大帮助。
我希望它将它分组,以便模块1具有设备1,4,5
{1,4,5}表示什么?从A中抽出是(0.3,0.2,0.3)吗?我不这么认为。 (0.02,0.02,0.02)也不是从(B.,0.02,0.02)中抽出来的。这两组的结合也没有意义。
对于每个属性,如果没有三元组包含每个条件的相同值,也可以使用相邻的区域。
如何选择“相同的值”?
看起来隐藏在那里可能会有一个有趣的问题,但是很难理解任务规范。
答案 2 :(得分:0)
如果条件实际上与样本数据相似,则可以列出包含
的元组 [(a[ii]+b[ii], ii)...]
然后对列表进行排序,从每个端点一次拉3,直到你在中间相遇。这将使组合最像彼此。