0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

機(jī)器學(xué)習(xí):線性回歸與邏輯回歸的理論與實(shí)戰(zhàn)

深度學(xué)習(xí)自然語言處理 ? 來源:深度學(xué)習(xí)自然語言處理 ? 作者:奮斗喵 ? 2020-12-26 09:58 ? 次閱讀

1、基本概念

要進(jìn)行機(jī)器學(xué)習(xí),首先要有數(shù)據(jù)。從數(shù)據(jù)中學(xué)得模型的過程稱為“學(xué)習(xí)”或“訓(xùn)練”。其對應(yīng)的過程中有幾個(gè)基本術(shù)語需要知道。

(1)訓(xùn)練集:模型訓(xùn)練過程中使用的數(shù)據(jù)稱為訓(xùn)練集,其中每個(gè)樣本稱為訓(xùn)練樣本。如:D={X1,X2,X3,…,Xm}。

(2)特征向量:對于每個(gè)樣本如Xi = (xi1, xi2,…xin)是一個(gè)n維列向量,表示樣本Xi有n個(gè)屬性。

2、理論

給定由n個(gè)屬性描述而成的m個(gè)數(shù)據(jù)集為:D={X1,X2,X3,…,Xm},其中Xi = (xi1, xi2,…xin)。

線性模型是試圖學(xué)得一個(gè)通過屬性的線性組合來進(jìn)行預(yù)測的函數(shù),即:

4a9a63e8-4691-11eb-8b86-12bb97331649.png

其中4c0ac61e-4691-11eb-8b86-12bb97331649.png,其中4c480c40-4691-11eb-8b86-12bb97331649.png。當(dāng)Θ和b確定之后,模型就得以確認(rèn)。

2.1 線性回歸

2.1.1 什么是回歸

若我們欲預(yù)測的是連續(xù)值,如:房價(jià),則此類學(xué)習(xí)任務(wù)稱為“回歸”。同理機(jī)器學(xué)習(xí)中還有“分類”任務(wù),即我們欲預(yù)測的是離散值,如:“合格”、“不合格”。其中對于二分類任務(wù),稱為“正類”、“負(fù)類”;涉及多個(gè)類別時(shí),則稱為“多分類”任務(wù)。

在線性模型中,我們分為線性回歸與邏輯回歸兩種模型,下面我們對兩種模型分別進(jìn)行講解分析。

4c6ef86e-4691-11eb-8b86-12bb97331649.png

圖1 線性回歸

4cc1fc30-4691-11eb-8b86-12bb97331649.png

圖2 邏輯回歸

2.1.2 線性回歸推導(dǎo)

1、線性回歸試圖學(xué)得:

4cfffa8a-4691-11eb-8b86-12bb97331649.png

2、參數(shù)估計(jì)

(1)首先衡量f(X)與Y之間的差別,我們使用均方誤差來衡量。

均方誤差的推導(dǎo)過程如下:

擬合函數(shù)為:

4d33a68c-4691-11eb-8b86-12bb97331649.png

矩陣形式為:

4d8bf86e-4691-11eb-8b86-12bb97331649.png

真實(shí)值和預(yù)測值之間通常情況下是會存在誤差的,我們用ε來表示誤差,對于每個(gè)樣本都有:

4dbd2556-4691-11eb-8b86-12bb97331649.png

通常我們假設(shè)樣本空間中全體樣本中服從一個(gè)未知“分布”,我們獲得的每個(gè)樣本都是獨(dú)立地從這個(gè)分布上采樣獲得的,即“獨(dú)立同分布”(iid)。

在這里誤差ε是獨(dú)立并且具有相同的分布,并且服從均值為0,方差為4de875da-4691-11eb-8b86-12bb97331649.png的正態(tài)分布。

由于誤差服從正態(tài)分布,那么有:

512ffa1a-4691-11eb-8b86-12bb97331649.png


將(5)代入到(6)可得:

54690b9a-4691-11eb-8b86-12bb97331649.png

用似然函數(shù)進(jìn)行估計(jì),即求出什么樣的參數(shù)跟我們給出的數(shù)據(jù)組合后能更好的預(yù)測真實(shí)值,有:

54955c5e-4691-11eb-8b86-12bb97331649.png

對式8取對數(shù),將連乘轉(zhuǎn)化為加法為:

54d0ac00-4691-11eb-8b86-12bb97331649.png

對式9展開化簡為:

550ded0e-4691-11eb-8b86-12bb97331649.png

