擅长:python、mysql、java
<p>在同一个数据集上测试参数和/或特性选择时,对整个数据集运行交叉验证肯定会导致问题。看来这至少是问题的一部分。对数据子集运行CV以优化参数,并保留保留一个保留集用于测试,这是一个很好的实践。在</p>
<p>假设您使用的是<a href="http://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html" rel="nofollow noreferrer">^{<cd1>}</a>数据集(即注释链接中的示例中使用的数据集),下面是一个示例,说明如何通过使用<a href="http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html" rel="nofollow noreferrer">^{<cd3>}</a>创建一个保留集来影响<code>GridSearchCV</code>参数优化:</p>
<pre><code>from sklearn import datasets
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import GradientBoostingClassifier
iris = datasets.load_iris()
gbc = GradientBoostingClassifier()
parameters = {'learning_rate':[0.01, 0.05, 0.1, 0.5, 1],
'min_samples_split':[2,5,10,20],
'max_depth':[2,3,5,10]}
clf = GridSearchCV(gbc, parameters)
clf.fit(iris.data, iris.target)
print(clf.best_params_)
# {'learning_rate': 1, 'max_depth': 2, 'min_samples_split': 2}
</code></pre>
<p>现在使用随机训练子集重复网格搜索:</p>
^{pr2}$
<p>我发现这两种方法的分类精度都要高得多,这让我觉得您可能使用了不同的数据,但是在维护保持集的同时执行参数选择的基本点在这里演示。希望有帮助。在</p>