我使用的是scikit-learn的当前稳定版本0.13。我正在使用类sklearn.svm.LinearSVC
将线性支持向量分类器应用于一些数据。
在scikit learn文档中的chapter about preprocessing中,我读到了以下内容:
在学习算法的目标函数中使用的许多元素(例如支持向量机的径向基函数核或线性模型的l1和l2正则化器)都假设所有特征都以零为中心,并且具有相同阶数的方差。如果一个特征的方差比其他特征大几个数量级,它可能会控制目标函数,并使估计器无法像预期的那样正确地从其他特征中学习。
问题1:通常对支持向量机是有用的标准化,也适用于像我这样具有线性核函数的支持向量机?
问题2:据我所知,我必须计算训练数据的平均值和标准差,并使用类sklearn.preprocessing.StandardScaler
对测试数据应用相同的转换。然而,我不明白的是,在将训练数据提供给SVM分类器之前,我是需要对训练数据也进行转换,还是只对测试数据进行转换。
也就是说,我是否必须这样做:
scaler = StandardScaler()
scaler.fit(X_train) # only compute mean and std here
X_test = scaler.transform(X_test) # perform standardization by centering and scaling
clf = LinearSVC()
clf.fit(X_train, y_train)
clf.predict(X_test)
或者我必须这样做:
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train) # compute mean, std and transform training data as well
X_test = scaler.transform(X_test) # same as above
clf = LinearSVC()
clf.fit(X_train, y_train)
clf.predict(X_test)
简而言之,我是否必须对训练数据使用scaler.fit(X_train)
或scaler.fit_transform(X_train)
才能使用LinearSVC
获得合理的结果
https://stackoverflow.com/questions/14688391
复制相似问题