机器学习第7天:深入了解逻辑回归
文章目錄
- 一、邏輯回歸是什么
- 二、邏輯回歸的代價(jià)函數(shù)
- 1. 公式:
- 2. 公式推導(dǎo)過程:
- 2.1. 尋找預(yù)測(cè)函數(shù)
- 2.2. 構(gòu)造代價(jià)函數(shù)
- 三、梯度下降法求J(θ)的最小值
- 四、代碼展示
一、邏輯回歸是什么
簡(jiǎn)單來說, 邏輯回歸(Logistic Regression)是一種用于解決二分類(0 or 1)問題的機(jī)器學(xué)習(xí)方法,用于估計(jì)某種事物的可能性。比如某用戶購買某商品的可能性,某病人患有某種疾病的可能性,以及某廣告被用戶點(diǎn)擊的可能性等。
邏輯回歸是為了解決分類問題,根據(jù)一些已知的訓(xùn)練集訓(xùn)練好模型,再對(duì)新的數(shù)據(jù)進(jìn)行預(yù)測(cè)屬于哪個(gè)類。
邏輯回歸(Logistic Regression)與線性回歸(Linear Regression)都是一種廣義線性模型(generalized linear model)。邏輯回歸假設(shè)因變量 y 服從伯努利分布,而線性回歸假設(shè)因變量 y 服從高斯分布。
二、邏輯回歸的代價(jià)函數(shù)
1. 公式:
綜合起來為:
其中
2. 公式推導(dǎo)過程:
代價(jià)函數(shù)的推導(dǎo)分兩步進(jìn)行:
2.1. 尋找預(yù)測(cè)函數(shù)
Logistic Regression雖然名字里帶“回歸”,但是它實(shí)際上是一種分類方法,用于兩分類問題(即輸出只有兩種),顯然,預(yù)測(cè)函數(shù)的輸出必須是兩個(gè)值(分別代表兩個(gè)類別),所以利用了Logistic函數(shù)(或稱為Sigmoid函數(shù))。
sigmoid函數(shù)是一個(gè)s形的曲線,它的取值在[0, 1]之間,在遠(yuǎn)離0的地方函數(shù)的值會(huì)很快接近0或者1。它的這個(gè)特性對(duì)于解決二分類問題十分重要。
Sigmoid函數(shù):
接下來需要確定數(shù)據(jù)劃分的邊界類型,對(duì)于圖1和圖2中的兩種數(shù)據(jù)分布,顯然圖1需要一個(gè)線性的邊界,而圖2需要一個(gè)非線性的邊界。接下來我們只討論線性邊界的情況。
圖1 圖2對(duì)于線性邊界的情況,邊界形式如下:
構(gòu)造預(yù)測(cè)函數(shù)為:
hθ(x)函數(shù)的值有特殊的含義,它表示結(jié)果取1的概率,因此對(duì)于輸入x分類結(jié)果為類別1和類別0的概率分別為:
2.2. 構(gòu)造代價(jià)函數(shù)
上面的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]) #映射為多項(xiàng)式initial_theta = np.zeros((X.shape[1],1))#初始化thetainitial_lambda = 0.1 #初始化正則化系數(shù),一般取0.01,0.1,1.....J = costFunction(initial_theta,X,y,initial_lambda) #計(jì)算一下給定初始化的theta和lambda求出的代價(jià)Jprint(J) #輸出一下計(jì)算的值,應(yīng)該為0.693147#result = optimize.fmin(costFunction, initial_theta, args=(X,y,initial_lambda)) #直接使用最小化的方法,效果不好'''調(diào)用scipy中的優(yōu)化算法fmin_bfgs(擬牛頓法Broyden-Fletcher-Goldfarb-Shanno)- costFunction是自己實(shí)現(xiàn)的一個(gè)求代價(jià)的函數(shù),- initial_theta表示初始化的值,- fprime指定costFunction的梯度- args是其余測(cè)參數(shù),以元組的形式傳入,最后會(huì)將最小化costFunction的theta返回 '''result = optimize.fmin_bfgs(costFunction, initial_theta, fprime=gradient, args=(X,y,initial_lambda)) p = predict(X, result) #預(yù)測(cè)print(u'在訓(xùn)練集上的準(zhǔn)確度為%f%%'%np.mean(np.float64(p==y)*100)) # 與真實(shí)值比較,p==y返回True,轉(zhuǎn)化為float X = data[:,0:-1]y = data[:,-1] plotDecisionBoundary(result,X,y) #畫決策邊界感覺有困難可以先放著,后期會(huì)進(jìn)行更加具體的介紹,知道這么幾個(gè)公式就好了。
參考文章:
Logistic回歸計(jì)算過程的推導(dǎo)
邏輯回歸(Logistic Regression)
Coursera ML筆記 - 邏輯回歸
邏輯回歸 - 理論篇
總結(jié)
以上是生活随笔為你收集整理的机器学习第7天:深入了解逻辑回归的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实战项目三:爬取QQ群中的人员信息
- 下一篇: 机器学习第8天:IPyhon与Jupyt