机器学习笔记(一)

在油管看了 Andrew Ng 的课,发现真正的专家就是能够将晦涩难懂的知识结合生活的趣事讲得有滋有味,丝毫没有平时听课的那种困乏感,因此有点像追剧一样一连看了好几节,口齿清楚,节奏也把握得当,尽管一节只几分钟,但确实是将知识点讲清楚了,干货满满,在此整理了一些我个人学习的笔记和思考

1. 什么是机器学习

两种主要的机器学习:

  • 监督学习(supervised learning)
  • 无监督学习(unsupervised learning)

监督学习在现实中的应用很广泛

增强学习(reinforcement learning):另一种机器学习算法

了解如何运用工具才是最重要的

2. 监督学习

x -> y

input -> output label

从给定的正确答案中学习(即给定x的正确标签y)

算法通过对于正确的x、y搭配学习,最终在只输入x的时候,对于输出y进行预测

Input(X) Outout(Y) Application
email spam?(0/1) 垃圾邮件过滤器
audio text transcripts 语音识别
English Spanish 机器翻译
ad,user info click?(0/1) 在线广告
image,radar info position of other cars 自动驾驶汽车
image of phone defect?(0/1) 目视检查

主要算法类型:

①回归算法(Regression):从无限可能中进行预测(e.g. 房价预测)

②分类算法(Classification):有限种可能(e.g. 乳腺肿瘤预测)

3. 无监督学习

给定x的时候没有添加标签的y,对于给定的数据集,使用算法找出其中的特点或结构,而不是标记正确的答案

使用算法对于未被标记的数据分成簇(e.g. 谷歌新闻,基因分类,客户分类)

聚类算法(Clustering)

异常检测(Anomaly detection):找到异常的点

降维(Dimensionality reduction)

4. Jupyter Notebooks

当前流行的数据科学以及机器学习的工具,可以配合上Numpy、Matplotlib等内容进行数据分析

image-20230610195329309

两种Cell,包括Markdown CellCode Cell

image-20230610195512678

5. 线性回归

线性回归模型

简单了解可以使用线性回归处理的问题

例:根据房屋的大小预测房屋的价格

image-20230604225532002

根据数据画出一条直线

这是一种监督学习的模型,事先给出的数据集是正确的答案,即成对的x、y

回归模型是用来预测数字的监督学习模型,处理预测具体数值回归问题

线性回归模型只是回归模型的一种

另一种最常见的监督学习模型分类模型,用于预测分类和离散分类

回归和分类最大的区别在于分类只会有少量的可能输出结果,而回归可能有无穷多种结果

image-20230604231046520

训练集(training set):用于训练模型的数据集

首先通过输入的训练集训练模型,然后模型根据特定的值进行预测

xx代表输入变量,称为特征(feature)或者输入特征 比如2104

yy代表输出变量,称为目标 比如400

mm代表训练样本的总数 这里就是47

(xx, yy)表示一个单独的训练样本,比如这里的(2104, 400)

(x(i),y(i)x^{(i)}, y^{(i)})表示第i个训练样本

比如(2104, 400)可以表示为 (x(1),y(1)x^{(1)}, y^{(1)}),1代表的其实就是训练集的行

image-20230604233341600

在监督学习中,训练集包含输入的特征以及输出的目标(正确的结果),这些用来喂给训练算法

然后训练算法产生一个函数,使用ff表示,它的职责是通过输入一个新的xx,然后预测或者估计一个y^\widehat{y} ,这个代表yy估计值或者预测值

ff就被称为模型(model),X被称为输入特征yy代表真实的目标,直到真正发生才会知道

image-20230607222641821

关键问题:怎样表示ff?

fw,b(x)=wx+bf_{w, b}(x) = wx + b

输入不同的xx,根据wwbb的取值,输出一些yy的预测值

image-20230607223450301

当前这种接收xxff的表达,也被称为单变量线性回归(univariate linear regression)

6. 成本函数(cost function)

fw,b(x)=wx+bf_{w, b}(x) = wx + b

对于这个ff而言,wwbb可以称为该模型的参数(parameter)

那么,wwbb究竟扮演了什么角色?

image-20230608224404174

image-20230608224828740

对于训练集而言,里面的任意数据可以使用(x(i),y(i)x^{(i)}, y^{(i)})表示,那么可以将ff进行转化

y^(i)=fw,b(x(i))\widehat{y}^{(i)} = f_{w, b}(x^{(i)})

通过模型,我们想要输入具体的xx,给出目标yy的预测值,并且使其尽可能接近真实值

对于线性回归来说,可以将ff进一步表述为:

fw,b(x(i))=wx(i)+bf_{w, b}(x^{(i)}) = wx^{(i)} + b

怎样找到合适的wwbb?这就需要我们构造成本函数

成本函数的构造

  • 首先,用y^\widehat{y} - yy,这是求得预测值与真实值之间的误差

  • 然后,将y^y2(\widehat{y}- y)^2的结果求出,这其实是方差

  • 然后考虑到要求每一组训练样本的方差,那么需要配合(i)(i)进行表示y^(i)y(i)2(\widehat{y}^{(i)}- y^{(i)})^2

  • 最终我们将所有的训练样本的方差求和,并且为了数据不会增长过快,再乘上1m\dfrac{1}{m},为了后面计算更简便,再除以2

