是否需要规范化输入向量以便在SVM中进行预测?

时间:2016-11-10 15:23:59

标签: machine-learning svm normalization

对于不同比例的输入数据,我理解用于训练分类器的值必须标准化以进行正确分类(SVM)。

用于预测的输入向量是否也需要进行标准化?

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

我也沿着轴= 0,即沿着列进行标准化。

我的规范化代码是:

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

有没有办法序列化preprocessing.normalize

1 个答案:

答案 0 :(得分:1)

在SVM中,建议使用缩放器,原因有几个。

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

当您将要素放在相同比例时,必须删除均值并除以标准差。

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

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

在python中,你有能力为你做到这一点:

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

获得手段和标准偏差:

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

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

X = scaler.transform(X)

培训结束后,您必须在分类前对未来数据进行标准化:

newData = scaler.transform(newData)