目錄
更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你: https://www.cnblogs.com/nickchen121/p/11686958.html
scikit-learn庫之邏輯回歸
相比較線性回歸,由於邏輯回歸的變種較少,因此scikit-learn庫中的邏輯回歸類就比較少,只有LogisticRegression
、LogisticRegressionCV
和logistic_regression_path
。
接下來將會討論這三者的區別,由於是從官方文檔翻譯而來,翻譯會略有偏頗,有興趣的也可以去scikit-learn官方文檔查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.linear_model ,需要注意邏輯回歸和線性回歸都在sklearn.linear_model
包中。
一、LogisticRegression
1.1 使用場景
邏輯回歸一般使用於分類場景,可以使用參數讓普通的二元分類問題變成多分類問題。
1.2 代碼
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
X, y = load_iris(return_X_y=True)
clf = LogisticRegression(random_state=0, solver='lbfgs', max_iter=100,
multi_class='multinomial')
# 由於迭代更新次數太少,算法無法收斂,報錯
clf.fit(X, y)
/Applications/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:758: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
"of iterations.", ConvergenceWarning)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='multinomial',
n_jobs=None, penalty='l2', random_state=0, solver='lbfgs',
tol=0.0001, verbose=0, warm_start=False)
clf = LogisticRegression(random_state=0, solver='lbfgs', max_iter=1000,
multi_class='multinomial')
clf.fit(X, y)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=1000, multi_class='multinomial',
n_jobs=None, penalty='l2', random_state=0, solver='lbfgs',
tol=0.0001, verbose=0, warm_start=False)
clf.predict(X[:2, :])
array([0, 0])
clf.predict_proba(X[:2, :])
array([[9.81579028e-01, 1.84209573e-02, 1.44796627e-08],
[9.71349907e-01, 2.86500630e-02, 3.01442199e-08]])
clf.score(X, y)
0.9733333333333334
1.3 參數詳解
- penalty:正則化,str類型。由於邏輯回歸的目標函數是基於線性回歸而來,因此該正則化參數可以選擇'l1'和'l2',分別對應L1正則化和L2正則化,兩則作用和線性回歸的正則化項作用類似。默認為'l2'。
- dual:對偶或原始方法,bool類型。只有滿足solver='liblinear'並且penalty='l2'時才可使用對偶方法,即設置dual=True,當樣本數大於特征數的時候,通常設置為False。默認為False。
- tol:停止求解的標准,float類型。求解到多少的時候認為求出最優解,停止求解。默認為0.0001。
- c:正則化系數\(\lambda\)的倒數,float類型。數值越小正則化越強。默認為1.0。
- fit_intercept:截距(偏置單元),bool類型。是否存在截距或者偏置單元。默認為True。
- intercept_scaling:擴展截距,float類型。只有滿足solver='liblinear'並且fit_intercept=True時才有用。默認為1。
- class_weight:類別權重,dict類型或str類型。對於二元分類問題可以使用class_weight={0:0.9,1:0.1},表示0類別權重為0.9,1類別權重為0.1,str類型即為'balanced',模型將根據訓練集自動修改不同類別的權重。默認為None。通常解決下述兩個問題:
- 不同類別數據量不平衡問題,如0類有1個數據,1類有999個數據,如果不考慮權重問題,則模型基本會把所有的未來新樣本預測為1類,因此則可以手動適當增加0類的權重,也可以使用class_weight='balanced'自動提高0類的權重。
- 將癌症人士分類為健康人士的會有很大的風險,有時候寧願讓健康人士被分類為癌症認識,然后再通過人工甄別他們的健康情況,通常這個時候可以適當提高癌症人士的權重。
- random_state:隨機數種子,int類型。僅在solve={'sag','liblinear'}時有用。默認為None。
- solver:優化算法選擇,str類型。共有{'newton-cg','lbfgs','sag','liblinear','saga'}五種選擇,當penalty='l1'時,目標函數將會變得連續不可導,因此只能選擇'liblinear',當penalty='l2'時,則可以選擇{'newton-cg','lbfgs','sag','liblinear','saga'},默認為'liblinear'。其中'liblinear'是坐標軸下降法,適合小數據集;'newton-cg'是牛頓法;'lbfgs'是擬牛頓法;'sag'是隨機梯度下降法,適合大數據集。默認為'liblinear'。
- max_iter:迭代次數,int類型。算法迭代次數,算法迭代到一定次數會收斂。只有solver={'newton-cg','sag','lbfgs'}才有用。默認為100。
- multi_class:多分類,str類型。當solver='liblinear'時,只能選擇'ovr',當solver={'newton-cg','lbfgs','sag','saga'}時,可以選擇'ovr'或'multinomial'。'ovr'相對簡單,速度快,但是分類效果差;'multinomial'分類速度慢,但是分類效果好。默認為'ovr'。
- verbose:日志冗長度,int類型。verbose=0,不輸出訓練過程;verbose=1,輸出部分訓練過程;verbose>1,輸出所有的訓練過程。默認為0。
- warm_start:熱啟動,bool類型。bool=True,每次初始化參數時,使用上一次的fit()擬合后的結果初始化。默認為False。
- n_jobs:並行數。n_jobs=1使用1個cpu運行程序;n_jobs=2,使用2個cpu運行程序;n_jobs=-1,使用所有cpu運行程序。默認為1。
1.4 屬性
- classes:array類型,訓練集中所有類標簽組成的列表。
- coef:array類型,決策函數的系數,如果有多分類就會是k行的系數,其中k是訓練集的類別數。
- intercept_:array類型,截距,二分類就只有一個,多分類就會有n個。
- n_iter_:array類型,實際上迭代次數,即達到收斂時的迭代次數。
1.5 方法
- decision_functino(X):預測樣本X的置信度分數。
- densify():將稀疏矩陣改成稠密矩陣。
- fit(X,y,sample_weight=None):把數據放入模型中訓練模型,其中sample_weight=None是array類型可以對訓練集中實例添加權重,即對訓練集中不同的數據增加不同的權重。
- get_params([deep]):返回模型的參數,可以用於Pipeline中。
- predict(X):預測樣本X的分類類別。
- predict_lot_proba(X):返回樣本X在各個類別上對應的對數概率。
- predict_proba(X):返回樣本X在各個類別上對應的概率。
- score(X,y[,sample_weight]):基於報告決定系數\(R^2\)評估模型。
- set_prams(**params):創建模型參數。
- sparsify():將系數矩陣轉換為稀疏矩陣,調用該方法后再選擇coef_屬性便是稀疏矩陣。
- sample_weight:樣本權重參數。
二、LogisticRegressionCV
LogisticRegressionCV
模型在目標函數和優化方式類似於LogisticRegression
,但是可以自己手動輸入10組、100組參數\(C\),該模型會通過交叉驗證后給你這組參數中最優模型。
三、logistic_regression_path
logistic_regression_path
模型比較特殊,它擬合數據后,不能直接來做預測,只能為擬合數據選擇合適邏輯回歸的系數和正則化系數,一般用在模型選擇的時候。由於不經常使用這個類,所以此處不多贅述。