由上式可以看出,右邊第一項(xiàng)為一個(gè)常量,似然函數(shù)要取最大值,因而第二項(xiàng)越小越好,有:

5558358a-4691-11eb-8b86-12bb97331649.png

上述公式相當(dāng)于最小二乘法的式子,即為均方誤差的式子。

(2)求解Θ:閉式解。

我們試圖讓均方誤差最小化,即

557411ec-4691-11eb-8b86-12bb97331649.png

基于均方誤差最小化來進(jìn)行模型求解的方法稱為“最小二乘法”。在線性回歸中,最小二乘法就是試圖找到一條直線,使所有樣本到直線上的歐式距離之和最小。求解方法為對Θ求偏導(dǎo)。

55c20758-4691-11eb-8b86-12bb97331649.png

接下來需要對矩陣求偏導(dǎo),過程如下:

55f8f498-4691-11eb-8b86-12bb97331649.png

最后令5648ba3c-4691-11eb-8b86-12bb97331649.png可得:

567488c4-4691-11eb-8b86-12bb97331649.png

s.t.56b13cc4-4691-11eb-8b86-12bb97331649.png為滿秩矩陣時(shí)。


在現(xiàn)實(shí)中56b13cc4-4691-11eb-8b86-12bb97331649.png往往不是滿秩矩陣,在許多變量中會遇到大量的變量,其數(shù)目超過樣本數(shù)目,會導(dǎo)致解出多個(gè)Θ,常見的做法是引入正則化或者進(jìn)行降維。

(3)求解Θ:梯度下降法。

沿著函數(shù)梯度方向下降最快的就能找到極小值:

590d357c-4691-11eb-8b86-12bb97331649.png

沿著梯度方向更新參數(shù)Θ的值:

59545650-4691-11eb-8b86-12bb97331649.png

批量梯度下降是用了訓(xùn)練集中的所有樣本。因此在數(shù)據(jù)量很大的時(shí)候,每次迭代都要遍歷訓(xùn)練集一遍,開銷會很大,所以在數(shù)據(jù)量大的時(shí)候,可以采用隨機(jī)梯度下降法或者批量梯度下降法。

2.2 邏輯回歸

對于分類任務(wù),用線性回歸無法直接進(jìn)行回歸學(xué)習(xí)。對于二分類任務(wù),其輸出標(biāo)記597a4d24-4691-11eb-8b86-12bb97331649.png,而線性回歸模型產(chǎn)生的預(yù)測值59a21908-4691-11eb-8b86-12bb97331649.png是實(shí)值。

2.2.1 對數(shù)幾率

一個(gè)事件的幾率是指該事件發(fā)生的概率與該事件不發(fā)生的概率的比值。p(Y=1|X)是指事件發(fā)生的條件概率,p(Y=0|X)是指事件不發(fā)生的條件概率,則該事件的對數(shù)幾率或logit函數(shù)是:

59cfef40-4691-11eb-8b86-12bb97331649.png

對數(shù)幾率范圍為[0,+∞),當(dāng)p=1時(shí)候,logit(p)=+∞,當(dāng)p=0時(shí)候,logit(p)=0。

對于邏輯回歸而言,有:

59fe90d4-4691-11eb-8b86-12bb97331649.png

將其Θ*X轉(zhuǎn)換為概率有:

5a4cfef4-4691-11eb-8b86-12bb97331649.png

其中

5a8a0100-4691-11eb-8b86-12bb97331649.png

也稱為sigmoid函數(shù),函數(shù)圖如下所示:

5add3780-4691-11eb-8b86-12bb97331649.png

圖3 Sigmoid函數(shù)圖

2.2.2 參數(shù)估計(jì)

在邏輯回歸進(jìn)行模型學(xué)習(xí)時(shí),應(yīng)用極大似然估計(jì)來估計(jì)模型參數(shù):

5b224398-4691-11eb-8b86-12bb97331649.png

對式22取對數(shù),將連乘轉(zhuǎn)化為加法為:

5b7e2b18-4691-11eb-8b86-12bb97331649.png

上述公式為求解邏輯回歸的損失函數(shù):交叉熵?fù)p失函數(shù)。

然后對J(Θ)進(jìn)行求偏導(dǎo),求最小值,得到Θ的估計(jì)值。沿著函數(shù)梯度方向下降就能最快的找到極小值:

5ba9c85e-4691-11eb-8b86-12bb97331649.png

沿著梯度方向更新參數(shù)Θ的值:

5c9031c2-4691-11eb-8b86-12bb97331649.png

3、實(shí)戰(zhàn)

