标准化 SVM 的特征值

Posted

技术标签:

【中文标题】标准化 SVM 的特征值【英文标题】:Normalizing feature values for SVM 【发布时间】:2013-12-28 16:34:46 【问题描述】:

我一直在玩一些 SVM 实现,我想知道 - 将特征值归一化以适应一个范围的最佳方法是什么? (从 0 到 1)

假设我有 3 个特征值在以下范围内:

    3 - 5.

    0.02 - 0.05

    10-15.

如何将所有这些值转换为 [0,1] 的范围?

如果在训练期间,我将遇到的特征编号 1 的最大值是 5,而在我开始在更大的数据集上使用我的模型后,我会偶然发现高达 7 的值?那么在转换后的范围内,会超过1...

如何在训练期间对值进行归一化,以解决“野外值”超过模型在训练期间“看到”的最高(或最低)值的可能性?当这种情况发生时,模型将如何反应以及我如何使其正常工作?

【问题讨论】:

【参考方案1】:

除了 Tim 提供的缩放到单位长度的方法外,standardization 最常用于机器学习领域。请注意,当您的测试数据出现时,使用训练样本的平均值和标准差来进行缩放更有意义。如果你有大量的训练数据,假设它们服从正态分布是安全的,所以新的测试数据超出范围的可能性不会那么高。有关详细信息,请参阅此post。

【讨论】:

【参考方案2】:

通过将向量转换为单位向量来对其进行归一化。这会在特征的相对值上训练 SVM,而不是幅度。归一化算法适用于任何值的向量。

要转换为单位向量,divide each value by the length of the vector。例如,[4 0.02 12] 的向量长度为​​ 12.6491。那么归一化向量是[4/12.6491 0.02/12.6491 12/12.6491] = [0.316 0.0016 0.949]

如果“在野外”我们遇到[400 2 1200] 的向量,它将归一化为与上述相同的单位向量。特征的大小被归一化“抵消”了,我们得到了介于 0 和 1 之间的相对值。

【讨论】:

谢谢。这很有帮助。 如果这解决了您的问题,请accept the answer 让其他人知道您不再需要帮助。 至少还有另一种扩展功能的方法 - 看看这些methods

以上是关于标准化 SVM 的特征值的主要内容,如果未能解决你的问题,请参考以下文章

如何标准化 SVM 的 tf-idf 向量?

SVM 测试 - 测试数据的标准化 [重复]

机器学习:SVM(scikit-learn 中的 SVM:LinearSVC)

用一个简单的例子比较SVM,MARS以及BRUTO(R语言)

OpenCV和SVM分类器在自动驾驶中的车辆检测

SVM 分类 - R 中的归一化