百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

机器学习初级算法(二)——线性回归

toyiye 2024-04-27 03:47 20 浏览 0 评论

线性回归原理

一般而言,房价会受很多因素的影响而波动,如果我们假设房价只与房产面积已经厅室数量有关系,可以看到房价、面积、厅室呈现以下数据:

房产数据

我们可以将价格y和面积x1、厅室数量x2的关系表示为f(x)=θ0+θ1x1+θ2x2,很显然,我们的目的是使得f(x)尽量等于y,这就是一个直观的线性回归的样式。

  • 线性回归的一般形式

假设有数据集{(x1, y1), (x2, y2), ..., (xn, yn)},其中,xi=(xi1; xi2; xi3; ...; xid)∈n表示变量的数量,d表示每个变量的维度。那么,我们可以用以下函数来描述y和x之间的关系:

y和x之间的关系

如何来确定θ的值,使得f(x)尽可能接近y呢?回归问题中常用的性能度量是均方误差,可以表示为如下公式:

均方误差

我们可以选择合适的θ来让均方误差最小化。

  • 极大似然估计

下面我们用极大似然估计来解释为什么要用均方误差作为线性回归的性能度量。我们可以把目标值和变量写成如下等式:

等式转换

?表示我们未观测到的变量的印象,即随机噪音。我们假定?是独立同分布,服从高斯分布。根据中心极限定理得到如下结果:

中心极限定理转换

我们建立极大似然函数,即描述数据遵从当前样本分布的概率分布函数。由于样本的数据集独立同分布,因此可以写成如下形式:

极大似然函数

我们选择可以使似然函数最大化的θ,这就是极大似然估计的思想。为了方便计算,我们计算时通常对对数似然函数求最大值,即对两边取对数,推导结果如下:

推导过程

由上述推导可知,最大化似然函数与最小化红框部分是等价的(前面的1/2是为了后续计算方便的)。显然,这一结果就是均方误差,因此我们证明了用这个式子作为代价函数来优化线性回归模型在统计学的角度上来说是合理的。

线性回归的损失函数、代价函数与目标函数

首先明确损失函数、代价函数与目标函数的概念。损失函数度量的是单样本预测的错误程度,损失函数值越小,模型就越好。代价函数度量的是全部样本集的平均误差。目标函数则是代价函数和正则化函数,也是模型最终要优化的函数。

从上述概念中可以发现,代价函数已经可以度量样本集的平均误差了,那么我们为什么还要设定目标函数呢?这是因为当模型复杂度增加时,有可能出现对训练集模拟得很好,但是对测试集的效果却不好,也就是我们所说的过拟合现象,我们也称之为结构化风险。结构化风险最小化就是为了防止过拟合而提出来的策略。定义模型复杂度为J(F),则目标函数可表示为如下形式:

目标函数

其中,λJ(F)我们称为正则化,其目的就是防止过拟合。当训练集本身存在噪声时,拟合曲线对未知影响因素的拟合往往不是最好的。通常,随着模型复杂度的增加,训练误差会减少;但测试误差会先增加后减小。我们的最终目的是使测试误差达到最小,因此我们需要选取适合的目标函数。

线性回归的优化方法

常见的优化方法有梯度下降法、最小二乘法矩阵、牛顿法和拟牛顿法。对于线性回归模型,我们一般选用批随机梯度下降法(与随机梯度下降法不同,但现在我们所说的随机梯度下降往往是批随机梯度下降)来优化模型。推导过程如下:

线性回归随机梯度下降法推导

其中,下标j表示第j个参数,上标i表示第i个数据点。随机梯度下降法的优点是当数据点很多时,运行效率更高;缺点是由于每次只针对一批样本更新参数,未必能找到最快路径达到最优值,甚至有时候会出现参数在最小值附近徘徊无法收敛。如果函数为非凸函数,有可能找到的并非全局最优值,而是局部最优值。

线性回归的评价指标

线性回归是典型的回归问题,对于回归问题,常用的评价指标有均方误差(MSE)、均方根误差(RMSE)和平均绝对误差(MAE),但这些评价指标都无法消除量纲不一致而导致的误差值特别大的问题,因此对于线性回归,我们最常用的指标是R^2,可以避免量纲不一致问题。

R^2评价指标

其中,VAR为实际结果与预测结果的方差,从式子中可以看出,R^2能够让回归模型可以成功解释数据方差部分在数据固有方差中所占的比例,R^2越接近1,表示可解释力度越大,模型拟合的效果也就越好。

使用sklearn实现一个简单的线性回归案例

sklearn(scikit-learn)是基于Python实现的机器学习工具以及简单高效的数据挖掘和数据分析工具,其内部集成了常用的所有机器学习模型,线性回归模型就包含在sklearn的linear_model库中。因此,在使用时,我们需要将该线性回归模型导入。

from sklearn.linear_model import LinearRegression