3.1 線性回歸實(shí)戰(zhàn)

3.1.1 從零開始實(shí)現(xiàn)

1、首先生成數(shù)據(jù)集

num_inputs = 2 # 數(shù)據(jù)集的屬性 n : 2num_examples = 1000 # 數(shù)據(jù)集的樹木 m : 1000true_w = [2, -3.4]true_b = 4.2 features = torch.randn(num_examples, num_inputs, dtype=torch.float32) # 輸入labels = true_w[0]*features[:, 0] + true_w[1]*features[:, 1] + true_b # 標(biāo)簽labels+=torch.tensor(np.random.normal(0,0.01,size=labels.size()),dtype=torch.float32)#加上一些隨機(jī)噪聲

進(jìn)行可視化后,如下圖所示:

5cb5d800-4691-11eb-8b86-12bb97331649.png

圖4 數(shù)據(jù)集

2、數(shù)據(jù)讀取

def data_iter(batch_size, features, labels): num_examples = len(features) indices = list(range(num_examples)) random.shuffle(indices) for i in range(0, num_examples, batch_size): j = torch.LongTensor(indices[i : min(i + batch_size, num_examples)])yieldfeatures.index_select(0,j),labels.index_select(0,j)

如:當(dāng)batch_size=10時(shí),我們的輸出結(jié)果如下所示:

5cda8fce-4691-11eb-8b86-12bb97331649.png


第一個(gè)為輸入x(size=[10, 2]),第二個(gè)為標(biāo)簽y(size=[10])。

3、定義線性回歸模型

def LinReg(X, w, b):returntorch.mm(X,w)+b#torch.mm表示兩個(gè)矩陣相乘,[batch_size,num_inputs]*[num_inputs,1]=[batch_size,1]

4、定義損失函數(shù)

# 線性回歸模型的損失函數(shù)為均方差損失函數(shù)def squared_loss(y_hat, y):return(y_hat-y.view(y_hat.size()))**2/2

5、定義優(yōu)化算法

# 這里我們使用梯度下降算法:sdgdef sgd(params, lr, batch_size): for param in params:param.data-=lr*param.grad/batch_size

6、進(jìn)行訓(xùn)練

訓(xùn)練步驟如下:

(1)首先讀取一個(gè)batch_size的數(shù)據(jù)和標(biāo)簽
(2)然后進(jìn)行模型計(jì)算;
(3)然后計(jì)算損失函數(shù);
(4)然后反向求導(dǎo)優(yōu)化參數(shù);

lr = 0.03num_epochs = 3net = LinRegloss = squared_loss for epoch in range(num_epochs): # 訓(xùn)練模型一共需要num_epochs個(gè)迭代周期 # 在每一個(gè)迭代周期中,會使用訓(xùn)練數(shù)據(jù)集中所有樣本一次(假設(shè)樣本數(shù)能夠被批量大小整除)。X # 和y分別是小批量樣本的特征和標(biāo)簽 for X, y in data_iter(batch_size, features, labels): l = loss(net(X, w, b), y).sum() # l是有關(guān)小批量X和y的損失 l.backward() # 小批量的損失對模型參數(shù)求梯度 sgd([w, b], lr, batch_size) # 使用小批量隨機(jī)梯度下降迭代模型參數(shù) # 不要忘了梯度清零 w.grad.data.zero_() b.grad.data.zero_() train_l = loss(net(features, w, b), labels)print('epoch%d,loss%f'%(epoch+1,train_l.mean().item()))

最后輸出結(jié)果如下所示:

epoch 1, loss 0.044750epoch 2, loss 0.000172epoch3,loss0.000049

3.2 邏輯回歸實(shí)戰(zhàn)

邏輯回歸相比線性回歸中,改變的地方為第3步:模型函數(shù) 和 第4步:損失函數(shù)。

3.2.1 從零實(shí)現(xiàn)邏輯回歸

3、定義邏輯回歸模型

def sigmoid(X, w, b): ''' 定義sigmoid函數(shù) :param x: 參數(shù)x 返回計(jì)算后的值 ''' z = torch.mm(X, w) + breturn1.0/(1+np.exp(-z))

4、定義損失函數(shù)

# 在邏輯回歸中,我們使用的是對數(shù)損失函數(shù)(交叉熵?fù)p失函數(shù))def BCE_loss(y_hat, y): ''' 損失函數(shù) :param y_hat: 預(yù)測值 :param y: 實(shí)際值 loss ''' m = np.shape(y_hat)[0] loss = 0.0 for i in range(m): if y_hat[i, 0] > 0 and (1 - y_hat[i, 0]) > 0: loss-= (y[i, 0] * np.log(y_hat[i, 0]) + (1 - y[i, 0]) * np.log(1 - y_hat[i, 0])) else: loss-= 0.0returnloss/m

