机器学习之单变量线性回归(Linear Regression with One Variable)

本文主要是介绍机器学习之单变量线性回归(Linear Regression with One Variable),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

机器学习之单变量线性回归(Linear Regression with One Variable)

1. 模型表达(Model Representation)

我们的第一个学习算法是线性回归算法,让我们通过一个例子来开始。这个例子用来预测住房价格,我们使用一个数据集,该数据集包含俄勒冈州波特兰市的住房价格。在这里,我要根据不同房屋尺寸所售出的价格,画出我的数据集:

image

我们来看这个数据集,如果你有一个朋友正想出售自己的房子,如果你朋友的房子是1250平方尺大小,你要告诉他们这房子能卖多少钱。 那么,你可以做的一件事就是构建一个模型,也许是条直线。从这个数据模型上来看,也许你可以告诉你的朋友,他大概能以220000美元左右的价格卖掉这个房子,显然这就是监督学习算法的一个例子。

在上一篇博文Introduction to Machine Learning,我们已经了解到之所以这个例子被称作 Supervised Learning ,是因为对于每个数据来说,我们给出了“正确的答案”。而且,更具体来说,这是一个回归问题。回归一词指的是我们根据之前的数据预测出一个准确的输出值。对于这个例子就是价格。

同时,还有另一种最常见的 Supervised Learning 的方式叫做分类问题。更进一步来说,在 Supervised Learning 中我们有一个数据集,这个数据集被称训练集。因此对于房价的例子,我们有一个包含不同房屋价格的训练集,我们的任务就是从这个训练集中学习并预测房屋价格

现在我们给出经常使用的一些符号定义,如下:

image

用 m 来表示训练样本的数目,因此,在这个数据集中如果表中有47行,那么我们就有47组训练样本,m就等于47。

image
用小写字母 x 来表示输入变量,往往也被称为特征量,就是用 x 表示输入的特征,并且我们将用 y 来表示输出变量或者目标变量,也就是我的预测结果,也就是上面表格的第二列。

在这里我们要使用 (x, y) 来表示一个训练样本,因此,在这个表格中的单独的一行对应于一个训​​练样本。

为了表示某个特定的训练样本,我们将使用x上标(i)与y上标(i)来表示,并且用这个来表示第 i 个训练样本,所以上标为 i ,注意这不是求幂运算,这个(x(i), y(i)) 括号里的上标 i 只是一个索引,表示我的训练集里的第 i 行。

我们的房屋价格预测就是一个监督学习算法的工作方式,如下图:

image

我们可以看到这里有我们的训练集里房屋价格,我们把它喂给我们的学习算法,进而学习得到一个函数,按照惯例,通常表示为小写 h,h 代表 hypothesis(假设), 在此处,h 表示一个函数,其输入是房屋尺寸大小。因此 h 根据输入的 x 值来得出 y 值,y 值对应房子的价格。因此,h 是一个从 x到 y 的函数映射。

大家经常会有这样的疑问:为什么这个函数被称作假设(hypothesis)?你们中有些人可能知道 hypothesis 的意思,从字典或者其它什么方式可以查到。其实在机器学习中,这是一个在早期被用于机器学习的名称,它有点绕口,对某些函数来说这可能不是一个很恰当的名字。例如,对表示从房屋的大小到价格的函数映射,我认为这个词 "hypothesis" 就可能不是最好的名称。但是这是人们在机器学习中使用的标准术语,所以我们不用太纠结人们为什么这么叫它。

小结:当解决房价预测问题时,我们实际上是要将训练集“喂”给我们的学习算法,进而学习得一个假设 h,然后将我们要预测的房屋的尺寸作为输入变量输入给 h,预测出该房屋的交易价格作为输出变量输出为结果。

当我们在设计学习算法的时候,需要去思考的是怎样得到这个假设 h。例如,对于我们的房价预测问题,我们该如何表达 h ? 一种可能的表达方式为:

image

因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。

那么为什么是一个线性函数呢? 实际上,有时候我们会有更复杂的函数,也许是非线性函数,但是由于线性方程是简单的形式,我们将先从线性方程的例子入手。当然,最终我们将会建立更复杂的模型以及更复杂的学习算法。

2. 代价函数(Cost Function)

接下来我们将定义代价函数的概念,这将有助于我们弄明白怎样将最有可能的直线与我们的数据相拟合。

image

在线性回归中我们有一个像上图一样的训练集 记住 m 代表了训练样本的数量,例如,此处 m = 47 。

而我们的假设函数(也就是用来进行预测的函数),线性函数形式也已在上图中表示出来了。

接下来我们引入一些术语,诸如 θ0 和 θ1 之类这些 θi 我们通常称其为模型参数。那么我们如何选择这两个参数值 θ0 和 θ1 呢?选择不同的参数   θ0 和 θ1 我们会得到不同的假设函数。例如下图:

image

在线性回归中,我们有一个训练集,我们要做的就是得出 θ0 和 θ1 这两个参数的值,来让假设函数表示的直线尽量地与这些数据点很好的拟合。那么我们如何得出 θ0 和 θ1 的值,来使它很好地拟合数据的呢?

