Почему лучшие результаты, если не использовать StandardScaler на функциях свиней для LinearSVC - PullRequest
0 голосов
/ 20 октября 2019

Я извлек особенности свиней из набора данных изображений, используя следующий код:

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) результаты получаются лучше.

Кто-нибудь уже сталкивался с подобным опытом? Как я это делаю правильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...