[TOC] 更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlhtml
scikit-learn庫之邏輯迴歸
相比較線性迴歸,因爲邏輯迴歸的變種較少,所以scikit-learn庫中的邏輯迴歸類就比較少,只有LogisticRegression
、LogisticRegressionCV
和logistic_regression_path
。python
接下來將會討論這三者的區別,因爲是從官方文檔翻譯而來,翻譯會略有偏頗,有興趣的也能夠去scikit-learn官方文檔查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.linear_model ,須要注意邏輯迴歸和線性迴歸都在sklearn.linear_model
包中。算法
1、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:**樣本權重參數。
2、LogisticRegressionCV
LogisticRegressionCV
模型在目標函數和優化方式相似於LogisticRegression
,可是能夠本身手動輸入10組、100組參數$C$,該模型會經過交叉驗證後給你這組參數中最優模型。dom
3、logistic_regression_path
logistic_regression_path
模型比較特殊,它擬合數據後,不能直接來作預測,只能爲擬合數據選擇合適邏輯迴歸的係數和正則化係數,通常用在模型選擇的時候。因爲不常用這個類,因此此處很少贅述。機器學習