入門小菜鳥,希望像做筆記記錄自己學(xué)的東西,也希望能幫助到同樣入門的人,更希望大佬們幫忙糾錯啦~侵權(quán)立刪。?
目錄
一、邏輯回歸簡介與用途
二、邏輯回歸的理論推導(dǎo)
1、問題描述和轉(zhuǎn)化
2、初步思路:找一個線性模型來由X預(yù)測Y
3、Sigmoid函數(shù)(邏輯函數(shù))
4、剛剛的線性模型與Sigmoid函數(shù)合體
5、條件概率
6、極大似然估計
7、求最小值時的w的兩種方法——補充說明
三、多類邏輯回歸
四、正則化
1、L1正則化
2、L2正則化
五、邏輯回歸python實現(xiàn)
1、庫函數(shù)LogisticRegression中的常用參數(shù)的介紹
2、實際應(yīng)用
?六、邏輯回歸的優(yōu)缺點
1、優(yōu)點
2、缺點
一、邏輯回歸簡介與用途
邏輯回歸是線性分類器(線性模型)—— 主要用于二分類問題
【拓:如何判別一個模型是否為線性模型
理論上分辨:線性模型是可以用曲線來擬合樣本的,但是分類的決策邊界一定是直線的
數(shù)學(xué)表達(dá)上分辨:表達(dá)式中的系數(shù)w乘上自變量x(一個w系數(shù)影響一個自變量維度x)】
二、邏輯回歸的理論推導(dǎo)
前方n多公式預(yù)警(如果推錯了麻煩跟我說一下,謝謝啦~)
1、問題描述和轉(zhuǎn)化
??一個二分類問題給的條件:
分類標(biāo)簽Y {0,1},特征自變量X{x1,x2,……,xn}
如何根據(jù)我們現(xiàn)在手頭上有的特征X來判別它應(yīng)該是屬于哪個類別(0還是1)
??問題的求解轉(zhuǎn)化為:
我們?nèi)绾握乙粋€模型,即一個關(guān)于X的函數(shù)來得出分類結(jié)果(0或1)
2、初步思路:找一個線性模型來由X預(yù)測Y
但是很明顯,這樣的函數(shù)圖像是類似一條斜線,難以達(dá)到我們想要的(0或1)的取值
所以我們引入了一個特殊的函數(shù):
3、Sigmoid函數(shù)(邏輯函數(shù))
??公式
??圖像
?由圖像可見,這樣我們就能很好的分類(0或1)
4、剛剛的線性模型與Sigmoid函數(shù)合體
??第一步:
??第二步:
這樣我們就把取值控制在了0或1上,初步達(dá)成了我們的目標(biāo)。
5、條件概率
我們令??,則可得??
若我們將y視為樣本x作為正例的概率,那么1-y則為樣本x作為反例的概率,二者的比值為,
因此??被稱為對數(shù)幾率。
因此有:
所以推出了:
6、極大似然估計
思想:如果一個事件發(fā)生了,那么發(fā)生這個事件的概率就是最大的。對于樣本i,其類別為。對于樣本i,可以把h(Xi)看成是一種概率。yi對應(yīng)是1時,概率是h(Xi)(即Xi屬于1的概率,即上面的p(Y=1|X));yi對應(yīng)是0時,概率是1-h(Xi)(Xi屬于0的概率,即上面的p(Y=0|X))。
即有:
max[??]
其中i是從0到k(k:屬于類別1的個數(shù)),i從k+1到n(屬于類別0的個數(shù)為n-k)。由于y是標(biāo)簽0或1,所以上面的式子也可以寫成:
max [??]
對它取對數(shù),并且除以樣本總數(shù)n(減少梯度爆炸出現(xiàn)的概率),再乘以負(fù)1(將求最大值問題轉(zhuǎn)化為求最小值問題,即轉(zhuǎn)化為求下式的最小值):
化簡得:
接下來的任務(wù)就是求解當(dāng)上式最小時的w啦~
7、求最小值時的w的兩種方法——補充說明
??方法一:梯度下降法(一階收斂)
通過 J(w) 對 w 的一階導(dǎo)數(shù)來找下降方向,并以迭代的方式來更新參數(shù)
(這里的k代表的是第k次迭代;是我們設(shè)定的學(xué)習(xí)率;就是我們上面所說的?)
停止迭代的條件可以是:
(1)到達(dá)最大迭代次數(shù)
(2)到達(dá)規(guī)定的誤差精度,即
小于等于我們設(shè)定的閾值
??方法二:牛頓法(二階收斂)
思想:在現(xiàn)有極小值點的估計值的附近對 f(x) 做二階泰勒展開,進(jìn)而找到極小值點的下一個估計值。
假設(shè)??為當(dāng)前的極小值點的估計值,則該點的J(w)二階泰勒展開為:
(注意:這里不是絕對等于,而是近似等于)
當(dāng)?Δw?無線趨近于0時上式絕對相等,此時上式等價于(相當(dāng)于上式可以對求導(dǎo)):
(但是這里我有點不太明白:為什么上式中的
可以當(dāng)?Δw?無線趨近于0時近似抵消掉,為什么后面的就可以留下來,而不是當(dāng)成0處理掉,腦袋瓜亂亂的,希望有朋友能跟我說一下,謝謝~)
, 即
感謝@weixin_56957451博友的提醒,以上塊的第二種思路是:
假設(shè)??為當(dāng)前的極小值點的估計值,則該點的J(w)一階泰勒展開為:
然后再進(jìn)行求導(dǎo),令導(dǎo)函數(shù)為0:
即
同樣可以推出?
,而且更好理解
因此又可以寫為:
其中為海森矩陣,即:
??拓展:梯度下降法Vs牛頓法
牛頓法因為是二階收斂,所以收斂速度很快,但是逆計算很復(fù)雜,代價比較大,計算量恐怖
梯度下降法:越接近最優(yōu)值時,步長應(yīng)該不斷減小,否則會在最優(yōu)值附近來回震蕩,計算相對來說會簡單一些。
三、多類邏輯回歸
假設(shè)一共分為K類,那么公式換為以下兩個:
四、正則化
正則化的意義:避免過擬合。
模型如果很復(fù)雜,變量值稍微變動一下,就會引起預(yù)測精度的問題。正則化可以避免過擬合的原因就是它降低了特征的權(quán)重,使得模型更簡單。
主要思想:保留所有的特征變量,因為我們不太清楚要舍掉哪個特征變量,并且又想盡可能保留信息。所以我們只能是懲罰所有變量,讓每個特征變量對結(jié)果的影響值變小,這樣的話你擬合出來的模型才會更光滑更簡單,從而減少過擬合的可能性。
1、L1正則化
即損失函數(shù)再加一項正則化系數(shù)乘上L1正則化表達(dá)式
(?決定懲罰力度,過高可能會欠擬合,過小無法解決過擬合)?
作用:L1正則化有特征篩選的作用,對所有參數(shù)的懲罰力度都一樣,可以讓一部分權(quán)重變?yōu)榱悖ń稻S),因此產(chǎn)生稀疏模型,能夠去除某些特征(權(quán)重為0則等效于去除)
2、L2正則化
即損失函數(shù)再加一項正則化系數(shù)乘上L2正則化表達(dá)式
作用:使各個維度權(quán)重普遍變小,減少了權(quán)重的固定比例,使權(quán)重平滑
五、邏輯回歸python實現(xiàn)
1、庫函數(shù)LogisticRegression中的常用參數(shù)的介紹
from sklearn.linear_model import LogisticRegression
(1)penalty:表示懲罰項(正則化類型)。字符串類型,取值為’l1’ 或者?‘l2’,默認(rèn)為’l2’。
l1:向量中各元素絕對值的和,作用是產(chǎn)生少量的特征,而其他特征都是0,常用于特征選擇;
l2:向量中各個元素平方之和,作用是選擇較多的特征,使他們都趨近于0。
注意:如果模型的特征非常多,我們想要讓一些不重要的特征系數(shù)歸零,從而讓模型系數(shù)稀疏化的話,可以使用l1正則化。
(2)tol:浮點型,默認(rèn)為1e-4;表示迭代終止判斷的誤差范圍
(3)C:浮點型(為正的浮點數(shù)),默認(rèn)為1.0;表示正則化強度的倒數(shù)(目標(biāo)函數(shù)約束條件)。數(shù)值越小表示正則化越強。
(4)solver:用于優(yōu)化問題的算法。取值有{'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'},默認(rèn)為'liblinear';
對于小數(shù)據(jù)集來說,“l(fā)iblinear”就夠了,而“sag”和'saga'對于大型數(shù)據(jù)集會更快。
對于多類問題,只有'newton-cg', 'sag', 'saga'和'lbfgs'可以處理多項損失;“l(fā)iblinear”僅限于一對一分類。
注意:上面的penalty參數(shù)的選擇會影響參數(shù)solver的選擇。如果是l2正則化,那么4種算法{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}都可以選擇。但如果penalty是l1正則化的話,就只能選擇‘liblinear’了。這是因為L1正則化的損失函數(shù)不是連續(xù)可導(dǎo)的,而{‘newton-cg’, ‘lbfgs’,‘sag’}這三種優(yōu)化算法時都需要損失函數(shù)的一階或者二階連續(xù)導(dǎo)數(shù)。而‘liblinear’并沒有這個依賴。
(5)multi_class:字符串類型,取值有{ovr', 'multinomial'},默認(rèn)為'ovr';
如果選擇的選項是“ovr”,那么則為“one-versus-rest(OvR)”分類。multinomial則為“many-vs-many(MvM)”分類。
“one-versus-rest(OvR)”分類:無論你是多少元的邏輯回歸,都可以看做多個二元邏輯回歸的組合。具體做法是:對于第K類的分類決策,我們把所有第K類的樣本作為正例,除了第K類樣本以外的所有樣本都作為負(fù)例,然后在上面做二元邏輯回歸,得到第K類的分類模型。其他類的分類模型獲得以此類推。
“many-vs-many(MvM)”分類:如果模型有T類,我們每次在所有的T類樣本里面選擇兩類樣本出來,不妨記為T1類和T2類,把所有的輸出為T1和T2的樣本放在一起,把T1作為正例,T2作為負(fù)例,進(jìn)行二元邏輯回歸,得到模型參數(shù)。我們一共需要T(T-1)/2次分類(即組合數(shù))。
(6)n_jobs:整數(shù)類型,默認(rèn)是1;
如果multi_class='ovr' ,則為在類上并行時使用的CPU核數(shù)。無論是否指定了multi_class,當(dāng)將
' solver ’設(shè)置為'liblinear'時,將忽略此參數(shù)。如果給定值為-1,則使用所有核。
2、實際應(yīng)用
來個簡單的小栗子
我們使用sklearn里的乳腺癌數(shù)據(jù)集
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
然后對數(shù)據(jù)進(jìn)行一個處理,讓我們看起來舒服點,計算機處理也舒服點
data=cancer["data"]
col = cancer['feature_names']
x = pd.DataFrame(data,columns=col)#就是那些個特征
target = cancer.target.astype(int)
y = pd.DataFrame(target,columns=['target'])#對應(yīng)特征組合下的類別標(biāo)簽
訓(xùn)練集測試集分分類
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=1)
直接進(jìn)入訓(xùn)練
model = LogisticRegression()#默認(rèn)參數(shù)
model.fit(x_train, y_train)
訓(xùn)練出來的模型對test集進(jìn)行一個預(yù)測
y_pred = model.predict(x_test)
print(classification_report(y_test, y_pred))
完整代碼如下:
from sklearn.datasets import load_breast_cancer
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
import warnings
warnings.filterwarnings('ignore')
cancer = load_breast_cancer()
data=cancer["data"]
col = cancer['feature_names']
x = pd.DataFrame(data,columns=col)
target = cancer.target.astype(int)
y = pd.DataFrame(target,columns=['target'])
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=1)
model = LogisticRegression()
model.fit(x_train, y_train)
y_pred = model.predict(x_test)
print(classification_report(y_test, y_pred))
我們訓(xùn)練出的模型的效果如下:
?六、邏輯回歸的優(yōu)缺點
1、優(yōu)點
(1)適合分類場景
(2)計算代價不高,容易理解實現(xiàn)。
(3)不用事先假設(shè)數(shù)據(jù)分布,這樣避免了假設(shè)分布不準(zhǔn)確所帶來的問題。
(4)不僅預(yù)測出類別,還可以得到近似概率預(yù)測。
(5)目標(biāo)函數(shù)任意階可導(dǎo)。
2、缺點
(1)容易欠擬合,分類精度不高。
(2)數(shù)據(jù)特征有缺失或者特征空間很大時表現(xiàn)效果并不好。文章來源:http://www.zghlxwxcb.cn/news/detail-417719.html
歡迎大家在評論區(qū)批評指正,謝謝啦~文章來源地址http://www.zghlxwxcb.cn/news/detail-417719.html
到了這里,關(guān)于邏輯回歸(Logistic Regression)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!