我正在使用scikit-learn的RandomizedSearchCV函数.一些学术论文声称,与整个网格搜索相比,随机搜索可以提供"足够好"的结果,但可以节省大量时间.
令人惊讶的是,有一次,RandomizedSearchCV提供了比GridSearchCV更好的结果.我认为GridSearchCV是穷举的,所以结果必须比RandomizedSearchCV更好,假设他们搜索同一个网格.
对于相同的数据集和大多数相同的设置,GridsearchCV返回了以下结果:
最佳cv精度:0.7642857142857142
测试集得分:0.725
最佳参数:'C':0.02
RandomizedSearchCV返回以下结果:最佳cv准确度:0.7428571428571429
测试集得分:0.7333333333333333
最佳参数:'C':0.008
对我来说,0.733的测试分数优于0.725,并且RandomizedSearchCV的测试分数和训练分数之间的差异较小,据我所知,这意味着过度拟合.
那么为什么GridSearchCV会让我的结果更糟?
GridSearchCV代码:
def linear_SVC(x, y, param, kfold):
param_grid = {'C':param}
k = KFold(n_splits=kfold, shuffle=True, random_state=0)
grid = GridSearchCV(LinearSVC(), param_grid=param_grid, cv=k, n_jobs=4, verbose=1)
return grid.fit(x, y)
#high C means more chance of overfitting
start = timer()
param = [i/1000 for i in range(1,1000)]
param1 = [i for i in range(1,101)]
param.extend(param1)
#progress = progressbar.bar.ProgressBar()
clf = linear_SVC(x=x_train, y=y_train, param=param, kfold=3)
print('LinearSVC:')
print('Best cv accuracy: {}' .format(clf.best_score_))
print('Test set score: {}' .format(clf.score(x_test, …Run Code Online (Sandbox Code Playgroud)