我是数据处理和统计数据的新手,所以我有一些问题,我不知道在哪里发布,我希望这是正确的地方。
我目前正在开展机器学习项目。我有一些数据,我想使用SVM。首先,我认为我需要应用缩放以将我的数据放入[0; 1]间隔。我应用了这个公式:
n = (e - e_min)/(e_max - e_min)
然后我为列的每个元素应用了均值归一化(列的元素 - 该列的平均值)。
之后,我使用SVM,我得到了很好的预测结果。但我想提高结果的准确性。那我该怎么办?我想我可以找到一个更好的缩放算法,但我不知道......你知道缩放算法可以帮助我吗?或者有任何其他想法来改进我的SVM预测?
谢谢。
答案 0 :(得分:0)
您可以尝试不同的规范化方法。常见的包括L-norms, sometimes also called P-norms or simply linear norms:
更通用的方法称为feature selection or feature learning。这会尝试确定哪些功能对您的分类器有实际价值。 Feature Selection methods in MATLAB?提供了一些建议。
另一个常见的尝试是为SVM使用不同的内核。内核将您的功能转换为不同的功能空间,这些功能空间可能(或可能不会)使它们更适合您的SVM。 Matlab的svmtrain
函数在'kernel_function'参数中有几个内核选项。该文档还提供了使用高斯内核的tutorial。
提高分类器的准确性通常是测试规范化方法,特征选择方法和内核的多种组合的过程。通常,您也可以测试几种不同的分类器。
我建议将结果与SVM与Decision Forest或其他非线性方法(如AdaBoost)进行比较。 SVM对于线性可分数据(或与内核线性分离的数据)非常强大,但如果您的数据不是线性可分的,那么使用规范和特征选择只会改进分类到一定程度。