Algorithm 如何选择向量中的数字组

Algorithm 如何选择向量中的数字组,algorithm,math,Algorithm,Math,我有一个应用程序,其中包含一些测量特征的概率。我想从vector中选择n个最佳特征。我有一个实数向量。向量是标准化的,所有数字的和是1(它是一些特征的概率) 我想选择一组n小于n(假设大约8)的最大数。数字必须紧密相连,没有间隙,而且它们的总和也应该很大(剩余数字的总和应该低几倍) 有没有办法做到这一点 我尝试使用80%分位数(但它对[0.2,0.2,0.01,0.01,0.001,0.001…len~100]等相对较大的间距不敏感),我尝试在两个连续的数字之间进行一些调整,但效果不太好 现在我

我有一个应用程序,其中包含一些测量特征的概率。我想从vector中选择n个最佳特征。我有一个实数向量。向量是标准化的,所有数字的和是1(它是一些特征的概率)

我想选择一组n小于n(假设大约8)的最大数。数字必须紧密相连,没有间隙,而且它们的总和也应该很大(剩余数字的总和应该低几倍)

有没有办法做到这一点

我尝试使用80%分位数(但它对[0.2,0.2,0.01,0.01,0.001,0.001…len~100]等相对较大的间距不敏感),我尝试在两个连续的数字之间进行一些调整,但效果不太好


现在我有一些部分的解决方案,但我只是想知道是否有一些简单的解决方案我忽略了。

听起来你想选择n个最大概率,但n是灵活的。如果n是固定的,比如说n=10,你可以对向量进行排序,然后找出前10项。但从您的示例来看,如果数据中存在自然中断,您似乎希望使用较小的值n。也许您希望从最大概率开始,然后沿着列表选择项目,直到您选择的概率总和超过某个阈值


也许你有一个隐式优化问题,你想最大化一些概率,同时对大n进行一些惩罚。试着这样陈述你的问题。你可能会找到自己的答案,或者你可以在这里重新表述你的问题,帮助其他人给你一个更好的答案。

约翰的答案很好。你也可以试试

  • 对概率进行排序
  • 找出连续概率之间的最大差距
  • 从那里开始工作
从那以后,这听起来像是一个模式识别问题。
我最喜欢的方法是马尔可夫链蒙特卡罗(MCMC)

编辑:既然你澄清了你的问题,我的第一个想法是,因为你只有8个可能的答案,根据每个答案包含的概率以及它是否在某个间隙分裂,为每个答案制定一个分数,并做出启发式判断


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

我不确定这是否是您想要的,但似乎您想要执行以下操作


让我们假设概率是按递增顺序的
x_1,…,x_N
。然后你应该试着找到
1我意识到英语不是你的第一语言,Jiri,但是我很难理解你的问题。我不知道你为什么不能对它们进行排序,然后选择前n名成员。问题还没有很好地定义。我们的目标似乎是在顶部找到一组由n个数字组成的“自然”集合,但无法从您的解释中客观地得出什么是自然的定义。我要澄清一下,我已经把它们分类了。我试图找出一个差距,但差距的“大小”随着人数的增长而变化,也随着最大群体的“大小”的增长而变化。示例:在最大的一组3个数字中,它们的值约为0.3,但8个大数字的值约为1/8。难道你不能沿着列表往下看,选择最大的间距,然后使用它吗?“示例:在最大的一组3个数字中,它们的值约为0.3,但8个大数字的值约为1/8。”好吧,那你想要什么呢?我不认为你的问题能得到合理的解决。我只是试图实现“最大差距”。它通过了我所有的测试,比我自己的解决方案简单得多。谢谢,不客气。(旁白:去年我们有一位来自捷克共和国的房客,名叫Jiri,所以我甚至知道如何发音(但不是说我发音正确。)很有趣。我得考虑一下。
f(i,j)  =  (x_i + x_(i+1) + ... + x_j)/(x_j - x_i)