一、邏輯回歸基本概念
1. 什么是邏輯回歸
邏輯回歸就是這樣的一個過程:面對一個回歸或者分類問題,建立代價函數,然后通過優化方法迭代求解出最優的模型參數,然后測試驗證我們這個求解的模型的好壞。
Logistic回歸雖然名字里帶“回歸”,但是它實際上是一種分類方法,主要用於兩分類問題(即輸出只有兩種,分別代表兩個類別)
回歸模型中,y是一個定性變量,比如y=0或1,logistic方法主要應用於研究某些事件發生的概率
2. 邏輯回歸的優缺點
優點:
1)速度快,適合二分類問題
2)簡單易於理解,直接看到各個特征的權重
3)能容易地更新模型吸收新的數據
缺點:
對數據和場景的適應能力有局限性,不如決策樹算法適應性那么強
3. 邏輯回歸和多重線性回歸的區別
Logistic回歸與多重線性回歸實際上有很多相同之處,最大的區別就在於它們的因變量不同,其他的基本都差不多。正是因為如此,這兩種回歸可以歸於同一個家族,即廣義線性模型(generalizedlinear model)。
這一家族中的模型形式基本上都差不多,不同的就是因變量不同。這一家族中的模型形式基本上都差不多,不同的就是因變量不同。
- 如果是連續的,就是多重線性回歸
- 如果是二項分布,就是Logistic回歸
- 如果是Poisson分布,就是Poisson回歸
- 如果是負二項分布,就是負二項回歸
4. 邏輯回歸用途
- 尋找危險因素:尋找某一疾病的危險因素等;
- 預測:根據模型,預測在不同的自變量情況下,發生某病或某種情況的概率有多大;
- 判別:實際上跟預測有些類似,也是根據模型,判斷某人屬於某病或屬於某種情況的概率有多大,也就是看一下這個人有多大的可能性是屬於某病。
5. Regression 常規步驟
- 尋找h函數(即預測函數)
- 構造J函數(損失函數)
- 想辦法使得J函數最小並求得回歸參數(θ)
6. 構造預測函數h(x)
1) Logistic函數(或稱為Sigmoid函數),函數形式為:
對於線性邊界的情況,邊界形式如下:
其中,訓練數據為向量:
最佳參數:
構造預測函數為:
函數h(x)的值有特殊的含義,它表示結果取1的概率,因此對於輸入x分類結果為類別1和類別0的概率分別為:
$P(y=1|x;\theta )=h_{\theta }(x)$
$P(y=0|x;\theta )=1-h_{\theta }(x)$
7.構造損失函數J(m個樣本,每個樣本具有n個特征)
Cost函數和J函數如下,它們是基於最大似然估計推導得到的。
8. 損失函數詳細推導過程
1) 求代價函數
概率綜合起來寫成:
取似然函數為:
對數似然函數為:
最大似然估計就是求使l(θ)取最大值時的θ,其實這里可以使用梯度上升法求解,求得的θ就是要求的最佳參數。
在Andrew Ng的課程中將J(θ)取為下式,即:
2) 梯度下降法求解最小值
θ更新過程可以寫成:
9. 向量化
ectorization是使用矩陣計算來代替for循環,以簡化計算過程,提高效率。
向量化過程:
約定訓練數據的矩陣形式如下,x的每一行為一條訓練樣本,而每一列為不同的特稱取值:
g(A)的參數A為一列向量,所以實現g函數時要支持列向量作為參數,並返回列向量。
θ更新過程可以改為:
綜上所述,Vectorization后θ更新的步驟如下:
- 求 A=x*θ
- 求 E=g(A)-y
- 求:
10.正則化
(1) 過擬合問題
過擬合即是過分擬合了訓練數據,使得模型的復雜度提高,繁華能力較差(對未知數據的預測能力)
下面左圖即為欠擬合,中圖為合適的擬合,右圖為過擬合。
(2)過擬合主要原因
過擬合問題往往源自過多的特征
解決方法
1)減少特征數量(減少特征會失去一些信息,即使特征選的很好)
- 可用人工選擇要保留的特征;
- 模型選擇算法;
2)正則化(特征較多時比較有效)
- 保留所有特征,但減少θ的大小
(3)正則化方法
正則化是結構風險最小化策略的實現,是在經驗風險上加一個正則化項或懲罰項。正則化項一般是模型復雜度的單調遞增函數,模型越復雜,正則化項就越大。
正則項可以取不同的形式,在回歸問題中取平方損失,就是參數的L2范數,也可以取L1范數。取平方損失時,模型的損失函數變為:
lambda是正則項系數:
- 如果它的值很大,說明對模型的復雜度懲罰大,對擬合數據的損失懲罰小,這樣它就不會過分擬合數據,在訓練數據上的偏差較大,在未知數據上的方差較小,但是可能出現欠擬合的現象;
- 如果它的值很小,說明比較注重對訓練數據的擬合,在訓練數據上的偏差會小,但是可能會導致過擬合。
正則化后的梯度下降算法θ的更新變為:
部分內容參考自:http://blog.csdn.net/pakko/article/details/37878837
二、Python實現邏輯回歸
from sklearn.linear_model import LogisticRegression Model = LogisticRegression() Model.fit(X_train, y_train) Model.score(X_train,y_train) # Equation coefficient and Intercept Print(‘Coefficient’,model.coef_) Print(‘Intercept’,model.intercept_) # Predict Output Predicted = Model.predict(x_test)
轉載於:https://blog.csdn.net/chibangyuxun/article/details/53148005