簡體   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