1.什么是机器学习?

机器学习(Machine Learning, ML)是通过算法让计算机从数据中自动学习规律,并利用这些规律对未知数据进行预测或决策的技术。其核心思想是通过数据驱动的方式,让机器从经验中改进性能。

机器学习的本质是从数据中学习一个映射函数(模型),将输入映射到输出。

机器学习大致分为两种:

  1. 监督学习,常用
  2. 非监督学习

除了这两种之外,还有强化学习,但是这个不常用。

AI的概念

  • ANI:只做一件事的智能系统,例如智能驾驶,人脸识别等
  • AGI:通用人工智能,就相当于一个完整的人类,能思考、能做饭等等

1.1 监督学习

监督学习的关键是要给算法提供的学习的例子,要给出一些从正确示例,即给一个输入X,要有对应的一个正确输出Y(这个输出Y会当做X的标签,因为是固定的数据)。

例如判断一个邮件是否是垃圾邮件,需要输入X:一封邮件,输入Y:垃圾邮件(或者正常邮件),要有很多组这样的输入和输出。

算法学习了很多组X和Y的样本之后,我们给出一个新的输入X,它可以准确的预测出Y。

解决的问题大致上可以被分为两类:

  1. 离散的:对应分类算法,就是数据是分散的,只能对数据做分类,例如判断这个邮件是不是垃圾邮件,给一个图片判断是狗还是猫。
  2. 连续的:对应回归算法,就是数据是连续有规律的,能给一个具体的数字,例如给一组房价、房间、新闻信息,预测明年这件房子的房价。

它的一些典型算法有:

  • 回归:线性回归、支持向量回归(SVR)。
  • 分类:逻辑回归、决策树、SVM、神经网络。

1.2 非监督学习

非监督学习的关键就是数据没有标签,也就是只有输入X,没有一个固定的正确的输出Y,也就是说输入X不带标签。但要求找出X里的某种规律,这种规律是未知的、未被发现的、需要被探索的。

例如给一组客户在超市里购买清单的数据,算法自动找出买牛奶的男性客户大多数也会买上一罐啤酒,两者没有什么联系,但是算法发现了它的规律。

典型算法:

  • 聚类:K-Means、层次聚类。这里主要是找出一类相似的集合。
  • 降维:PCA(主成分分析)、t-SNE。这个是将大数据集精简为小数据集又尽可能不丢失数据的场景。
  • 异常检测:例如检测金融交易中的欺诈行为

2.1 线性回归模型

首先要有一些关键的术语需要了解:

  • 数据集

模型

线性回归模型就是简单的:f(X) = wX + b;

在这里插入图片描述

f 就是函数或者模型,X就是输入,w 和 b 就是模型里需要调试的参数
有时候 w 和 b 也会被称为系数或者权重。

成本函数

那我们要如何找到 w 和 b,来使得直线(模型)和样本之间更加拟合呢?这就需要成本函数

成本函数在线性回归中一般是这样:用模型算出来的 y 减去样本的 y,得到每个样本的误差。将所有误差平方后加起来,再除以样本数量的2倍,就得到了这个模型的成本,这个计算成本的方法被称为成本函数。

公式这样表示:
在这里插入图片描述

梯度下降算法

成本函数能够帮我们判断出 w 和 b 是否更加拟合,但是我们总不能轮询来找 w 和 b。

我们可以用一个类似于贪心算法的方式来找到下一个 w 或者 b。

以 w 为例,计算下一个 w 的公式为 : w = w - a * 成本函数的导数。

a 是指学习率,a后面的一坨就是 j 函数的导数,也就是函数的斜率。这样一遍又一遍的计算,就可以得到导数为 0 的 w,这个就是局部最优解。

学习率是一个固定的值,这个值的选择不能太大也不能太小,它就相当于选择下一个 w 的步子有多大,步子太大找不到最优解,步子太小又要做过多的运算。

在这里插入图片描述

那么这个导数要怎么计算呢?计算机里又不能用函数表示,实际上,这里需要用微积分来计算,最终导数的计算是这样:
在这里插入图片描述

总结1:

整个线性回归的模型如下:

在这里插入图片描述

进阶版:多个特征(x),向量化

如果是有多个特征,也就是说有多个 x,那么我们的公式就会变的很长,为了通用化,也为了代码能更加高效,我们可以用向量来表示,公式如下:
在这里插入图片描述
那么我们在Python代码里要怎么写代码呢?需要用到 NumPy 这个库,它可以提供向量的计算。
如下图,dot函数更高效,因为会用到计算机底层硬件的并发能力,要比for循环快:

在这里插入图片描述

