1. 程式人生 > >機器學習第7天:深入瞭解邏輯迴歸

機器學習第7天:深入瞭解邏輯迴歸

一、邏輯迴歸是什麼

簡單來說, 邏輯迴歸(Logistic Regression)是一種用於解決二分類(0 or 1)問題的機器學習方法,用於估計某種事物的可能性。比如某使用者購買某商品的可能性,某病人患有某種疾病的可能性,以及某廣告被使用者點選的可能性等。

邏輯迴歸是為了解決分類問題,根據一些已知的訓練集訓練好模型,再對新的資料進行預測屬於哪個類。

邏輯迴歸(Logistic Regression)與線性迴歸(Linear Regression)都是一種廣義線性模型(generalized linear model)。邏輯迴歸假設因變數 y 服從伯努利分佈,而線性迴歸假設因變數 y 服從高斯分佈。

二、邏輯迴歸的代價函式

1. 公式:

綜合起來為:

其中

2. 公式推導過程:

代價函式的推導分兩步進行:

  1. 尋找一個合適的預測函式,一般表示為h函式。
  2. 構造一個cost函式,該函式表示預測的輸出(h)與訓練資料的類別(y)之間的偏差。

2.1. 尋找預測函式

Logistic Regression雖然名字裡帶“迴歸”,但是它實際上是一種分類方法,用於兩分類問題(即輸出只有兩種),顯然,預測函式的輸出必須是兩個值(分別代表兩個類別),所以利用了Logistic函式(或稱為Sigmoid函式)。

sigmoid函式是一個s形的曲線,它的取值在[0, 1]之間,在遠離0的地方函式的值會很快接近0或者1。它的這個特性對於解決二分類問題十分重要。

Sigmoid函式:

接下來需要確定資料劃分的邊界型別,對於圖1和圖2中的兩種資料分佈,顯然圖2需要一個線性的邊界,而圖3需要一個非線性的邊界。接下來我們只討論線性邊界的情況。

圖1 圖2

對於線性邊界的情況,邊界形式如下:

構造預測函式為:

hθ(x)函式的值有特殊的含義,它表示結果取1的概率,因此對於輸入x分類結果為類別1和類別0的概率分別為:

2.2. 構造代價函式

上面的n改成m,筆誤。

三、梯度下降法求J(θ)的最小值

θ更新過程可以寫成:

四、程式碼展示

def LogisticRegression():
    data =
loadtxtAndcsv_data("data2.txt", ",", np.float64) X = data[:,0:-1] y = data[:,-1] plot_data(X,y) # 作圖 X = mapFeature(X[:,0],X[:,1]) #對映為多項式 initial_theta = np.zeros((X.shape[1],1))#初始化theta initial_lambda = 0.1 #初始化正則化係數,一般取0.01,0.1,1..... J = costFunction(initial_theta,X,y,initial_lambda) #計算一下給定初始化的theta和lambda求出的代價J print(J) #輸出一下計算的值,應該為0.693147 #result = optimize.fmin(costFunction, initial_theta, args=(X,y,initial_lambda)) #直接使用最小化的方法,效果不好 '''呼叫scipy中的優化演算法fmin_bfgs(擬牛頓法Broyden-Fletcher-Goldfarb-Shanno) - costFunction是自己實現的一個求代價的函式, - initial_theta表示初始化的值, - fprime指定costFunction的梯度 - args是其餘測引數,以元組的形式傳入,最後會將最小化costFunction的theta返回 ''' result = optimize.fmin_bfgs(costFunction, initial_theta, fprime=gradient, args=(X,y,initial_lambda)) p = predict(X, result) #預測 print(u'在訓練集上的準確度為%f%%'%np.mean(np.float64(p==y)*100)) # 與真實值比較,p==y返回True,轉化為float X = data[:,0:-1] y = data[:,-1] plotDecisionBoundary(result,X,y) #畫決策邊界

感覺有困難可以先放著,後期會進行更加具體的介紹,知道這麼幾個公式就好了。