3

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]。

4

2 回答 2

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())])
于 2012-10-03T21:17:31.387 回答
1

我认为您正在寻找StandardScaler,至少对于 [-1,1] 情况。

于 2012-10-03T21:15:49.963 回答