for循环迭代太多-for循环终止

时间:2018-07-10 22:11:29

标签: matlab machine-learning classification feature-selection

在分类任务中,我需要进行特征选择。因此,在featSize = 98个功能(变量)中,我想知道哪些功能适用。对于每种组合,我都通过调整其超参数来训练分类器。我在使用for循环时遇到了一个问题:

  for b = 1:(2^featSize) - 1
        % this is to choose the features. e.g. [1 0 0] selects the first
        % feature out of three features if featSize = 3.

end

Matlab发出警告:Warning: Too many FOR loop iterations. Stopping after 9223372036854775806 iterations. 我是否在禁止使用for循环?还有另一种替代方法可以完成此步骤吗?

4 个答案:

答案 0 :(得分:2)

为每种可能的功能组合建立模型是很难的。从for循环中很明显,您将必须构建指数级的模型以覆盖每个功能子集。

有许多实用的特征选择方法。与您的方法最相似的一种是前向选择。而是有许多算法提供了正则化参数(例如LASSO或岭回归)。 https://stats.stackexchange.com/questions/127444/a-guide-to-regularization-strategies-in-regression

讨论了一些回归选项

此演讲涵盖了许多解决功能选择问题的方法https://www.youtube.com/watch?v=JsArBz46_3s&index=21&list=PLGVZCDnMOq0ovNxfxOqYcBcQOIny9Zvb-&t=0s

答案 1 :(得分:1)

2 ^ 98 = 316.9e27 = 3000亿亿亿亿。如果您每秒运行十亿*次循环迭代,那么运行该循环将花费一亿**年。我认为您买不起电费...:)

这很可怕,不是,指数事物爆炸的速度有多快?

幸运的是,您无需经常循环访问所有功能对。如果您具有98个特征,那么您将具有98 ^ 2对,而不是2 ^ 98。实际上,如果您不想将某个功能与其自身配对,则为98 * 97,如果顺序无关紧要,则为98 * 97/2。

您可以编写一个双循环来访问每对:

N = 98
for ii = 1:N-1
   for jj = ii+1:N
      % do something with the pair [ii,jj]
   end
end

* 10亿中的10亿-而不是10亿美元。

** 2 ^ 98 / 1e12 / 60/60/24/365 == 10.049e + 9-我没有考虑leap年或leap秒...:)

答案 2 :(得分:0)

我认为您正在请求for循环进行2 ^ 98 = 316,910,000,000,000,000,000,000,000,000,000,000次迭代,因此您需要减少迭代次数。

答案 3 :(得分:0)

正如其他人所指出的那样,是的,您正在for循环中以禁止性的方式使用,几乎是破坏性的。要求任何一台常规计算机都是荒唐的,更不用说超级计算机来运行那么多循环了。这就是您问题的一部分。

关于开发解决此问题的另一种方法,我对机器学习了解不多(我想说这个很不好,因为我正试图解决这个问题),但是无论如何,似乎您并没有为我们提供了足够的信息以帮助您。无论哪种方式,您都需要以某种方式彻底减少循环的迭代次数,以使其高效运行,并避免错误。