提出問題
二分類問題
圖像的寬x磕昼,高y譬重,根據(jù)x和y的大小医窿,將圖像分為橫向圖片和縱向圖片
寬x | 高y | 形狀label |
---|---|---|
80 | 150 | 縱向 |
60 | 110 | 縱向 |
35 | 130 | 縱向 |
160 | 50 | 橫向 |
160 | 20 | 橫向 |
125 | 30 | 橫向 |
邏輯回歸-概率分類
sigmoid函數(shù)
sigmoid函數(shù)的由來
幾率 :事件發(fā)生的概率除以未發(fā)生的概率 仰担,設(shè)p為事件發(fā)生的概率,則(1-p)為事件未發(fā)生的概率玷氏。此時(shí):
定義域:堵未;值域:
將上式取對(duì)數(shù),可以將其擴(kuò)展到實(shí)數(shù)空間 盏触,就是logit函數(shù) :
定義域:渗蟹;值域:
由于logit函數(shù)和線性回歸模型在同一取值范圍內(nèi),因此赞辩,可以用線性回歸模型來表示logit函數(shù):
令
則:
對(duì)上式等號(hào)兩邊取e:
至此雌芽,得到了sigmod函數(shù),用來將線性回歸模型 輸出的實(shí)數(shù)空間取值映射成為概率 辨嗽。
sigmoid函數(shù)的一般表達(dá)式如下:
sigmoid函數(shù)圖像
sigmoid函數(shù)性質(zhì)
定義域:
值域:
sigmoid導(dǎo)數(shù)性質(zhì)
sigmoid函數(shù)的優(yōu)勢(shì):
????1. 引入了非線性映射世落,將線性回歸的值域映射到(0, 1)之間,符合概率值區(qū)間[0, 1]
????2. 大于0.5表示陽性糟需,小于0.5表示陰性屉佳,有助于直觀地做出預(yù)測(cè)類型的判斷
????3. 數(shù)學(xué)特性好谷朝,便于求導(dǎo)
借助sigmoid函數(shù),生成邏輯回歸模型表達(dá)式 為:
其中:
該式表現(xiàn)為多元線性回歸(含有n個(gè)參數(shù))的模式武花。這也是邏輯回歸中圆凰,回歸二字的來源。
因?yàn)?/strong> 体箕,因此专钉,上式可以作為概率來使用。
決策邊界
定義概率計(jì)算式為:
該式含義:已知數(shù)據(jù)的條件下累铅,
的概率為
驶沼。假設(shè)計(jì)算得到
,則說明數(shù)據(jù)
對(duì)應(yīng)的類別
是
的概率為0.8
分類標(biāo)準(zhǔn)如下:(1:橫向争群;0:縱向)
根據(jù)邏輯回歸模型表達(dá)式的定義,上式可改寫為
將分類條件改為這種寫法的意義在于:將作為分類邊界 大年,實(shí)現(xiàn)二分類的目的换薄。
決策邊界:用于數(shù)據(jù)分類的直線稱為決策邊界。上述討論中的 就是邏輯回歸模型的決策邊界翔试。
為了獲得合理的決策邊界轻要,即求得正確的參數(shù),需要定義目標(biāo)函數(shù) 垦缅,進(jìn)行微分冲泥,獲得參數(shù)更新表達(dá)式 ,然后利用現(xiàn)有數(shù)據(jù)壁涎,不斷更新
來得到正確的決策邊界凡恍。該過程即為邏輯回歸模型。
似然函數(shù)(目標(biāo)函數(shù))
按照前述分析:
- 當(dāng)y=1時(shí)怔球,我們希望概率
是最大的
- 當(dāng)y=0時(shí)嚼酝,我們希望概率
是最大的
對(duì)于全部示例數(shù)據(jù),有如下信息:
圖像大小 | 形狀label | 概率 | |||
---|---|---|---|---|---|
80 x 150 | 縱向 | 80 | 150 | 0 | 期待 |
60 x 110 | 縱向 | 60 | 110 | 0 | 期待 |
35 x 130 | 縱向 | 35 | 130 | 0 | 期待 |
160 x 50 | 橫向 | 160 | 50 | 1 | 期待 |
160 x 20 | 橫向 | 160 | 20 | 1 | 期待 |
125 x 30 | 橫向 | 125 | 30 | 1 | 期待 |
假定所有的訓(xùn)練數(shù)據(jù)都互不影響竟坛、獨(dú)立發(fā)生闽巩。這樣的話,整體的概率可用下面的聯(lián)合概率來表示:
更一般化的寫法如下:
關(guān)鍵點(diǎn):這個(gè)表達(dá)式利用了任何數(shù)的0次方都是1的特性担汤。結(jié)合二分類的類別分別取0和1涎跨,得到所有樣本概率乘積的統(tǒng)一表達(dá)式。
:表示共有m個(gè)樣本崭歧。
這里的目標(biāo)函數(shù)也被稱為似然 隅很,L 取自似然的英文單詞Likelihood
回歸的時(shí)候,處理的是誤差率碾,因此需要使誤差最小化外构。
現(xiàn)在考慮的是聯(lián)合概率普泡,我們希望概率盡可能大,所以更新參數(shù)的目標(biāo)是使得概率盡可能大审编。
對(duì)數(shù)似然函數(shù)
上述目標(biāo)函數(shù)(似然函數(shù))直接求微分比較困難撼班,是因?yàn)椋?strong>(取對(duì)數(shù)的原因)
????1. 聯(lián)合概率都是小于1的,其乘積會(huì)更小垒酬,若值太小砰嘁,編程時(shí)會(huì)出現(xiàn)精度問題
????2. 乘法相比于加法,計(jì)算量要大很多
因此需要在微分前勘究,對(duì)函數(shù)進(jìn)行變形矮湘,即:取似然函數(shù)的對(duì)數(shù)
取對(duì)數(shù)的可行性:對(duì)數(shù)函數(shù)是單調(diào)遞增的,要獲取 的最大值口糕,即獲取
的最大值
對(duì)式(1)取自然對(duì)數(shù)缅阳,得到對(duì)數(shù)似然函數(shù)如下所示:
綜上:邏輯回歸使用如下的對(duì)數(shù)似然函數(shù)作為目標(biāo)函數(shù):
邏輯回歸參數(shù)學(xué)習(xí)更新的算法通常為梯度下降法 和擬牛頓法 ,這里采用梯度下降法景描,求導(dǎo)過程如下:
針對(duì)參數(shù)十办,對(duì)上式兩邊求偏導(dǎo)如下:
其中:
???? :第
個(gè)樣本
???? :第
個(gè)參數(shù)
參數(shù)更新表達(dá)式如下所示:
因?yàn)橐顾迫缓瘮?shù)最大化,因此超棺,參數(shù) 應(yīng)該向似然函數(shù)增大的方向移動(dòng) 向族,即:
的移動(dòng)方向應(yīng)該與微分符號(hào)一致 ,因此上式中使用加號(hào)"+"
:第j個(gè)參數(shù)棠绘,共有n個(gè)參數(shù)
:學(xué)習(xí)率 件相,超參數(shù)
:樣本的個(gè)數(shù)
線性不可分問題
通過構(gòu)造合理的,即構(gòu)造不同形狀的決策邊界曲線
氧苍,使用邏輯回歸模型夜矗,即可處理線性不可分問題,示例如下
上圖中让虐,這兩類無法用一條直線來區(qū)分侯养,可以尋找一條曲線來作為決策邊界,來解決這個(gè)線性不可分問題澄干。如下圖所示
根據(jù)邏輯回歸模型中參數(shù)更新的方式逛揩,使用樣本進(jìn)行訓(xùn)練,不斷更新參數(shù)麸俘,就可以得到合理的決策邊界辩稽,進(jìn)而完成線性不可分問題的分類。
邏輯回歸示例
現(xiàn)有數(shù)據(jù)集data3.csv从媚,如下所示:
劃分?jǐn)?shù)據(jù)集逞泄,并做圖如下
# 劃分?jǐn)?shù)據(jù)
train = df.values
train_x = train[:,:2]
train_y = train[:,-1]
# 作圖觀察數(shù)據(jù)
df0 = df[df['y'] == 0]
df1 = df[df['y'] == 1]
plt.figure(dpi=150)
plt.plot(df0['x1'], df0['x2'], 'x', label='class 0')
plt.plot(df1['x1'], df1['x2'], 'o', label='class 1')
plt.legend()
plt.show()
根據(jù)圖像觀察樣本點(diǎn)分布位置,初步猜測(cè)決策邊界為二次函數(shù),如下所示:
據(jù)此喷众,共4個(gè)參數(shù)各谚,則輸入數(shù)據(jù)X應(yīng)該具有4列,如下所示
# 構(gòu)造輸入矩陣X
X = np.c_[np.ones(len(train_x)), train_x, train_x[:,0]**2]
# 隨機(jī)初始化4個(gè)參數(shù)
theta = np.random.rand(4)
根據(jù)參數(shù)更新表達(dá)式到千,迭代更新參數(shù)
# 定義模型表達(dá)式
def f(X):
z = np.dot(X, theta)
return 1 / (1 + np.exp(-z))
# 設(shè)定學(xué)習(xí)率為0.001
ETA = 0.001
# 設(shè)置更新次數(shù)為5000
epoch = 5000
# 開始迭代更新
for i in range(epoch):
theta = theta + ETA * np.dot(train_y-f(X), X)
根據(jù)決策邊界:
計(jì)算得到昌渤,決策邊界曲線為:
作圖查看分類結(jié)果
# 作圖查看分類結(jié)果
df0 = df[df['y'] == 0]
df1 = df[df['y'] == 1]
x1 = np.linspace(-3, 5, 100)
x2 = -(theta[0] + theta[1] * x1 + theta[3]*x1**2) / theta[2]
plt.figure(dpi=100)
plt.plot(df0['x1'], df0['x2'], 'x', label='class 0')
plt.plot(df1['x1'], df1['x2'], 'o', label='class 1')
plt.plot(x1, x2, '--')
plt.legend()
plt.show()
參考內(nèi)容:《白話機(jī)器學(xué)習(xí)的數(shù)學(xué)》[日]立石賢吾
文中數(shù)據(jù):https://zlzsm.lanzoui.com/iSMCSu5wkzc