0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

机器学习:线性回归与逻辑回归的理论与实战

深度学习自然语言处理 来源:深度学习自然语言处理 作者:奋斗喵 2020-12-26 09:58 次阅读

1、基本概念

要进行机器学习,首先要有数据。从数据中学得模型的过程称为“学习”或“训练”。其对应的过程中有几个基本术语需要知道。

(1)训练集:模型训练过程中使用的数据称为训练集,其中每个样本称为训练样本。如:D={X1,X2,X3,…,Xm}。

(2)特征向量:对于每个样本如Xi = (xi1, xi2,…xin)是一个n维列向量,表示样本Xi有n个属性。

2、理论

给定由n个属性描述而成的m个数据集为:D={X1,X2,X3,…,Xm},其中Xi = (xi1, xi2,…xin)。

线性模型是试图学得一个通过属性的线性组合来进行预测的函数,即:

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

其中4c0ac61e-4691-11eb-8b86-12bb97331649.png,其中4c480c40-4691-11eb-8b86-12bb97331649.png。当Θ和b确定之后,模型就得以确认。

2.1 线性回归

2.1.1 什么是回归

若我们欲预测的是连续值,如:房价,则此类学习任务称为“回归”。同理机器学习中还有“分类”任务,即我们欲预测的是离散值,如:“合格”、“不合格”。其中对于二分类任务,称为“正类”、“负类”;涉及多个类别时,则称为“多分类”任务。

在线性模型中,我们分为线性回归与逻辑回归两种模型,下面我们对两种模型分别进行讲解分析。

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

图1 线性回归

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

图2 逻辑回归

2.1.2 线性回归推导

1、线性回归试图学得:

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

2、参数估计

(1)首先衡量f(X)与Y之间的差别,我们使用均方误差来衡量。

均方误差的推导过程如下:

拟合函数为:

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

矩阵形式为:

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

真实值和预测值之间通常情况下是会存在误差的,我们用ε来表示误差,对于每个样本都有:

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

通常我们假设样本空间中全体样本中服从一个未知“分布”,我们获得的每个样本都是独立地从这个分布上采样获得的,即“独立同分布”(iid)。

在这里误差ε是独立并且具有相同的分布,并且服从均值为0,方差为4de875da-4691-11eb-8b86-12bb97331649.png的正态分布。

由于误差服从正态分布,那么有:

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


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

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

用似然函数进行估计,即求出什么样的参数跟我们给出的数据组合后能更好的预测真实值,有:

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

对式8取对数,将连乘转化为加法为:

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

对式9展开化简为:

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

由上式可以看出,右边第一项为一个常量,似然函数要取最大值,因而第二项越小越好,有:

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

上述公式相当于最小二乘法的式子,即为均方误差的式子。

(2)求解Θ:闭式解。

我们试图让均方误差最小化,即

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

基于均方误差最小化来进行模型求解的方法称为“最小二乘法”。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧式距离之和最小。求解方法为对Θ求偏导。

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

接下来需要对矩阵求偏导,过程如下:

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为满秩矩阵时。


在现实中56b13cc4-4691-11eb-8b86-12bb97331649.png往往不是满秩矩阵,在许多变量中会遇到大量的变量,其数目超过样本数目,会导致解出多个Θ,常见的做法是引入正则化或者进行降维。

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

沿着函数梯度方向下降最快的就能找到极小值:

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

沿着梯度方向更新参数Θ的值:

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

批量梯度下降是用了训练集中的所有样本。因此在数据量很大的时候,每次迭代都要遍历训练集一遍,开销会很大,所以在数据量大的时候,可以采用随机梯度下降法或者批量梯度下降法。

2.2 逻辑回归

对于分类任务,用线性回归无法直接进行回归学习。对于二分类任务,其输出标记597a4d24-4691-11eb-8b86-12bb97331649.png,而线性回归模型产生的预测值59a21908-4691-11eb-8b86-12bb97331649.png是实值。

