虽然libsvm提供了数据缩放的工具,但是在Scikit-Learn中(它应该基于SVC分类器使用libSVM),我找不到缩放数据的方法。
基本上,我想使用4个特征,其中3个特征的取值范围从0到1,而最后一个特征是一个"大"且高度变化的数字。
如果我在libSVM中包含第四个特征(使用easy.py脚本,它会自动缩放我的数据),我会得到一些非常好的结果(96%的准确率)。 如果我在Scikit-Learn中包含第四个变量,则准确率将下降到约78% - 但是如果我排除它,则会得到与排除该特征时在libSVM中获得的相同结果。因此,我相当确定这是一个缺少缩放的问题。
如何在程序中复制(即不调用svm-scale)SVM的缩放过程?
Scaler
类,你可以计算出训练数据的均值和标准差,然后将相同的转换应用到测试数据。 - MaehlerScaler
而不是独立函数scale
。可以将Scaler
插入到管道中,例如:scaling_svm = Pipeline([("scaler", Scaler()), ("svm", SVC(C=1000))])
。 - Fred FooPipeline
中,Scaler
是否会将标准化应用于训练和测试数据?或者它是先对整个数据集进行标准化,然后再输入到svm
中? - Francis