scikit支持缩放[0,1]或[-1,1]之间的特征

时间:2012-10-03 21:00:57

标签: python scikit-learn svm

scikit-learn的SVM基于LIBSVM。 LIBSVM / SVM要求应缩放数据,并建议特征值应在两个范围[0,1]或[-1,1]之一中。也就是说,在典型的矩阵中,每列都是一个特征,并且每列都进行缩放。

LIBSVM FAQ建议进行简单的缩放以获得[0,1]之间的功能:

x'=(x-min)/(Max-min)

scikit-learn是否支持这种“简单缩放”?是否有其他建议用于扩展要与SVM和RBF内核一起使用的功能。任何参考?我找到了一篇名为“支持向量分类的实用指南”的参考文章,该文章基于LIBSVM,他们建议缩放到[0,1]或[-1,1]。

2 个答案:

答案 0 :(得分:5)

是的,包含此功能。您描述的确切公式将在下一版本中显示为sklearn.preprocessing.MinMaxScaler。目前,sklearn.preprocessing.Scaler(将在下一个版本中重命名为StandardScaler,但旧名称将保留在后面以进行向后比较)中心和比例要素具有均值0和方差1,这应该足够好用于将数据传递给SVM学习者。

此外,sklearn.preprocessing.Normalizer(以及用于文本分类的TfidfVectorizer)将每个样本的值规范化为[0,1]范围。这相当于文本分类和信息检索中常见的长度标准化。

您可以使用Pipeline对象构建一个居中,缩放的SVM分类器:

clf = Pipeline([('scale', Scaler()),
                ('svm', SVC())])

答案 1 :(得分:1)

我认为你正在寻找StandardScaler,至少在[-1,1]案例中。