2016-11-10 5 views
1

Для ввода данных разного масштаба я понимаю, что значения, используемые для обучения классификатора, должны быть нормализованы для правильной классификации (SVM).Нужно ли нормализовать входной вектор для прогнозирования в SVM?

Нужно ли также нормализовать входной вектор для прогнозирования?

Сценарий, который у меня есть, заключается в том, что данные обучения нормализуются и сериализуются и сохраняются в базе данных, когда необходимо выполнить предсказание, сериализованные данные десериализуются для получения нормализованного массива numpy, а затем устанавливается массив numpy на классификатор и входной вектор для прогнозирования применяется для прогнозирования. Значит, этот вектор ввода также необходимо нормализовать? Если да, то как это сделать, так как во время предсказания у меня нет фактических данных ввода для нормализации?

Также я нормализую вдоль оси = 0, то есть вдоль столбца.

мой код Нормализация:

preprocessing.normalize(data, norm='l2',axis=0) 

есть способ сериализации preprocessing.normalize

+0

Если вы препроцессировать до того SVM-тренировки, то, конечно, вы должны предобработки каждого предсказуемые вектора тоже с таким же препроцессором-объектом (например то же среднее), которое используется для обучения. – sascha

+0

Так что я сериализую нормализатор в sklearn inorder для нормализации входного вектора.? –

ответ

1

В SVMs рекомендуется в скейлер по нескольким причинам.

  • Лучше иметь такой же масштаб во многих методах оптимизации.
  • Многие функции ядра используют внутреннее эвклидовое расстояние для сравнения двух разных выборок (в гауссовом ядре евклидово расстояние находится в экспоненциальном члене), если каждая функция имеет разный масштаб, эвклидовое расстояние учитывает только функции с наивысшим масштаб.

При установке функций в том же масштабе вы должны удалить среднее значение и делить на стандартное отклонение.

 xi - mi 
xi -> ------------ 
     sigmai 

Вы должны хранить среднее и стандартное отклонение каждой функции учебного набора, чтобы использовать те же операции в будущих данных.

В Python у вас есть функции, чтобы сделать это для вас:

http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html

Для получения средств и STANDAR отклонения:

scaler = preprocessing.StandardScaler().fit(X) 

Для нормализации затем обучающий набор (X представляет собой матрицу, где каждая строка - это данные и каждая колонка a функция):

X = scaler.transform(X) 

После тренировки вы должны нормализовать будущие данные до классификации:

newData = scaler.transform(newData) 

 Смежные вопросы

  • Нет связанных вопросов^_^