我将数据集分为两部分:训练集和测试集。现在,只需忘记测试集,并将训练集与sklearn.model_selection软件包的GridSearchCV函数结合使用,即可为SVM搜索最佳参数:
Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]
gammas = [0.001, 0.01, 0.1, 1]
# Set the parameters by cross-validation
param_grid = [{'kernel': ['rbf'], 'gamma': gammas, 'C': Cs}]
clf = GridSearchCV(svm.SVC(), param_grid = param_grid, cv=nfolds, verbose=1.)
clf.fit(x_train, labels)
找到最佳C和gamma参数后,我创建了一个SVM,并将其与训练集配合使用(用于搜索最佳C和gamma):
model = svm.SVC(kernel='rbf', C = clf.best_params_['C'], gamma = clf.best_params_['gamma'])
model.fit(x_train, y_train)
在这一点上,我尝试了一件事,我使用了GridSearchCV对象和一个svm.SVC对象的predict()函数:
predicted_label1 = model.predict(x_test)
predicted_label2 = clf.predict(x_test)
,然后我使用了分类报告(y_test,预测标签)来评估我的两个预测标签向量。在我看来,我应该获得相同的值,但是不会发生……这里是我的输出:
precision recall f1-score support
0.0 0.24 0.97 0.39 357
1.0 0.00 0.00 0.00 358
2.0 0.00 0.00 0.00 357
3.0 0.00 0.00 0.00 357
avg / total 0.06 0.24 0.10 1429
fine parametri
training set and test set saved
Create SVM classifier
precision recall f1-score support
0.0 0.70 0.63 0.66 357
1.0 0.89 0.90 0.90 358
2.0 0.89 0.94 0.91 357
3.0 0.85 0.88 0.86 357
avg / total 0.83 0.84 0.83 1429
第一个来自GridSearchCV,第二个来自SVM ... 这正常吗? GridSearchCV返回什么?它适合通过的训练集吗?