我正在使用Python中的Scikit-learn运行一些基本的机器学习模型。使用内置的GridSearchCV()函数,我确定了不同技术的“最佳”参数,但其中许多表现比默认参数更差。我将默认参数作为一个选项包含在内,所以我对此感到惊讶。
例如:
from sklearn import svm, grid_search
from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(verbose=1)
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 = grid_search.GridSearchCV(gbc, parameters)
t0 = time()
clf.fit(X_crossval, labels)
print "Gridsearch time:", round(time() - t0, 3), "s"
print clf.best_params_
# The output is: {'min_samples_split': 2, 'learning_rate': 0.01, 'max_depth': 2}
这与默认设置相同,唯一的不同在于最大深度为3。当我使用这些参数时,准确率为72%,而默认值为78%。
我做了一件事,我承认有点可疑,那就是我将整个数据集用于交叉验证。然后在获得参数后,我将其用于相同数据集拆分为75-25的训练/测试。
为什么我的网格搜索忽略了“更好”的默认值呢?