邏輯回歸演算法Sklearn文件介紹

2021-10-07 02:27:26 字數 3595 閱讀 1912

api文件

sklearn.linear_model.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』:正則化懲罰項,字元型,『l1』,『l2』可選,預設『l2』。

『dual』:對偶或原始方法,bool型別,預設為false。對偶方法只用在求解線性多核(liblinear)的l2懲罰項上。當樣本數量》樣本特徵的時候,dual通常設定為false。

『tol』:停止求解的標準,float型別,預設為1e-4。就是求解到多少的時候,停止,認為已經求出最優解。

『c』:正則化係數λ的倒數,float型別,預設為1.0。必須是正浮點型數。像svm一樣,越小的數值表示越強的正則化。

『fit_intercept』:是否存在截距或偏差,bool型別,預設為true。

『intercept_scaling』:僅在正則化項為』liblinear』,且fit_intercept設定為true時有用。float型別,預設為1。

『class_weight』:用於表示分類模型中各型別的權重,可以是乙個字典或者』balanced』字串,預設為不輸入,也就是不考慮權重,即為none。如果選擇輸入的話,可以選擇balanced讓演算法庫自己計算型別權重,或者自己輸入各個型別的權重。舉個例子,比如對於0,1的二元模型,我們可以定義class_weight=,這樣型別0的權重為90%,而型別1的權重為10%。如果class_weight選擇balanced,那麼演算法庫會根據訓練樣本量來計算權重。某種型別樣本量越多,則權重越低,樣本量越少,則權重越高。當class_weight為balanced時,類權重計算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples為樣本數,n_classes為類別數量,np.bincount(y)會輸出每個類的樣本數,例如y=[1,0,0,1,1],則np.bincount(y)=[2,3]。

那麼class_weight有什麼作用呢?

在分類模型中,我們經常會遇到兩類問題:

第一種是誤分類的代價很高。比如對合法使用者和非法使用者進行分類,將非法使用者分類為合法使用者的代價很高,我們寧願將合法使用者分類為非法使用者,這時可以人工再甄別,但是卻不願將非法使用者分類為合法使用者。這時,我們可以適當提高非法使用者的權重。

第二種是樣本是高度失衡的,比如我們有合法使用者和非法使用者的二元樣本資料10000條,裡面合法使用者有9995條,非法使用者只有5條,如果我們不考慮權重,則我們可以將所有的測試集都**為合法使用者,這樣**準確率理論上有99.95%,但是卻沒有任何意義。這時,我們可以選擇balanced,讓演算法庫自動提高非法使用者樣本的權重。提高了某種分類的權重,相比不考慮權重,會有更多的樣本分類劃分到高權重的類別,從而可以解決上面兩類問題。

『random_state』:隨機數種子,int型別,可選引數,預設為無,僅在正則化優化演算法為sag,liblinear時有用。

『solver』:優化演算法選擇引數,只有五個可選引數,即newton-cg,lbfgs,liblinear,sag,saga。預設為liblinear。solver引數決定了我們對邏輯回歸損失函式的優化方法,有四種演算法可以選擇,分別是:

『liblinear』:使用了開源的liblinear庫實現,內部使用了座標軸下降法來迭代優化損失函式。

『lbfgs』:擬牛頓法的一種,利用損失函式二階導數矩陣即海森矩陣來迭代優化損失函式。

『newton-cg』:也是牛頓法家族的一種,利用損失函式二階導數矩陣即海森矩陣來迭代優化損失函式。

『sag』:即隨機平均梯度下降,是梯度下降法的變種,和普通梯度下降法的區別是每次迭代僅僅用一部分的樣本來計算梯度,適合於樣本資料多的時候。

『saga』:線性收斂的隨機優化演算法的的變重。

『max_iter』:演算法收斂最大迭代次數,int型別,預設為10。僅在正則化優化演算法為newton-cg, sag和lbfgs才有用,演算法收斂的最大迭代次數。

『multi_class』:分類方式選擇引數,str型別,可選引數為ovr和multinomial,預設為ovr。ovr即前面提到的one-vs-rest(ovr),而multinomial即前面提到的many-vs-many(mvm)。如果是二元邏輯回歸,ovr和multinomial並沒有任何區別,區別主要在多元邏輯回歸上。

『verbose』:日誌冗長度,int型別。預設為0。就是不輸出訓練過程,1的時候偶爾輸出結果,大於1,對於每個子模型都輸出。

『warm_start』:熱啟動引數,bool型別。預設為false。如果為true,則下一次訓練是以追加樹的形式進行(重新使用上一次的呼叫作為初始化。

『n_jobs』:並行數。int型別,預設為1。1的時候,用cpu的乙個核心執行程式,2的時候,用cpu的2個核心執行程式。為-1的時候,用所有cpu的核心執行程式。

應用案例演示

下面我們繼續使用sklearn.datasets庫中的iris資料集,來熟悉下logisticsregression演算法的流程。

#匯入我們要使用的python庫

import numpy as np

from sklearn import datasets

from sklearn.linear_model import logisticregression

#匯入iris資料集,並提取特徵以及標籤值

iris = datasets.load_iris()

x = iris.data

y = iris.target

#引入我們的邏輯回歸演算法並對資料進行訓練

clf = logisticregression(random_state = 0,solver = 'lbfgs',multi_class = 'multinomial').fit(x,y)

#檢視下演算法的**值

clf.predict(x[:2,:])

[0,0]

#檢視下演算法**的概率值,結果為屬於三個類別的概率值

clf.predict_proba(x[:2,:])

array([[9.81797141e-01, 1.82028445e-02, 1.44269293e-08],

[9.71725476e-01, 2.82744937e-02, 3.01659208e-08]])

#檢視演算法的準確率

clf.score(x,y)

0.9733333333333334

logisticregression演算法的優缺點

優點:簡單易實現,運算效率高。

缺點:容易欠擬合,分類精度可能不高。

logisticregression演算法中的引數非常多,目前我是沒怎麼理解這些引數,這個就需要我們在以後的應用當中去體會這些引數的作用,然後做優化調整。

引數的說明引用csdn部落格:

sklearn邏輯回歸

邏輯回歸自己的理解 1.對機器學習的認識 引用大牛的觀點 機器學習演算法沒有所謂的優劣,也沒有絕對的高效能,只有在特定場景 資料和特徵下更適合的機器學習演算法。2.機器學習應用方法 應用機器學習,千萬不要一上來就試圖做到完美,先做乙個基本的model出來,再進行後續的分析步驟,一步步提高。所謂後續步...

sklearn之邏輯回歸

邏輯回歸 import numpy as np import matplotlib.pyplot as plt from sklearn.metrics import classification report 評估分類結果的指標 from sklearn import preprocessing ...

sklearn實現邏輯回歸

首先我們來看下面一組資料集 前面的x1與x2都表示的是年收入和年齡這兩個因素決定的是否買車的結果。開始 部分,我們先輸入x和y的變數,開始輸入資料 from sklearn import linear model x 20,3 23,7 31,10 42,13 50,7 60,5 y 0,1,1,1...