2016-11-10 90 views
1

对于不同比例的输入数据,我明白用于训练分类器的值必须针对正确分类(SVM)进行归一化。是否需要对SVM中预测的输入向量进行归一化?

那么预测的输入向量也需要归一化吗?

我的场景是训练数据被规范化并序列化并保存在数据库中,当必须完成预测时,序列化的数据被反序列化以获得规范化的numpy数组,然后numpy数组适合在分类器上并且用于预测的输入向量被应用于预测。那么这个输入向量是否也需要进行归一化?如果是这样,怎么做,因为在预测时我没有实际的输入训练数据来正常化?

此外,我正在沿轴= 0,即沿着列正常化。

我正火的代码是:

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

有建议定标器有几个原因的方式来序列preprocessing.normalize

+0

如果您之前SVM的训练进行预处理,那么你当然要预处理每到预测矢量也以相同的预处理器对象(例如同样的意思)用于训练。 – sascha

+0

所以,我要序列化sklearn中的规范器以便规范化输入向量。 –

回答

1

在支持向量机。

  • 在许多优化方法中最好具有相同的比例尺。
  • 许多核函数在内部使用欧几里德距离来比较两个不同的采样(在高斯核中,欧几里得距离处于指数项),如果每个特征具有不同的比例,欧几里得距离仅考虑具有最高规模。

当您将这些功能放在相同的比例尺中时,您必须删除平均值并除以标准偏差。

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

您必须存储训练集中每个要素的均值和标准差,以便在将来的数据中使用相同的操作。

在Python有函数来为你做的:

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

要获取手段和STANDAR偏差:

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

为了标准化,然后训练集(X是一个矩阵,其中每行是数据,每列都有一个特征):

X = scaler.transform(X) 

培训结束后,必须分级前正常化未来的数据:

newData = scaler.transform(newData) 
相关问题