邏輯迴歸算法梳理

【任務2 - 邏輯迴歸算法梳理】時長:2天
1、邏輯迴歸與線性迴歸的聯繫與區別
2、 邏輯迴歸的原理
3、邏輯迴歸損失函數推導及優化
4、 正則化與模型評估指標
5、邏輯迴歸的優缺點
6、樣本不均衡問題解決辦法
7. sklearn參數
參加了Datawhale的活動,雖然在機器學習有一定的實踐和經驗積累,不過總是有自己的漏洞,所以參加基礎的機器學習任務。博客盡力的水到渠成,不過很多內容來自之前自己的總結截圖,顯得粗糙,不過還是用心的,並不是堆砌。
1、邏輯迴歸與線性迴歸的聯繫與區別
邏輯迴歸是線性模型麼?不是的,邏輯迴歸是廣義線性模型。邏輯迴歸和線性迴歸不同,線性迴歸模型的特點: 單變量情況下是一條二維直線,這條直線x取值可以在座標軸上延伸,同時y可以上下無限延伸。但是邏輯迴歸的x和y就沒有這個特點。不過這個是表面的,根本原因是線性模型有一個假設,對誤差ε,假設互相獨立,且服從正態分佈,這個邏輯迴歸y是0/1變量,其誤差顯然是不符合的線性模型假設的。所以,邏輯迴歸不屬於線性模型。

2、 邏輯迴歸的原理
算法名雖然叫做邏輯迴歸,但是該算法是分類算法,邏輯迴歸用了和迴歸類似的方法來解決分類問題。
邏輯迴歸是因變量爲虛擬變量的問題,
分類問題舉例:
郵件:垃圾郵件/非垃圾郵件?
在線交易:是否欺詐(是/否)?
腫瘤:惡性/良性?
y0,1y-{{0,1}},對於這樣的模型,對比連續變量的散點圖,一個虛擬變量產生的散點圖,如圖,並不是一些呈現雲狀的散點圖。它呈現兩個平行圖樣的散點。
線性迴歸的方法已經無法對yy的取值進行模擬。下面兩個圖可以說明問題。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
但很多實際的情況下,我們需要進行分類的數據並沒有這麼精準,比如說上述例子中突然有一個不按套路出牌的數據點出現,如圖所示
在這裏插入圖片描述

現在再設定0.5,這個判定閾值就失效了,而現實生活的分類問題的數據,會比例子中這個更爲複雜,而這個時候我們藉助於線性迴歸+閾值的方式,已經很難完成一個很好的分類。Logistic中因變量爲二分類變量,因爲線性迴歸方法通常要求符合Gauss–Markov 假設,對於二分因量,採最小二乘法去估計線性模型會違背這些假定,其結果不再有最佳線性無偏性而且,某個概率作爲方程的因變量估計值取值範圍爲0-1,但是,方程右邊取值範圍是無窮大或者無窮小, 。在這樣的場景下,邏輯迴歸就誕生了。那如何通過模型表達式建立一般線性迴歸和邏輯迴歸的關係?

Logistic迴歸用於二分類問題,面對具體的二分類問題,比如明天是否會下雨。人們通常是估計,並沒有十足的把握。因此用概率來表示再適合不過了。
在這裏插入圖片描述

Sigmoid函數

在這裏插入圖片描述
若橫座標刻度足夠大,
Sigmoid函數看起來很像一個階躍函數,滿足了……
在這裏插入圖片描述
發生和未發生的概率成爲了比值 ,這個比值就是一個緩衝,將取值範圍擴大,再進行對數變換,整個因變量取值範圍改變。不僅如此,這種變換往往使得因變量和自變量之間呈線性關係,這是根據大量實踐而總結。所以,Logistic迴歸從根本上解決因變量要不是連續變量怎麼辦的問題。
3、邏輯迴歸損失函數推導及優化
線性迴歸通過損失函數,設定目標函數,通過最小化損失函數,求解參數,可以利用最小二乘法。
關於爲什麼線性迴歸模型可以用最小二乘法,根源是其線性模型的假設是符合高斯馬爾科夫假設誤差0均值,同方差,且互不相關,這時。(注意線性模型有對誤差有正態假設,而高斯馬爾科夫假設並沒有 正態的假設)。
邏輯迴歸,因變量是二分變量,不符合這個Gauss…假設,所以可以用極大似然估計來求參數。
邏輯迴歸的損失函數是0-1損失函數
L(Y,f(X))={1,Ynot=fX0=Y=fXL(Y,f(X))=\left\{ \begin{aligned} 1 & , & Y not = f(X) \\ 0 & = & Y = f(X)\\ \end{aligned} \right.

4、 正則化與模型評估指標
對於分類問題使用混淆矩陣,計算召回率、準確率,F1值
5、邏輯迴歸的優缺點
其是一個分類模型,如果和決策樹進行對比的話,1.Logistic迴歸能夠更好把握數據整體結構,決策樹則對局部結構分析的更深,可以獲得局部最優解,因此更像“專家”,非常合適數據來源廣,結構複雜場景;2.邏輯迴歸更擅長線性關係;3.相對於Logist,決策樹對極端值容忍度更高。
6、樣本不均衡問題解決辦法
很多算法都有一個基本假設,那就是數據分佈是均勻的。對於不均衡的樣本https://blog.csdn.net/jemila/article/details/77992967
7. sklearn參數
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
class 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)[source]¶
對於樣本不均衡的情況
class_weight : dict or ‘balanced’, default: None
Weights associated with classes in the form {class_label: weight}. If not given, all classes are supposed to have weight one.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章