機器學習實戰之Logistic迴歸
寫在前面
Logistic迴歸涉及到高等數學,線性代數,概率論,優化問題。本文儘量以最簡單易懂的敘述方式,以少講公式原理,多講形象化案例為原則,給讀者講懂Logistic迴歸。如對數學公式過敏,引發不適,後果自負。
Logistic迴歸原理與推導
Logistic迴歸中雖然有迴歸的字樣,但該演算法是一個分類演算法,如圖所示,有兩類資料(紅點和綠點)分佈如下,如果需要對兩類資料進行分類,我們可以通過一條直線進行劃分(w0 * x0 + w1 * x1+w2 * x2)。當新的樣本(x1,x2)需要預測時,帶入直線函式中,函式值大於0,則為綠色樣本(正樣本),否則為紅樣本(負樣本)。
推廣到高維空間中,我們需要得到一個超平面(在二維是直線,在三維是平面,在n維是n-1的超平面)切分我們的樣本資料,實際上也就是求該超平面的W引數,這很類似於迴歸,所以取名為Logistic迴歸。


sigmoid函式
當然,我們不直接使用z函式,我們需要把z值轉換到區間[0-1]之間,轉換的z值就是判斷新樣本屬於正樣本的概率大小。
我們使用sigmoid函式完成這個轉換過程,公式如下。通過觀察sigmoid函式圖,如圖所示,當z值大於0時,σ值大於0.5,當z值小於0時,σ值小於於0.5。利用sigmoid函式,使得Logistic迴歸本質上是一個基於條件概率的判別模型。


目標函式
其實,我們現在就是求W,如何求W呢,我們先看下圖,我們都能看出第二個圖的直線切分的最好,換句話說,能讓這些樣本點離直線越遠越好,這樣對於新樣本的到來,也具有很好的劃分,那如何用公式表示並計算這個目標函式呢?

我們把sigmoid公式應用到z函式中:

通過條件概率可推出下面公式,對公式進行整合為一個,見下。


假定樣本與樣本之間相互獨立,那麼整個樣本集生成的概率即為所有樣本生成概率的乘積:

這個公式過於複雜,不太容易求導,這裡通過log轉換:

這時就需要這個目標函式的值最大,以此求出θ。
梯度上升法
在介紹梯度上升法之前,我們看一箇中學知識:求下面函式在x等於多少時,取最大值。

函式圖:

解:求f(x)的導數:2x,令其為0,求得x=0時,取最大值為0。但在函式複雜時,求出導數也很難計算函式的極值,這時就需要使用梯度上升法,通過迭代,一步步逼近極值,公式如下,我們順著導數的方向(梯度)一步步逼近。

利用梯度演算法計算該函式的x值:
def f(x_old):
return -2*x_old
def cal():
x_old = 0
x_new = -6
eps = 0.01
presision = 0.00001
while abs(x_new-x_old)>presision:
x_old=x_new
x_new=x_old+eps*f(x_old)
return x_new
-0.0004892181072978443
目標函式求解
這裡,我們對函式求偏導,得到迭代公式如下:

Logistic迴歸實踐
資料情況
讀入資料,並繪圖顯示:
def loadDataSet():
dataMat = [];labelMat = []
fr = open('資料/Logistic/TestSet.txt')
for line in fr.readlines():
lineArr = line.strip().split()
dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])
labelMat.append(int(lineArr[2]))
return dataMat, labelMat

訓練演算法
利用梯度迭代公式,計算W:
def sigmoid(inX):
return 1.0/(1 + np.exp(-inX))
def gradAscent(dataMatIn, labelMatIn):
dataMatrix = np.mat(dataMatIn)
labelMat = np.mat(labelMatIn).transpose()
m,n = np.shape(dataMatrix)
alpha = 0.001
maxCycles = 500
weights = np.ones((n,1))
for k in range(maxCycles):
h = sigmoid(dataMatrix * weights)
error = labelMat - h
weights = weights + alpha * dataMatrix.transpose() * error
return weights
通過計算的weights繪圖,檢視分類結果:

演算法優缺點
- 優點:易於理解和計算
- 缺點:精度不高
寫在最後
最近在運營自己的原創公眾號,以後文章會在公眾號首發,希望各位讀者多多關注支援。
萬水千山總是情,點波關注行不行。

相關文章
- 機器學習之Logistic迴歸機器學習
- [機器學習實戰-Logistic迴歸]使用Logistic迴歸預測各種例項機器學習
- 機器學習筆記(2): Logistic 迴歸機器學習筆記
- 機器學習演算法:Logistic迴歸學習筆記機器學習演算法筆記
- P2 鄒博機器學習logistic迴歸機器學習
- 【機器學習】Logistic迴歸ex2data2機器學習
- 吳恩達機器學習筆記 —— 7 Logistic迴歸吳恩達機器學習筆記
- 吳恩達機器學習課程05——Logistic迴歸吳恩達機器學習
- 機器學習實戰(一)—— 線性迴歸機器學習
- 機器學習之邏輯迴歸機器學習邏輯迴歸
- 機器學習之迴歸指標機器學習指標
- 機器學習之線性迴歸機器學習
- 機器學習之線性迴歸(純python實現)機器學習Python
- 機器學習-樹迴歸機器學習
- 1.4 - logistic迴歸
- 機器學習之迴歸分析--預測值機器學習
- 機器學習實戰專案-預測數值型迴歸機器學習
- 機器學習之邏輯迴歸:計算機率機器學習邏輯迴歸計算機
- 【機器學習】線性迴歸python實現機器學習Python
- 【機器學習】線性迴歸sklearn實現機器學習
- 機器學習:迴歸問題機器學習
- 機器學習:線性迴歸機器學習
- 機器學習:邏輯迴歸機器學習邏輯迴歸
- 機器學習之邏輯迴歸:計算概率機器學習邏輯迴歸
- 機器學習之邏輯迴歸:模型訓練機器學習邏輯迴歸模型
- 機器學習之使用Python完成邏輯迴歸機器學習Python邏輯迴歸
- 機器學習 | 線性迴歸與邏輯迴歸機器學習邏輯迴歸
- 【機器學習】多項式迴歸python實現機器學習Python
- 【機器學習】多項式迴歸sklearn實現機器學習
- 機器學習-邏輯迴歸:從技術原理到案例實戰機器學習邏輯迴歸
- 【深度學習基礎-13】非線性迴歸 logistic regression深度學習
- 機器學習:線性迴歸(下)機器學習
- 機器學習整理(邏輯迴歸)機器學習邏輯迴歸
- 機器學習整理(線性迴歸)機器學習
- 機器學習--線性迴歸--梯度下降的實現機器學習梯度
- 機器學習之分類迴歸樹(python實現CART)機器學習Python
- 機器學習 第5篇:knn迴歸機器學習KNN
- 【機器學習】線性迴歸預測機器學習