J(w,b)=12mi=1m(y^(i)y(i))2J(w, b) = \dfrac{1}{2m}\sum\limits_{i=1}^m(\widehat{y}^{(i)}- y^{(i)})^2

注意:这里的mm是训练样本的数量

以上便是成本函数的公式

我们可以再将y^(i)\widehat{y}^{(i)}替换一下

J(w,b)=12mi=1m(fw,b(x(i))y(i))2 J(w, b) = \dfrac{1}{2m}\sum\limits_{i=1}^m(f_{w, b}(x^{(i)})- y^{(i)})^2

成本函数的探索

我们的主要目的就是使得误差尽可能的小

minw,bJ(w,b)\min_{w, b} J(w, b)

接下来,先从简单的线性回归开始了解

让b = 0,fw(x)=wxf_w(x)=wx

这样,我们的成本函数可以写成 J(w)=12mi=1m(fw(x(i))y(i))2J(w) = \dfrac{1}{2m}\sum\limits_{i=1}^m(f_w(x^{(i)})- y^{(i)})^2

image-20230609223919653

image-20230609224808706 image-20230609232529414 image-20230609233221593

ff的值取决于xx,因为在ff当中,ww是一个确定下来的值,而xx会变化,对应输入的xx有一个ff与之对应,也就是所谓y^\widehat y

JJ的值取决于ww

以上描述的便是fw(x)f_w(x)J(w)J(w)之间的联系

成本函数可视化

image-20230610093951691

image-20230610094344549

JJ的形状像一个超级碗,根据给定的bbww变化,因此有wwbb两个轴,体现的是一个三维的图形

可以将JJ的值看做是高度,我们可以将其表示为等高线,在同一条线上的JJ值是相等的

image-20230610095027176

其实,如果需要求最小的JJ,其实取得就是等高线的中心,对应到3D的超级碗上,其实就是碗的底部

可视化案例

image-20230610100028179

7. 梯度下降

梯度下降算法可以用于将任何的函数最小化,而不仅仅是线性回归的成本函数

我们的主要目标是获取J(w,b)J(w, b)的最小值

做法:

  • 首先设置初识的wwbb(比如说把它们都设置成0)

  • 持续更换wwbb来减小J(w,b)J(w, b)的值,知道我们达到或者接近最小值(因为可能不止一个最小值)

    image-20230610134416362

可以想象你人站在山顶的某处,这就是你选定的初始点,然后你需要选择一条下山最快的路

这个时候你原地旋转一圈,找到一个方向(最陡峭),然后迈一步,再重复转一圈,找最陡峭的方向,然后一步步走到一个低谷

但是,如果你开始的位置不同,你可能会沿着另一个方向走进另一个低谷,并且无法发现其他的低谷,那么这是梯度下降算法的一个特点

而这些低谷被称为局部最小值(local minima)

实现梯度下降

递推式(=表示赋值)

w=wαwJ(w,b)w = w - \alpha\frac{ \partial}{ \partial w } J(w, b)

α\alpha表示学习率(learning rate),通常是一个0~1之家的正数,用于控制下山的步伐的大小

b=bαbJ(w,b)b = b - \alpha\frac{ \partial}{ \partial b } J(w, b)

image-20230610145035726

需要注意的是,wwbb是同时更新的,因此在给wwbb赋值时,二者需要都被更新

梯度下降的导数

简化一下,JJ只和ww相关

image-20230610171924743

在某个点做一条切线,那么计算这个点的正弦,或者说斜率,便是导数的数值了

在上图的方向上,斜率为正,因而ww减去一个正值会不断变小

image-20230610172442256

在这个例子里面,取另一个点,此时斜率为负,因而ww会不断增大

梯度下降的学习率

依然沿用先前简化的J(w)J(w), 现在我们考虑如果α\alpha很小会发生什么

image-20230610173531068

借助J(w)J(w)ww关系的曲线,如果选定某个点,然后一点点,迈着婴儿的步伐,慢慢地下降,那么当然最终是可以到达谷底的,但是这却要耗费相当长的时间

换句话说,梯度的下降非常缓慢

image-20230610174110028

但是如果α\alpha取值太大,有可能导致一步跨过最小值,这反而会更糟

通过判断导数为0,可以找出局部最小值点

image-20230610174528922

ww到达这种点时,导数为0,因此ww的值不再变化

image-20230610174901038

使用固定的学习率,当J(w)J(w)越来越接近最小值的时候,斜率会越来越小,步子也会越来越小

因此,可以在保持学习率不变的情况下,逐渐接近最小值

线性回归的梯度下降

image-20230610192814999

根据先前总结的递推式,将原始的fw,b(x)f_{w,b}(x)代入进行化简

image-20230610193730759

由于线性回归的成本函数是一个凸函数,因此的它的形状是碗状的,只会有一个全局最小值

因此,只要学习率选择恰当,总是能够找到它的最小值

应用梯度下降

image-20230610194432187

批梯度下降:梯度下降中的每一步都需要检查所有的样本,而不是样本的子集