當前位置:
首頁 > 最新 > Scikit-learn筆記3 邏輯回歸

Scikit-learn筆記3 邏輯回歸

在眾多分類器中,邏輯回歸(Logistic Regression)絕對是應用最廣泛的模型之一。它以良好的性能和穩健的表現成為了機器學習模型的Baseline,即其他模型的表現至少要和它相當,不能比它差。

邏輯回歸作為使用最多的一種廣義線性模型,它將線性的預測值通過logistic函數p=1/(1+e^-y)=e^y/(e^y+1)映射到0-1的範圍內,轉換成概率,當概率大於設定的閾值則為1,反之則為0。通過這種方式,邏輯回歸可以解決二分類問題(多分類是Softmax回歸)。logistic函數形式如下:

Scikit-learn中,邏輯回歸模型位於sklearn.linear_model.logistic文件夾下。下面打開Ipython notebook導入sklearn包,如下:

定義一個LogisticRegression類,列印出它的默認參數,解釋如下:

C:懲罰項係數的倒數。值越小正則化項越大,通過大的C值削弱了正則化的影響,過擬合沒有得到控制,模型效果較差。

class_weight:標籤各類別的權重,默認每個類別一樣,如果設為balanced則權重與類別出現的頻次呈反比;也可以傳入字典,如{"yes":0.7, "no":0.3}。

dual:目標函數的對偶形式,只有當L2正則化項且solver="iiblinear『才為對偶形式,默認為false,則求解目標函數的原始形式。

fit_intercept:是否擬合截距項,默認true,大多數決策邊界函數都不會過原點,有截距項,除非對特徵進行了去均值等中心化操作,才不需要。

intercept_scaling:浮點數,降低截距項的影響,solver="iiblinear『才需要。

max_iter:優化目標函數時的迭代次數,默認100。

multi_class:多分類策略,默認為ovr,one-vs-rest,比如有a,b,c三類,ovr將這個標籤變成3個:是a不是a、是b不是b、是c不是c分別預測。

n_jobs:單機則是能使用的cpu核心數,設為-1則訓練時用到所有核心,實現並發操作,提升效率。

penalty:默認為L2,也可以是L1。

random_state:隨機種子,設為某個正整數,則每次訓練的樣本相同,便於模型之間的比較,如果為None,則每次訓練樣本可能不同。

solver:各種求解最優化的演算法,例如:iiblinear-線性規劃法、newton-cg牛頓法、lbfgs-擬牛頓法、sag-隨機平均梯度下降法。

註:小規模數據用iiblinear,大規模數據用sag,newton-cg/lbfgs/sag只適用L2正則的情況。

tol:一個很小的浮點數,判斷是否停止迭代,小於則停止。

verbose:是否輸出訓練日誌。

warm_start:熱啟動。是否使用前次迭代的結果,是則接著前一次繼續訓練,否則從頭開始。

這些參數中,n_jobs、random_state、verbose、warm_start為通用參數,大多數模型都會有。模型的屬性有:

coef_:模型係數向量,越大表示越有影響力。

intercept_:截距項

n_iter:實際迭代次數

分類器的方法有如下幾個,他們不是邏輯回歸獨有,sklearn中的模型幾乎都用這些方法進行訓練和預測。

fit(X,y):傳入特徵和標籤開始訓練

predict(X):預測標籤

predict_proba(X):預測各個類別的概率值,Kaggle比賽要求你提交每個類別的預測概率,可以用此方法

score(X,y):模型預測的準確率accuracy

下面用Kaggle入門比賽泰坦尼克數據集來演示邏輯回歸模型。數據概況如下:

PassengerId:只是個乘客序號;

Survived:最終是否存活(標籤);

Pclass:艙位,1是頭等艙,3是最低等,從電影里看,這個影響還是挺大的;

Name:乘客姓名;

Sex:性別,應該影響很大;

Age:年齡,有一部分數據缺失;

SibSp:一同上船的兄弟姐妹或配偶;

Parch:一同上船的父母或子女;

Ticket:船票信息,比較亂,完全看不出有任何用處;

Fare:乘客票價,這個數據應該和Pclass有一定對應關係;

Cabin:客艙編號,缺失很多;

Embarked:上船地點,主要是S(南安普頓)、C(瑟堡)、Q(皇后鎮)。

首先導入原始數據集,有891條觀測和12個特徵。如下:

經過數據清洗後的數據集去除了Id和Name等無用特徵,將性別和上船地點轉為獨熱編碼。

生成訓練集分開特徵和標籤。

接著從sklearn的model_selection包中importcross_val_score用於做交叉驗證,評估模型效果,由於數據量較小,此處設置CV=3。Kaggle的測試集沒有標籤,所以只能評估訓練集本身。

先來調試超參數C,其他參數固定如下。結果顯示最大的f1值對應的C=0.1。

確定C=0.1後,保持其他參數不變,來調試優化器solver,分別嘗試牛頓法、擬牛頓和隨機梯度下降三種適合L2正則化的優化方法,可見sag效果最差。

最後,將優化器調整為lbfgs,其它參數不變,來調整迭代次數,默認為100次,當增大到下圖的150次後,f1值有了小幅的提高,但繼續增加迭代次數則無變化。如下:

當我們使用cross_val_score交叉驗證時,無需手動調用fit(X,y)擬合模型,也不需要用predict(X,y)去做預測。還提供了多種評價指標供用戶選擇。如需要獲得模型的係數和截距項,就要用fit()方法訓練模型,用f1=0.74的clf訓練如下:

邏輯回歸中還有一些指標如優勢比(Odd ratio)、負似然對數值等,sklearn並未提供,讀者可以自行編寫代碼實現。為了比較模型的效果,後續分類器的文章都將使用泰坦尼克數據集。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 挖挖機ML 的精彩文章:

TAG:挖挖機ML |