繁体   English   中英

在scikit-learn中拟合分类器之前进行特征缩放的必要性

[英]The necessity of feature scaling before fitting a classifier in scikit-learn

我曾经相信scikit-learnLogistic回归分类器(以及SVM )会在训练之前自动标准化我的数据。 我之所以相信它的原因是因为传递给LogisticRegression构造函数的正则化参数C :如果没有特征缩放,应用正则化(我理解它)是没有意义的。 为了使正规化工作正常,所有功能都应该具有可比性。 因此,我曾经假设在训练数据X上调用LogisticRegression.fit(X)时, fit方法首先执行特征缩放,然后开始训练。 为了测试我的假设,我决定手动扩展X的功能,如下所示:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X)
X_std = scaler.transform(X)

然后我用正则化参数C初始化了一个LogisticRegression对象:

from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression(C=10.0, random_state=0)

我发现在X上训练模型并不等同于在X_std上训练模型。 也就是说,由模型制作的模型

log_reg.fit(X_std, y)

与产生的模型不相似

log_reg.fit(X, y)

这是否意味着scikit-learn在培训之前没有标准化功能? 或者它可以扩展,但通过应用不同的程序? 如果scikit-learn不执行特征缩放,那么它与要求正则化参数C一致性如何? 我是否应该在拟合模型之前每次手动标准化我的数据以使正则化有意义?

来自以下注释: http//scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html

我假设您需要自己预处理数据(例如,使用sklearn.preprocessing中的缩放器。)

求解器:{'newton-cg','lbfgs','liblinear','sag'}

用于优化问题的算法。 对于小数据集,'liblinear'是一个不错的选择,而'sag'对于大数据集来说更快。

对于多类问题,只有'newton-cg'和'lbfgs'处理多项损失; 'sag'和'liblinear'仅限于一对一休息方案。

'newton-cg','lbfgs'和'sag'只处理L2惩罚。

请注意,“sag”快速收敛仅在具有大致相同比例的特征上得到保证。 您可以使用sklearn.preprocessing中的缩放器预处理数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM