如何在向量中选择数字组?

4
我有一个应用程序,其中包含一些测量特征的概率。我想从向量中选择n个最佳特征。我有一个实数向量,向量已经归一化,所有数字之和为1(这是某些特征的概率)。 我想选择一组n个最大数,小于N(假设约为8)。这些数字必须紧密相连且没有间隙,并且它们的总和也应该很大(剩余数字的总和应该要低几倍)。 有什么好的方法来完成这个任务吗? 我尝试过使用80%分位数(但它对相对较大的间隙不敏感,例如[0.2, 0.2, 0.01, 0.01, 0.001, 0.001 ... len ~ 100]),我尝试过在两个连续数字之间设置一些阈值,但效果都不太好。 目前我有一些部分解决方案,但我想知道是否有一些简单的解决方案我可能忽略了。

我知道英语不是你的母语,Jiri,但我很难理解你的问题。我不确定为什么你不能只对它们进行排序并选择前n个成员。 - Mike Dunlavey
问题没有明确定义。目标似乎是找到一个“自然”的顶部n个数字,但是什么是自然的定义无法从你所解释的内容中客观地推导出来。 - Daniel Daranas
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3

John的回答很好。另外,您可以尝试:

  • 对概率进行排序
  • 找到连续概率之间的最大差距
  • 从那里开始逐步推进

从那里开始,这听起来像是一个模式识别问题。
我的最爱方法是马尔科夫链蒙特卡罗(MCMC)。

编辑:由于您澄清了您的问题,我首先想到的是,由于您只有8个可能的答案,所以为每个答案开发一个分数,基于它包含多少概率以及是否在间隔处分裂,并做出启发式判断。

进一步编辑:这听起来有点像逻辑回归。您想要找到一个有效地将您的集合分成成员和非成员的P值。对于给定的P值,您可以计算整体的对数似然度,并选择最大化该似然度的P值。


我已经将它们排序了。我试图找到一个间隙,但是随着数字数量的增加和最大组的“大小”增加,“间隙”的“大小”也会变化。例如:在由3个数字组成的最大组中,它们的值将约为0.3,但8个大数字的值将约为1/8。 - Jiri
你不能只是按照列表顺序,选择最大的间隔,然后使用它吗? - Mike Dunlavey
例如:在三个数字的最大组中,它们的值将约为0.3,但8个大数字的值将约为1/8。好的 - 那么你想要什么?我认为你的问题无法合理解决。 - Daniel Daranas
我刚刚尝试实现了“最大间隙”。它通过了我所有的测试,而且比我自己的解决方案简单得多。谢谢。 - Jiri
不客气。(顺便说一句:我们有一个来自捷克共和国的家庭客人,名叫Jiri,已经住了一年了,所以我甚至知道如何发音[虽然我并不正确]。) - Mike Dunlavey

2
听起来你想选择前n个概率最大的项,但n的值是灵活的。如果n固定,比如n=10,你可以简单地对向量进行排序并提取前10个项。但从你的例子中看来,如果数据有自然的分界点,你可能想使用一个较小的n值。也许你想从最大的概率开始,逐个选择项目,直到你选择的概率之和超过某个阈值。 也许你有一个隐含的优化问题,想要在大n的惩罚下最大化某种概率。试着用这种方式陈述你的问题。你可能会找到自己的答案,或者你可能能够用一种方式重新表述你的问题,在这里得到更好的答案。

抱歉:帖子的一半丢失了。我将澄清一下。 - Jiri

1

我不太确定这是否是您想要的,但似乎您想要做以下操作。

假设概率按升序排列为 x_1,...,x_N,那么您应该尝试找到1<= i < j <= N,使得函数

f(i,j)  =  (x_i + x_(i+1) + ... + x_j)/(x_j - x_i)

被最大化。 这可以用平方时间朴素地完成。


有趣。我得好好想想。 - Mike Dunlavey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,