13

虽然 libsvm 提供了用于缩放数据的工具,但使用 Scikit-Learn(它应该基于 SVC 分类器的 libSVM)我发现无法缩放我的数据。

基本上我想使用 4 个特性,其中 3 个范围从 0 到 1,最后一个是一个“大”的高度可变的数字。

如果我在 libSVM 中包含第四个功能(使用自动缩放数据的 easy.py 脚本),我会得到一些非常好的结果(96% 的准确度)。如果我在 Scikit-Learn 中包含第四个变量,则准确度会下降到 ~78%——但如果我排除它,我会得到与排除该特性时在 libSVM 中得到的结果相同的结果。因此,我很确定这是缺少缩放的问题。

如何以编程方式(即不调用 svm-scale)复制 SVM 的缩放过程?

4

2 回答 2

9

您在以下位置具有该功能sklearn.preprocessing

>>> from sklearn import preprocessing
>>> X = [[ 1., -1.,  2.],
...      [ 2.,  0.,  0.],
...      [ 0.,  1., -1.]]
>>> X_scaled = preprocessing.scale(X)

>>> X_scaled                                          
array([[ 0.  ..., -1.22...,  1.33...],
       [ 1.22...,  0.  ..., -0.26...],
       [-1.22...,  1.22..., -1.06...]])

然后数据将具有零均值和单位方差。

于 2012-11-10T17:08:48.117 回答
0

您也可以尝试StandardScaler数据缩放:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(Xtrain) # where X is your data to be scaled
Xtrain = scaler.transform(Xtrain)
于 2020-10-12T16:32:46.213 回答