我的应用程序具有一些测量功能的概率。我想从矢量中选择n个最佳特征。我有一个实数的向量。向量是标准化的,所有数字的总和是1(这是某些特征的概率)。
我想选择n小于N(假设大约8)个最大数字的组。数字必须紧密结合在一起,没有间隙,它们也应该有很大的数额(剩余数字的总和应该低几倍)。
任何想法如何实现?
我尝试使用80%分位数(但它对[0.2,0.2,0.01,0.01,0.001,0.001 ...... len~100]这样的相对较大的间隙不敏感),我在两次连续之间尝试了一些阈值数字,但没有什么工作太好。
我现在有一些部分解决方案,但我只是想知道是否有一些我忽略的简单解决方案。
答案 0 :(得分:3)
约翰的回答很好。你也可以试试
从那时起,它开始听起来像是模式识别问题。
我最喜欢的方法是马尔可夫链蒙特卡洛(MCMC)。
编辑:既然你澄清了你的问题,我首先想到的是,因为你只有8个可能的答案,根据它包含的概率以及它是否在一个间隙分裂,为每个答案制定一个分数,然后制作启发式判断。
进一步编辑:这听起来有点像逻辑回归。您希望找到有效的P值,将您的集合划分为成员和非成员。对于给定的P值,您可以计算整体的对数似然,并选择最大化该值的P.
答案 1 :(得分:2)
听起来你想要选择n个最大概率,但数字n是灵活的。如果n被修复,比如说n = 10,你可以对你的向量进行排序并拉出前10项。但是从你的例子中可以看出,如果数据中存在自然中断,你会想要使用较小的n值。也许你想从最大概率开始,然后在列表中选择项目,直到你选择的概率总和超过某个阈值。
也许你有一个隐含的优化问题,你想要最大化一些概率,对大n有一些惩罚。尝试以这种方式陈述你的问题。你可能会找到自己的答案,或者你可以在这里以一种帮助其他人给你更好答案的方式重新提出你的问题。
答案 2 :(得分:1)
我不确定这是否是您想要的,但似乎您想要做以下事情。
让我们假设概率是x_1,...,x_N
递增的顺序。然后你应该尝试找到1<= i < j <= N
这样的函数
f(i,j) = (x_i + x_(i+1) + ... + x_j)/(x_j - x_i)
最大化。这可以在二次时间内天真地完成。