2.2.1 对数几率

一个事件的几率是指该事件发生的概率与该事件不发生的概率的比值。p(Y=1|X)是指事件发生的条件概率,p(Y=0|X)是指事件不发生的条件概率,则该事件的对数几率或logit函数是:

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

对数几率范围为[0,+∞),当p=1时候,logit(p)=+∞,当p=0时候,logit(p)=0。

对于逻辑回归而言,有:

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

将其Θ*X转换为概率有:

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

其中

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

也称为sigmoid函数,函数图如下所示:

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

图3 Sigmoid函数图

2.2.2 参数估计

在逻辑回归进行模型学习时,应用极大似然估计来估计模型参数:

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

对式22取对数,将连乘转化为加法为:

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

上述公式为求解逻辑回归的损失函数:交叉熵损失函数。

然后对J(Θ)进行求偏导,求最小值,得到Θ的估计值。沿着函数梯度方向下降就能最快的找到极小值:

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

沿着梯度方向更新参数Θ的值:

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

3、实战

3.1 线性回归实战

3.1.1 从零开始实现

1、首先生成数据集

num_inputs = 2 # 数据集的属性 n : 2num_examples = 1000 # 数据集的树木 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 # 标签labels+=torch.tensor(np.random.normal(0,0.01,size=labels.size()),dtype=torch.float32)#加上一些随机噪声

进行可视化后,如下图所示:

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

图4 数据集

2、数据读取

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)

如:当batch_size=10时,我们的输出结果如下所示:

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


第一个为输入x(size=[10, 2]),第二个为标签y(size=[10])。

3、定义线性回归模型

def LinReg(X, w, b):returntorch.mm(X,w)+b#torch.mm表示两个矩阵相乘,[batch_size,num_inputs]*[num_inputs,1]=[batch_size,1]

4、定义损失函数

# 线性回归模型的损失函数为均方差损失函数def squared_loss(y_hat, y):return(y_hat-y.view(y_hat.size()))**2/2

5、定义优化算法

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

6、进行训练

训练步骤如下:

(1)首先读取一个batch_size的数据和标签
(2)然后进行模型计算;
(3)然后计算损失函数;
(4)然后反向求导优化参数;

lr = 0.03num_epochs = 3net = LinRegloss = squared_loss for epoch in range(num_epochs): # 训练模型一共需要num_epochs个迭代周期 # 在每一个迭代周期中,会使用训练数据集中所有样本一次(假设样本数能够被批量大小整除)。X # 和y分别是小批量样本的特征和标签 for X, y in data_iter(batch_size, features, labels): l = loss(net(X, w, b), y).sum() # l是有关小批量X和y的损失 l.backward() # 小批量的损失对模型参数求梯度 sgd([w, b], lr, batch_size) # 使用小批量随机梯度下降迭代模型参数 # 不要忘了梯度清零 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()))

最后输出结果如下所示:

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

3.2 逻辑回归实战

逻辑回归相比线性回归中,改变的地方为第3步:模型函数 和 第4步:损失函数。

3.2.1 从零实现逻辑回归

3、定义逻辑回归模型

def sigmoid(X, w, b): ''' 定义sigmoid函数 :param x: 参数x 返回计算后的值 ''' z = torch.mm(X, w) + breturn1.0/(1+np.exp(-z))

4、定义损失函数

# 在逻辑回归中,我们使用的是对数损失函数(交叉熵损失函数)def BCE_loss(y_hat, y): ''' 损失函数 :param y_hat: 预测值 :param y: 实际值 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

责任编辑:xj

原文标题:【机器学习】线性回归与逻辑回归的理论与实战

文章出处:【微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器学习
    +关注

    关注

    66

    文章

    8126

    浏览量

    130570
  • 线性回归
    +关注

    关注

    0

    文章

    41

    浏览量

    4251

