Да, вы должны абсолютно одинаково масштабировать новые данные. Однако это может оказаться невозможным, если вы не сохранили ранее использованный скалер.
Вот почему вместо обучения и сохранения SVM вы должны тренироваться и сохранять скалер вместе с SVM. В жаргоне машинного обучения это называется конвейером.
Вот как вы могли бы использовать его на игрушечном примере:
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_breast_cancer
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X,y)
pipe = Pipeline([('scaler',StandardScaler()), ('svc', SVC())])
Этот конвейер затем поддерживает те же операции, что и обычная модель scikit-learn
:
pipe.fit(X_train, y_train)
pipe.score(X_test, y_test)
При установке pipe
он сначала масштабируется, а затем подает масштабированные объекты в классификатор.
После обучения вы можете сохранить объект pipe
так же, как ранее сохраняли SVM. Когда вы загрузите его и примените к новым данным, он выполнит масштабирование в соответствии с требованиями до прогнозов.