为什么不对LinearSVC的生猪功能使用StandardScaler时获得更好的结果

时间:2019-10-20 12:49:17

标签: python-3.x scikit-learn svm scikit-image standardized

我已使用以下代码从图像数据集中提取了猪的特征:

from skimage import feature
...
feature = feature.hog(img, orientations=12, pixels_per_cell=(3,3), cells_per_block=(2,2), transform_sqrt=True)
...

然后,当我在训练StandardScaler()之前使用LinearSVC()缩放生猪特征时,与不使用StandardScaler()相比,训练后我得到的结果更糟。如果我在带有RBF内核的SVC上使用相同的过程,则结果相反。这意味着在训练SVC(kernel='rbf')之前使用StandardScaler()时,带有RBF内核的SVC(kernel='rbf')会产生更好的结果 比不使用StandardScaler()

from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC, LinearSVC

scaler = StandardScaler()
scaler.fit(X_hog)
X_hog_sc = scaler.transform(X_hog)
X_hog_test_sc = scaler.transform(X_hog_test)
linearSVC = LinearSVC()
linearSVC.fit(X_hog_sc, y_train)
linearSVC.score(X_hog_test_sc, y_test)

svc = SVC()
svc.fit(X_hog_sc, y_train)
svc.score(X_hog_test_sc, y_test)

我对何时应该使用StandardScaler()和何时不应该使用它们感到困惑。

当我使用StandardScaler(with_std=False)时,LinearSVC()的结果要好得多。 似乎上述代码中提取的生猪特征已经缩放,因此使用StandardScaler(with_std = False)效果会更好。

有人曾有过类似经历吗?我该怎么做?

0 个答案:

没有答案