为什么在 GridSearchCV 中使用 StandardScaler 时会得到不同的结果?
Why do I get different results when using the StandardScaler in GridSearchCV?
我想通过 GridSearchCV 优化 SVM 的超参数。但是最佳估计器的分数与运行具有最佳参数的svm时的分数有很大不同。
#### Hyperparameter search with GridSearchCV###
pipeline = Pipeline([
("scaler", StandardScaler()),
("svm", LinearSVC(loss='hinge'))])
param_grid=[{'svm__C': c_range}]
clf = GridSearchCV(pipeline, param_grid=param_grid, cv=5, scoring='accuracy')
clf.fit(X,y)
print('\n Best score: ',clf.best_score_)
#### scale train and test data ###
sc = StandardScaler()
sc.fit(X)
X = scaler.transform(X)
X_test = sc.transform(X_test)
###### test best estimator with test data ###################
print("Best estimator score: ", clf.best_estimator_.score(X_test, y_test))
##### run SVM with the best found parameter #####
svc = LinearSVC(C=clf.best_params_['svm_C'])
svc.fit(X,y)
print("score with best parameter: ", svc.score(X_test,y_test))
结果如下:
最好成绩:0.784
最佳估算器分数:0.6991
最佳参数得分:0.7968
不明白为什么best estimator和svm的分数不一样?以下哪个结果是正确的测试精度?为什么 Best estimator 的分数 0.6991 这么差?我是不是做错了什么?
在下面一行中:
print("Best estimator score: ", clf.best_estimator_.score(X_test, y_test))
您传递的 X_test
已经缩放到 clf
,这是一个包含另一个缩放器的 pipeline
,因此基本上您将数据缩放为上次预测的两倍将缩放后的数据传递给 svc
的语句,它只是在不缩放的情况下进行模型拟合。所以在这两种情况下输入的数据是完全不同的,所以你的预测也是不同的。
希望对您有所帮助!
我想通过 GridSearchCV 优化 SVM 的超参数。但是最佳估计器的分数与运行具有最佳参数的svm时的分数有很大不同。
#### Hyperparameter search with GridSearchCV###
pipeline = Pipeline([
("scaler", StandardScaler()),
("svm", LinearSVC(loss='hinge'))])
param_grid=[{'svm__C': c_range}]
clf = GridSearchCV(pipeline, param_grid=param_grid, cv=5, scoring='accuracy')
clf.fit(X,y)
print('\n Best score: ',clf.best_score_)
#### scale train and test data ###
sc = StandardScaler()
sc.fit(X)
X = scaler.transform(X)
X_test = sc.transform(X_test)
###### test best estimator with test data ###################
print("Best estimator score: ", clf.best_estimator_.score(X_test, y_test))
##### run SVM with the best found parameter #####
svc = LinearSVC(C=clf.best_params_['svm_C'])
svc.fit(X,y)
print("score with best parameter: ", svc.score(X_test,y_test))
结果如下:
最好成绩:0.784
最佳估算器分数:0.6991
最佳参数得分:0.7968
不明白为什么best estimator和svm的分数不一样?以下哪个结果是正确的测试精度?为什么 Best estimator 的分数 0.6991 这么差?我是不是做错了什么?
在下面一行中:
print("Best estimator score: ", clf.best_estimator_.score(X_test, y_test))
您传递的 X_test
已经缩放到 clf
,这是一个包含另一个缩放器的 pipeline
,因此基本上您将数据缩放为上次预测的两倍将缩放后的数据传递给 svc
的语句,它只是在不缩放的情况下进行模型拟合。所以在这两种情况下输入的数据是完全不同的,所以你的预测也是不同的。
希望对您有所帮助!