进阶版:多个特征(x)的梯度下降

在这里插入图片描述

正规方程

除了梯度下降的方式来找 w 和 b ,还有一种方法:正规方程方法,不需要了解他的原理,只需要知道它是用高级线性代数库来一次性求解 w 和 b,有一些库的后台可能会用这个方法求解 w 和 b。

特征缩放

什么是特征缩放呢,就是说假如有两个特征 x,分别是 x1 和 x2,x1的范围是10到1000,x2的范围是1到10,这两个特征的数值相差太大,在做梯度下降要做很多次运算,这样是不好的,特征缩放,就是解决这个问题,进而加快梯度下降的。

有下面一些方法:

  1. 除以最大值,相当于把所有的数字变成百分比,都是0到1的小数。
  2. 均值归一化,这就要计算平均值,然后让所有的数字减去平均值,再除以(最大值和最小值的差值),就可以了。这样会得到带有正负的数字,在+1和-1之间。
  3. Z-Score归一化,就是计算每个数值的标准差(数学里的标准差)

如何检查梯度下降已经收敛

梯度下降已经收敛的意思,是指无论再迭代多少次,成本函数的值都不会再有太大的变动,就像下面的图标,横轴0到400代表迭代次数,纵轴代表成本函数的值。

可以看到最终曲线归于平稳,就代表已经收敛。

还可以通过成本函数的阈值来判断是否收敛,但是这个阈值很难确定。

在这里插入图片描述

如何选择一个学习率

如果我们的梯度下降曲线有这样的特征:随着迭代增加,成本函数的值反而增加,就说明代码有bug,或者是学习率太大,像下面这样:
在这里插入图片描述

这就需要取调小学习率。

那么学习率要怎么选择呢?我们可以依次尝试0.001、0.01、0.1、1

在这里插入图片描述

特征工程

什么是特征工程呢,特征工程就是在一开始处理数据,例如数据只有房子的长 x1 和宽 x2,要预测房价。

实际上我们预测房价一般使用面积,也就是说 x1 * x2,特征工程就是在处理样本之前,先根据经验增加一些新的特征。

多项式回归

这个就是指,将某个特征变成二次方、三次方、平方根等等,这样它的预测曲线就不是直线了。

2.2 逻辑回归(分类算法)

决策边界

分类算法就是判断这一组输入是1还是0。

在做分类时,我们需要做的是划出一个决策边界,例如一条直线,直线上方的都是1,下方的都是0,如下图。或者是一个圈,圈里的都是1,圈外的都是0。

那么这个决策边界可以用一个函数表示,如下面就是 z = x1 + x2 - 3 = 0。那么我们的目标就是能找到这样的一个决策边界。

在这里插入图片描述

模型

如何找到这个决策边界呢,自然就是逻辑回归的模型。我们可以用一个计算概率的通用的公式来表示,它的公式如下,w 和 b 放在了 e 上面:

在这里插入图片描述
可以这样理解,就是求这一组输入是1的概率有多大。

推导过程如下:
在这里插入图片描述

成本函数(损失函数)

同样的,逻辑回归也有成本函数,它的成本函数也需要时一个凸函数,它的公式为:

在这里插入图片描述

它的简化版是这样的:
在这里插入图片描述

与线性回归相似的地方

下面是梯度下降的函数,可以发现它和线性回归是相似的,但是其实他的 f(x) 模型是已经变了,因此实际是不同的,只是方法相同,同理,特征缩放在逻辑回归中也是适用的

在这里插入图片描述

2.3 过拟合和正则化

什么是过拟合呢?如下图所示,虽然第三个模型让所有的样本都在上面了,但是它显然是预测不准的,比如说凹下去的那个点。

欠拟合就是下图第一个模型一样,和样本相差过大。
在这里插入图片描述

上面这个是线性回归的,下面是逻辑回归的:
在这里插入图片描述

要解决这个问题的话,有三个方法:

  1. 扩大样本数量
  2. 选择特征,去除一些不相干的特征
  3. 正则化代价函数

正则化的原理是什么呢?是修改了成本函数,加入了对 w 的惩罚使得 w 不会太大,这里是平均的对所有的 w 都惩罚了。注意这里也有类似于学习率的一个参数选择,就是这个“入”

在这里插入图片描述

这个是成本函数,线性回归中要实现正则化,要修改它的梯度下降函数,如下:
在这里插入图片描述
线性回归中要实现正则化,也是要修改它的梯度下降函数,如下:
在这里插入图片描述

学习路径:https://www.bilibili.com/video/BV1Bq421A74G/?share_source=copy_web&vd_source=a06df7b174b0e55e45242729b8ce1758

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