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]。
答案 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]案例中。