sklearn.linear_model 文檔
http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1,
class_weight=None, random_state=None, solver=’warn’, max_iter=100, multi_class=’warn’,
verbose=0, warm_start=False, n_jobs=None
-
penalty : str,‘l1’或’l2’,默認:‘l2’
用於指定正則化中使用的規範。 ‘newton-cg’,'sag’和’lbfgs’解算器只支持l2正則化。
一般penalty選擇L2正則化就夠了。如果選擇L2正則化發現還是過擬合,即預測效果差的時候,可以考慮L1正則化。
如果模型的特徵非常多,希望一些不重要的特徵係數歸零,從而讓模型係數稀疏化的話,也可以使用L1正則化。 -
solver : str,{‘newton-cg’,‘lbfgs’,‘liblinear’,‘sag’,‘saga’},默認:‘liblinear’。
用於優化問題的算法。
對於小數據集,‘liblinear’是一個不錯的選擇,而’sag’和’saga’對於大數據集來說更快。
對於多類問題,只有’newton-cg’,‘sag’,'saga’和’lbfgs’處理多項損失。
‘newton-cg’,'lbfgs’和’sag’只處理L2 penalty,而’liblinear’和’saga’處理L1 penalty。 -
multi_class : str,{‘ovr’,‘multinomial’,‘auto’},默認值:‘ovr’
multi_class參數決定了我們分類方式的選擇,有ovr和multinomial兩個值可以選擇,默認是 ovr。
ovr即one-vs-rest(OvR),而multinomial即many-vs-many(MvM)。如果是二元邏輯迴歸,ovr和multinomial並沒有任何區別,區別主要在多元邏輯迴歸上。OvR的思想很簡單,無論你是多少元邏輯迴歸,我們都可以看做二元邏輯迴歸。具體做法是,對於第K類的分類決策,我們把所有第K類的樣本作爲正例,除了第K類樣本以外的所有樣本都作爲負例,然後在上面做二元邏輯迴歸,得到第K類的分類模型。其他類的分類模型獲得以此類推。
而MvM則相對複雜,這裏舉MvM的特例one-vs-one(OvO)作講解。如果模型有T類,我們每次在所有的T類樣本里面選擇兩類樣本出來,不妨記爲T1類和T2類,把所有的輸出爲T1和T2的樣本放在一起,把T1作爲正例,T2作爲負例,進行二元邏輯迴歸,得到模型參數。我們一共需要T(T-1)/2次分類。
從上面的描述可以看出OvR相對簡單,但分類效果相對略差(這裏指大多數樣本分佈情況,某些樣本分佈下OvR可能更好)。而MvM分類相對精確,但是分類速度沒有OvR快。
如果選擇了ovr,則4種損失函數的優化方法liblinear,newton-cg, lbfgs和sag都可以選擇。但是如果選擇了multinomial,則只能選擇newton-cg, lbfgs和sag了。
-
C : float,默認值:1.0
-
dual : bool,默認值:False
當n_samples> n_features時,首選dual = False。 -
max_iter : int,默認值:100
-
n_jobs : int或None,可選(默認=無)
如果multi_class =‘ovr’“,則在對類進行並行化時使用的CPU核心數。solver無論是否指定了“multi_class”,當設置爲“liblinear” 時,將忽略此參數。-1表示使用所有處理器。
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(random_state=0, solver='lbfgs',
multi_class='multinomial')
clf.fit(X, y)
clf.predict(X[:2, :]
clf.predict_proba(X[:2, :])