matlab中的数据缩放算法

Data scaling algorithms in matlab

我是数据处理和统计方面的新手,所以我有一些问题不知道去哪里 post,我希望这是正确的地方。

我目前正在从事一个机器学习项目。我有一些数据,我想使用 SVM。首先,我认为我需要应用缩放将我的数据放入 [0;1] 区间。我应用了这个公式:

n = (e - e_min)/(e_max - e_min)

然后我对列的每个元素应用均值归一化(列的元素 - 此列的均值)。

之后,我使用了SVM,得到了很好的预测结果。但我想提高结果的准确性。那我该怎么办?我想我可以找到更好的缩放算法,但我不知道......你知道可以帮助我的缩放算法吗?或者有任何其他想法来改进我对 SVM 的预测?

谢谢。

您可以尝试不同的归一化方法。常见的包括 L-norms, sometimes also called P-norms or simply linear norms

  1. L-1范数(曼哈顿范数)除以列之和
  2. L-2范数(欧氏范数)除以列的欧氏长度
  3. L-无穷范数(最大范数)除以列的最大值

一种更通用的方法称为feature selection or feature learning. This attempts to identify which features are actually valuable to your classifier. Feature Selection methods in MATLAB?提供了一些建议。

另一个常见的尝试是为 SVM 使用不同的内核。内核将您的特征转换为不同的特征 space,这可能(或可能不会)使它们更适合您的 SVM。 Matlab 的 svmtrain function has several kernel options in the 'kernel_function' parameter. The documentation also provides a tutorial 用于使用高斯内核。

提高分类器的准确性通常是测试归一化方法、特征选择方法和内核的多种组合的过程。通常,您还会测试几个不同的分类器。

我建议将您的结果与 SVM 与决策森林或其他非线性方法(如 AdaBoost)进行比较。 SVM 对于线性可分数据(或与内核线性可分的数据)非常强大,但如果您的数据不是线性可分的,那么使用规范和特征选择只会在一定程度上改进分类。