我们的想法是,我们要选择能使 h(x) 输入 x 时我们预测的值最接近该样本对应的 y 值的参数 θ0 和 θ1 。在我们的训练集中有一定数量的样本,我们知道 x 表示卖出哪所房子,并且知道这所房子的实际价格,所以,我们要选择参数值,尽量使得在训练集中给出的 x 值,能准确地预测 y 的值。

让我们给出标准的定义,在线性回归中,我们要解决的是一个最小化问题

我们选择的参数 θ0 和 θ1 决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差(modeling error)。

image

我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数。即使得代价函数:

image

最小。我们绘制一个等高线图,三个坐标分别为 θ0 和 θ1 和J(θ0 1):

image

image

可以看出在三维空间中存在一个使得J(θ0,θ1)最小的点。

3. 梯度下降(Gradient Descent)

我们已经定义了代价函数,现在我们来介绍梯度下降算法,该算法可以将代价函数 J 最小化。梯度下降是很常用的算法,它不仅被用在线性回归上,并且被广泛的应用于机器学习的众多领域中,之后为了解决其他线性回归问题,我们也将使用梯度下降法来最小化其他函数。

在这里,我们有一个函数 J(θ0 1) ,也许这是一个线性回归的代价函数,也许是一些其他函数,要使其最小化,我们需要用一个算法来最小化函数    J(θ0 1),事实证明,梯度下降算法可应用于多种多样的函数求解,所以想象一下如果你有一个函数J(θ0, θ1, θ2, ...,θn ),你希望可以通过最小化 θ0 到 θn 来最小化此代价函数J(θ0 到θn),用n个θ是为了证明梯度下降算法可以解决更一般的问题。但为了简洁起见,为了简化符号,在接下来的讨论中,我们只用两个参数。

image

下面就是关于梯度下降的构想。首先我们要做的是对 θ0  和 θ1 进行初始化。实际上,它们到底是什么其实并不重要,但通常的选择是将 θ0 设为0
,同时也将 θ1 也设为0,即将它们都初始化为0。

我们在梯度下降算法中要做的就是不停地一点点地改变 θ0 和 θ1 ,试图通过这种改变使得 J(θ0 1) 变小,直到我们找到 J(θ0 1) 的最小值。或许是局部最小值。

让我们通过一些图片来看看梯度下降法是如何工作的,我们在试图让 J(θ0 1)  最小,注意坐标轴 θ0 和 θ1 在水平轴上,而函数 J(θ0 1) 在垂直坐标轴上,图形表面高度即是 J(θ0 1) 的值。我们希望最小化这个函数,因此我们从 θ0 和 θ1 的某个值出发。所以想象一下,对 θ0 和 θ1 赋以某个初值,也就是对应于从这个函数表面上的某个起始点出发,因此不管 θ0 和 θ1 的取值是多少,我将它们初始化为0。但有时你也可把它初始化为其他值。

image

image

现在我希望大家把这个图像想象为一座山。想像类似这样的景色,公园中有两座山,想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上。在梯度下降算法中,我们要做的就是旋转360度,看看我们的周围,并问自己,如果我想要下山,如果我想尽快走下山,我们需要朝什么方向?

如果我们站在山坡上的某一点,你看一下周围 ​,你会发现最佳的下山方向大约是那个方向。好的,现在你在山上的新起点上,你再看看周围,然后再一次想想我应该从什么方向迈着小碎步下山? 然后你按照自己的判断又迈出一步,往那个方向走了一步。然后重复上面的步骤,从这个新的点,你环顾四周并决定从什么方向将会最快下山,然后又迈进了一小步,又是一小步…并依此类推,直到你接近局部最低点的位置。

此外这种下降有一个有趣的特点,不同的起始点开始进行梯度下降算法,你会得到一个非常不同的局部最优解,这就是梯度下降算法的一个特点。

下图是梯度下降算法的定义:

image
注意,在梯度下降算法中,我们需要同时更新 θ0 和 θ1。

image

如果学习速率太小,只能这样像小宝宝一样一点点地挪动,去努力接近最低点,这样就需要很多步才能到达最低点。

如果学习速率太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛。实际上,会离最低点越来越远,因此,如果α太大,会导致无法收敛,甚至发散。

image

如果你的参数已经处于局部最低点,那么梯度下降法更新其实什么都没做(求导为0),它不会改变参数的值,这也正是你想要的,因为它使你的解始终保持在局部最优点,这也解释了为什么即使学习速率 α 保持不变时,梯度下降也可以收敛到局部最低点

image

梯度下降一步后,新的导数会变小一点点。随着梯度下降法的运行,你移动的幅度会自动变得越来越小,直到最终移动幅度非常小,你会发现已经收敛到局部极小值。

在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度。这是因为当我们接近局部最低点时(很显然在局部最低时导数等于零 ),导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法,所以实际上没有必要再另外减小α。

image

image
image

实际上,用于线性回归的代价函数总是呈现一个弓形的样子,这个函数的专业术语是凸函数。这个函数没有任何局部最优解,只有一个全局最优解。

image

实际上,我们刚刚介绍的梯度下降,是“批量梯度下降”,指的是,在梯度下降的每一步中我们都用到了所有的训​​练样本。在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以在每一个单独的梯度下降中,我们最终都要计算这样一项,这项需要对所有m个训练样本求和。

而事实上,也有其他类型的梯度下降法不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。

这篇关于机器学习之单变量线性回归(Linear Regression with One Variable)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/671052

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个