我已使用以下代码从图像数据集中提取了猪的特征:
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)效果会更好。
有人曾有过类似经历吗?我该怎么做?