責(zé)任編輯:xj

原文標(biāo)題:【機(jī)器學(xué)習(xí)】線性回歸與邏輯回歸的理論與實(shí)戰(zhàn)

文章出處:【微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8353

    瀏覽量

    132315
  • 線性回歸
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    4292

原文標(biāo)題:【機(jī)器學(xué)習(xí)】線性回歸與邏輯回歸的理論與實(shí)戰(zhàn)

文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    構(gòu)建語音控制機(jī)器人 - 線性模型和機(jī)器學(xué)習(xí)

    2024-07-31 |Annabel Ng 在該項(xiàng)目的[上一篇博客文章]中,我介紹了運(yùn)行機(jī)器人電機(jī)、處理音頻信號和調(diào)節(jié)電壓所需的電路的基礎(chǔ)知識。然而,機(jī)器人還沒有完全完成!盡管機(jī)器人可以正確移動
    的頭像 發(fā)表于 10-02 16:31 ?156次閱讀
    構(gòu)建語音控制<b class='flag-5'>機(jī)器</b>人 - <b class='flag-5'>線性</b>模型和<b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>

    【「時(shí)間序列與機(jī)器學(xué)習(xí)」閱讀體驗(yàn)】時(shí)間序列的信息提取

    個(gè)重要環(huán)節(jié),目標(biāo)是從給定的時(shí)間序列數(shù)據(jù)中提取出有用的信息和特征,以支持后續(xù)的分析和預(yù)測任務(wù)。 特征工程(Feature Engineering)是將數(shù)據(jù)轉(zhuǎn)換為更好地表示潛在問題的特征,從而提高機(jī)器學(xué)習(xí)
    發(fā)表于 08-17 21:12

    運(yùn)放THS4551理論上輸入是線性的,DC掃描,輸出也是線性的,為什么我們的輸出不是線性的?

    運(yùn)放THS4551 理論上輸入是線性的,DC掃描,輸出也是線性的,為什么我們的輸出不是線性的?是哪里存在問題嗎?請幫忙解決,謝謝
    發(fā)表于 08-15 07:20

    【「時(shí)間序列與機(jī)器學(xué)習(xí)」閱讀體驗(yàn)】+ 鳥瞰這本書

    清晰,從時(shí)間序列分析的基礎(chǔ)理論出發(fā),逐步深入到機(jī)器學(xué)習(xí)算法在時(shí)間序列預(yù)測中的應(yīng)用,內(nèi)容全面,循序漸進(jìn)。每一章都經(jīng)過精心設(shè)計(jì),對理論知識進(jìn)行了詳細(xì)的闡述,對實(shí)際案例進(jìn)行了生動的展示,使讀
    發(fā)表于 08-12 11:28

    【「時(shí)間序列與機(jī)器學(xué)習(xí)」閱讀體驗(yàn)】全書概覽與時(shí)間序列概述

    時(shí)間序列中的自相關(guān)性。 時(shí)間序列有基于線性場景,也有一些非線性性質(zhì)周期性和不對稱性、波動的聚集性、波動中出現(xiàn)的跳躍現(xiàn)象,以及時(shí)間的不可逆性。機(jī)器學(xué)習(xí)已經(jīng)是目前非
    發(fā)表于 08-07 23:03

    MATLAB預(yù)測模型哪個(gè)好

    在MATLAB中,預(yù)測模型的選擇取決于數(shù)據(jù)類型、問題復(fù)雜度和預(yù)測目標(biāo)。以下是一些常見的預(yù)測模型及其適用場景的介紹: 線性回歸(Linear Regression): 線性回歸是最基本的
    的頭像 發(fā)表于 07-11 14:31 ?361次閱讀

    matlab預(yù)測模型有哪些

    環(huán)境,使其成為預(yù)測模型開發(fā)和實(shí)現(xiàn)的理想平臺。本文將詳細(xì)介紹MATLAB中常用的預(yù)測模型及其應(yīng)用。 線性回歸模型 線性回歸是一種簡單的預(yù)測模型,用于分析兩個(gè)或多個(gè)變量之間的
    的頭像 發(fā)表于 07-11 14:27 ?664次閱讀

    不同類型神經(jīng)網(wǎng)絡(luò)在回歸任務(wù)中的應(yīng)用

    神經(jīng)網(wǎng)絡(luò)是一種強(qiáng)大的機(jī)器學(xué)習(xí)模型,可以用于各種任務(wù),包括回歸。在本文中,我們將討論不同類型的神經(jīng)網(wǎng)絡(luò),以及它們在回歸任務(wù)中的應(yīng)用。 基本的神經(jīng)網(wǎng)絡(luò) 基本的神經(jīng)網(wǎng)絡(luò),也稱為多層感知器(M
    的頭像 發(fā)表于 07-11 10:27 ?938次閱讀

    機(jī)器學(xué)習(xí)算法原理詳解

    機(jī)器學(xué)習(xí)作為人工智能的一個(gè)重要分支,其目標(biāo)是通過讓計(jì)算機(jī)自動從數(shù)據(jù)中學(xué)習(xí)并改進(jìn)其性能,而無需進(jìn)行明確的編程。本文將深入解讀幾種常見的機(jī)器學(xué)習(xí)
    的頭像 發(fā)表于 07-02 11:25 ?672次閱讀

    名單公布!【書籍評測活動NO.35】如何用「時(shí)間序列與機(jī)器學(xué)習(xí)」解鎖未來?

    捕捉復(fù)雜非線性模式的場景中顯得力不從心。 將時(shí)間序列的分析與預(yù)測用于大規(guī)模的數(shù)據(jù)生產(chǎn)一直存在諸多困難。 在這種背景下,結(jié)合機(jī)器學(xué)習(xí),特別是深度學(xué)習(xí)技術(shù)的時(shí)間序列分析方法,成了研究和應(yīng)用
    發(fā)表于 06-25 15:00

    機(jī)器學(xué)習(xí)六大核心算法深度解析

    算法歷程:線性回歸是一種古老的統(tǒng)計(jì)方法,它試圖找到最佳擬合數(shù)據(jù)的直線或超平面,最早可以追溯到19世紀(jì)初的高斯最小二乘法理論
    發(fā)表于 04-23 16:25 ?1474次閱讀
    <b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>六大核心算法深度解析

    發(fā)展新質(zhì)生產(chǎn)力,打造橡塑新高地 聚焦“國際橡塑展回歸上海啟航盛典”

    闊別六年,行業(yè)年度盛事 - “CHINAPLAS國際橡塑展”將重磅回歸上海,于2024年4月23 - 26日在上海國家會展中心(虹橋)盛裝綻放。開幕在即,“國際橡塑展回歸上海啟航盛典”3月28日在上
    的頭像 發(fā)表于 03-29 15:30 ?927次閱讀
    發(fā)展新質(zhì)生產(chǎn)力,打造橡塑新高地 聚焦“國際橡塑展<b class='flag-5'>回歸</b>上海啟航盛典”

    深入探討線性回歸與柏松回歸

    或許我們所有人都會學(xué)習(xí)的第一個(gè)機(jī)器學(xué)習(xí)算法就是線性回歸算法,它無疑是最基本且被廣泛使用的技術(shù)之一——尤其是在預(yù)測分析方面。
    的頭像 發(fā)表于 03-18 14:06 ?567次閱讀
    深入探討<b class='flag-5'>線性</b><b class='flag-5'>回歸</b>與柏松<b class='flag-5'>回歸</b>

    華為公司經(jīng)營基本回歸常態(tài) 華為2023年銷售收入超7000億

    華為公司經(jīng)營基本回歸常態(tài) 華為2023年銷售收入超7000億 此前華為輪值董事長胡厚崑在新年致辭中就表示華為ICT基礎(chǔ)設(shè)施業(yè)務(wù)保持穩(wěn)健,終端業(yè)務(wù)好于預(yù)期,數(shù)字能源和云業(yè)務(wù)實(shí)現(xiàn)良好增長,智能汽車
    的頭像 發(fā)表于 03-15 17:03 ?1643次閱讀

    RC串聯(lián)電路時(shí)間常數(shù)的計(jì)算怎么用回歸法處理?

    RC串聯(lián)電路時(shí)間常數(shù)的計(jì)算怎么用回歸法處理? 回歸分析是一種常用的統(tǒng)計(jì)分析方法,用于確定變量之間的關(guān)系。在電路領(lǐng)域中,RC串聯(lián)電路是一種常見的電路結(jié)構(gòu),用于存儲和釋放電荷,因此其時(shí)間常數(shù)是一個(gè)重要
    的頭像 發(fā)表于 11-20 16:50 ?1056次閱讀