下面我们通过一个简单的例子来感受一下线性回归模型的整个流程。首先我们利用NumPy生成数据:

import numpy as np
from sklearn.linear_model import LinearRegression

# 生成随机数种子 使每次产生的随机数都一样
np.random.seed(49)
x = np.random.rand(500, 3)
print(x)
# 构建映射关系,模拟真实的数据待预测值
# 映射关系设置为y = 2.1 + 2.8*x1 + 5.4*x2
y = x.dot(np.array([2.1, 2.8, 5.4]))

这里生成了一组映射关系为y = 2.1 + 2.8*x1 + 5.4*x2的数据,然后就可以利用sklearn的线性回归模型来训练模型并将训练好的模型用于预测。

# 生成模型
lr = LinearRegression(fit_intercept=True)
# 训练模型
lr.fit(x, y)
print("训练的参数值结果为:%s" % (lr.coef_))
# 评估模型
print('R^2为:%s' % (lr.score(x, y)))
# 预测目标值
x_test = np.array([2, 4, 5]).reshape(1,-1)
y_test = lr.predict(x_test)
print("预测值为: %s" % (y_test))

运行结果如下所示:

运行结果

由于我们设置的线性回归模型比较简单,只有三个参数,因此它的准确度达到了100%。

相关推荐

「linux专栏」top命令用法详解,再也不怕看不懂top了

在linux系统中,我们经常使用到的一个命令就是top,它主要是用来显示系统运行中所有的进程和进程对应资源的使用等信息,所有的用户都可以使用top命令。top命令内容量丰富,可令使用者头疼的是无法全部...

Linux 中借助 perf 对 php 程序模拟CPU高的案例分析

导语本文是一篇Linux借助工具分析CPU高的优化案例,没有任何干货内容,很详细的展示了优化CPU高的具体步骤,非常适合初中级读者阅读!...

centos漏洞处理方法(centos podman)

centos服务器最近有诸多漏洞,修复命令及对应的漏洞整理后,分享给大家RHSA-2020:1176-低危:avahi安全更新yumupdateavahi-libsRHSA-2017:326...

Linux上的free命令详解(Buffer和Cache)

解释一下Linux上free命令的输出。下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(FreeOutput)。例如:FO[2][1]...

linux 命令行之你真的会用吗?--free 基本用法篇

free命令行统计内存使用率及swap交换分区的使用率数据。是由sourceforge负责维护的,在ubuntu上其包名为procps,这个源码包中,除了free还有ps,top,vmstat,ki...

kong api gateway 初体验(konga github)

kongapigateway初体验(firstsight?)。Kong是一个可扩展的开源API层(也称为API网关或API中间件)。Kong运行在任何RESTfulAPI的前面,并通过插件...

在Ubuntu下开启IP转发的方法(ubuntu20 ip)

IP地址分为公有ip地址和私有ip地址,PublicAddress是由INIC(internetnetworkinformationcenter)负责的,这些IP地址分配给了注册并向INIC提...

基于 Kubernetes 的 Serverless PaaS 稳定性建设万字总结

作者:许成铭(竞霄)数字经济的今天,云计算俨然已经作为基础设施融入到人们的日常生活中,稳定性作为云产品的基本要求,研发人员的技术底线,其不仅仅是文档里承诺的几个九的SLA数字,更是与客户切身利益乃...

跟老韩学Ubuntu Linux系列-sysctl 帮助文档

sysctl一般用于基于内核级别的系统调优,man帮助手册如下。...

如何在 Linux/Unix/Windows 中发现隐藏的进程和端口

unhide是一个小巧的网络取证工具,能够发现那些借助rootkit、LKM及其它技术隐藏的进程和TCP/UDP端口。这个工具在Linux、UNIX类、MS-Windows等操作系统下都...

跟老韩学Ubuntu Server 2204-Linux性能管理-uptime指令帮助手册

uptime指令是每个从事Linux系统工作的相关同学必知必会的指令之一,如下是uptime指令的帮助手册。UPTIME(1)...

Openwrt+Rclone+emby+KODI搭建完美家庭影音服务器

特别声明:本篇内容参考了波仔分享,在此表示感谢!上一篇《Openwrt+emby+KODI搭建家庭影音服务器》只适用影音下载到本地的情形,不能播放云盘中的影音,内容较少,缺少了趣味性,也不直观。...

Linux Shell脚本经典案例(linux shell脚本例子)

编写Shell过程中注意事项:开头加解释器:#!/bin/bash语法缩进,使用四个空格;多加注释说明。命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。默认变量是全局的,在函数...

解决 Linux 性能瓶颈的黄金 60 秒

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断。...

跟老韩学Ubuntu Server 2204-Linux性能管理-vmstat指令帮助手册

vmstat可查看ubuntlinux的综合性能,是每个从事Linux人员必知必会、需掌握的核心指令之一。vmstat指令帮助手册如下。VMSTAT(8)...

取消回复欢迎 发表评论:

请填写验证码