SVM 中的预测是否需要标准化输入向量?

Jib*_*hew 3 machine-learning normalization svm

对于不同规模的输入数据,我知道用于训练分类器的值必须进行标准化才能正确分类(SVM)。

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

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

另外,我沿着 axis=0 ,即沿着列进行标准化。

我的规范化代码是:

preprocessing.normalize(data, norm='l2',axis=0)
Run Code Online (Sandbox Code Playgroud)

有没有办法序列化 preprocessing.normalize

Rob*_*Rob 5

在 SVM 中,出于多种原因推荐使用缩放器。

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

当您将特征放在相同的比例中时,您必须删除平均值并除以标准差。

        xi - mi
xi -> ------------
         sigmai
Run Code Online (Sandbox Code Playgroud)

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

在 python 中,你有函数可以为你做到这一点:

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

要获得均值和标准差:

scaler = preprocessing.StandardScaler().fit(X)
Run Code Online (Sandbox Code Playgroud)

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

X = scaler.transform(X)
Run Code Online (Sandbox Code Playgroud)

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

newData = scaler.transform(newData)
Run Code Online (Sandbox Code Playgroud)