<p><code>scikit-learn</code>需要准确地解决这个问题来实现<a href="http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html#sklearn.model_selection.RandomizedSearchCV" rel="nofollow noreferrer">RandomizedSearchCV</a>,它们有一个独立的类<a href="http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.ParameterSampler.html" rel="nofollow noreferrer">ParameterSampler</a>,您可以使用这个类:</p>
<pre><code>In [1]: from sklearn.model_selection import ParameterSampler
In [2]: list(ParameterSampler({'a': [1,2,3], 'b': ['x', 'y', 'z'], 'c': [0.1, 0.2, 0.3]}, n_iter=5))
Out[2]:
[{'a': 3, 'b': 'z', 'c': 0.2},
{'a': 3, 'b': 'y', 'c': 0.1},
{'a': 3, 'b': 'z', 'c': 0.1},
{'a': 3, 'b': 'x', 'c': 0.2},
{'a': 1, 'b': 'y', 'c': 0.3}]
</code></pre>
<p>这不是索引,但是您可以通过用索引列表替换值列表来轻松解决这个小问题:</p>
^{pr2}$
<p>而且<a href="http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.ParameterSampler.html#sklearn-model-selection-parametersampler" rel="nofollow noreferrer">according to the documentation</a>,你不会得到任何重复:</p>
<blockquote>
<p>If all parameters are presented as a list, sampling without
replacement is performed.</p>
</blockquote>
<p>快速浏览一下<a href="https://github.com/scikit-learn/scikit-learn/blob/ef5cb84a/sklearn/model_selection/_search.py#L167" rel="nofollow noreferrer">current source code</a>可以看到,当所有参数都以列表形式给出时,它会生成所有可能的选项,并从中随机抽样。在大多数情况下这不是问题,但是如果你有大量的超参数选项,它可能会占用相当多的内存。在</p>