原文标题:【机器学习】线性回归与逻辑回归的理论与实战

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深入探讨线性回归与柏松回归

    或许我们所有人都会学习的第一个机器学习算法就是线性回归算法,它无疑是最基本且被广泛使用的技术之一——尤其是在预测分析方面。
    的头像 发表于 03-18 14:06 185次阅读
    深入探讨<b class='flag-5'>线性</b><b class='flag-5'>回归</b>与柏松<b class='flag-5'>回归</b>

    多元线性回归的特点是什么

    何为多元线性回归?对比于前一天学习线性回归,多元线性回归
    的头像 发表于 10-31 10:34 680次阅读
    多元<b class='flag-5'>线性</b><b class='flag-5'>回归</b>的特点是什么

    机器学习theta是什么?机器学习tpe是什么?

    解一下theta。在机器学习中,theta通常表示模型的参数。在回归问题中,theta可能表示线性回归的斜率和截距;在分类问题中,theta
    的头像 发表于 08-17 16:30 1231次阅读

    人工智能课程学什么

    其次,在机器学习方面,你需要学习机器学习相关的算法和数据结构,机器
    的头像 发表于 08-13 14:25 638次阅读

    线性回归(2)#机器学习

    机器学习
    未来加油dz
    发布于 :2023年07月14日 16:54:21

    线性回归(1)#机器学习

    机器学习
    未来加油dz
    发布于 :2023年07月14日 16:53:23

    多元线性回归(2)#机器学习

    机器学习
    未来加油dz
    发布于 :2023年07月14日 16:15:35

    多元线性回归(1)#机器学习

    机器学习
    未来加油dz
    发布于 :2023年07月14日 16:14:40

    线性回归背景下交互作用术语的直观解释

    线性回归中相互作用项的综合指南
    的头像 发表于 07-05 16:30 1102次阅读
    <b class='flag-5'>线性</b><b class='flag-5'>回归</b>背景下交互作用术语的直观解释

    PyTorch教程-4.1. Softmax 回归

    在 SageMaker Studio Lab 中打开笔记本 在3.1 节中,我们介绍了线性回归,在3.4 节中从头开始实现 ,并在3.5 节中再次使用深度学习框架的高级 API来完成繁重的工作
    的头像 发表于 06-05 15:38 420次阅读
    PyTorch教程-4.1. Softmax <b class='flag-5'>回归</b>

    PyTorch教程-3.1. 线性回归

    3.1. 线性回归¶ Colab [火炬]在 Colab 中打开笔记本 Colab [mxnet] Open the notebook in Colab Colab [jax
    的头像 发表于 06-05 15:38 339次阅读
    PyTorch教程-3.1. <b class='flag-5'>线性</b><b class='flag-5'>回归</b>

    PyTorch教程3.1之线性回归

    电子发烧友网站提供《PyTorch教程3.1之线性回归.pdf》资料免费下载
    发表于 06-05 11:30 0次下载
    PyTorch教程3.1之<b class='flag-5'>线性</b><b class='flag-5'>回归</b>

    PyTorch教程3.5之线性回归的简洁实现

    电子发烧友网站提供《PyTorch教程3.5之线性回归的简洁实现.pdf》资料免费下载
    发表于 06-05 11:28 0次下载
    PyTorch教程3.5之<b class='flag-5'>线性</b><b class='flag-5'>回归</b>的简洁实现

    PyTorch教程3.4之从头开始执行线性回归

    电子发烧友网站提供《PyTorch教程3.4之从头开始执行线性回归.pdf》资料免费下载
    发表于 06-05 11:25 0次下载
    PyTorch教程3.4之从头开始执行<b class='flag-5'>线性</b><b class='flag-5'>回归</b>

    机器学习应该学习哪些 人工智能技术学习路线分享

    熟悉机器学习领域的经典算法、模型及实现的任务等,同时学习搭建和配置机器学习环境,并学会用 线性
    发表于 05-10 14:42 466次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b>应该<b class='flag-5'>学习</b>哪些 人工智能技术<b class='flag-5'>学习</b>路线分享