Я извлек особенности свиней из набора данных изображений, используя следующий код:
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()
. Если я использую ту же процедуру на SVC с RBF-Kernel, то результат будет противоположным. Это означает, что SVC(kernel='rbf')
с RBF-Kernel дает лучшие результаты при использовании StandardScaler()
перед тренировкой 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) результаты получаются лучше.
Кто-нибудь уже сталкивался с подобным опытом? Как я это делаю правильно?