|
|
|
|
# 第一章——线性回归原理
|
|
|
|
|
|
|
|
|
|
### 线性回归概述
|
|
|
|
|
|
|
|
|
|
#### 例子:
|
|
|
|
|
|
|
|
|
|
- 数据:工资和年龄(两个特征)
|
|
|
|
|
- 目标:预测银行会贷款给我多少钱(标签)
|
|
|
|
|
- 考虑:工资和年龄都会影响最终银行贷款的结果,那么它们各自有多大的影响被?(参数)
|
|
|
|
|
|
|
|
|
|
| 工资 X1 | 年龄 X2 | 额度 Y |
|
|
|
|
|
| ------- | ------- | ------ |
|
|
|
|
|
| 4000 | 25 | 20000 |
|
|
|
|
|
| 8000 | 30 | 70000 |
|
|
|
|
|
| 7500 | 33 | 50000 |
|
|
|
|
|
|
|
|
|
|
其中工资、年龄是特征,用来预测额度,而我们不可能直接拿工资 × 年龄,因为明显工资更重要些,那么可能建成的方程是 Y = (X1 × θ1) × (X2 × θ1),其中θ就是各种特征的权重,那么最终我们要求解的就是各种的θ。
|
|
|
|
|
|
|
|
|
|
而线性回归就说得到每个数据最终的预测Y(具体的值),除了回归还有分类,分类是离散型的0/1等固定值的分类。
|
|
|
|
|
|
|
|
|
|
### 通俗理解
|
|
|
|
|
|
|
|
|
|
- X1,X2就是我们的两个特征工资和年龄,Y是银行最终会借给我们额度
|
|
|
|
|
- 找到最合适的一条线,来拟合我们的数据点
|
|
|
|
|
|
|
|
|
|
![1613962795506](assets/1613962795506.png)
|
|
|
|
|
|
|
|
|
|
> 红色的点是数据,即前面的特征等
|
|
|
|
|
|
|
|
|
|
当前的数据是线性的,也就是数据不能映射在同一个平面。那么 Y = (X1 × θ1) × (X2 × θ1)就不能覆盖所有的点进行计算。怎么样解决这个问题,或者说如果我们能尽可能的满足绝大多数数据点,是否就可以了呢。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 误差
|
|
|
|
|
|
|
|
|
|
#### 误差项公式
|
|
|
|
|
|
|
|
|
|
接着上面的问题,什么样的平面才是最合理最满足的呢
|
|
|
|
|
|
|
|
|
|
- 假设 θ1是工资的参数, θ2是年龄的参数
|
|
|
|
|
- 拟合的平面:h θ(x) = θ0 + θ1X1 + θ2X2
|
|
|
|
|
- θ0是偏置项,不管θ1和θ2等什么变化,θ0的变化会影响平面向上或者向下浮动,对结果做微调
|
|
|
|
|
- 上面的方程可能无法形成矩阵相乘的形式,因为θ0没有X0,我们可以添加一个不影响整体的X0,以达到矩阵相乘的效果
|
|
|
|
|
- 整合:![1613963456265](assets/1613963456265.png)
|
|
|
|
|
|
|
|
|
|
- 真实值和预测值之间肯定要存在差异的(用ε来表示该误差)
|
|
|
|
|
|
|
|
|
|
- 对于每个样本:![1613965126989](assets/1613965126989.png)
|
|
|
|
|
|
|
|
|
|
> y表示真实值,![1613965189106](assets/1613965189106.png)(第二项)表示预测值,ε表示误差值,即预测值和真实值之间有一个误差项,其中 i 表示每个样本之间都有自己的真实值、预测值、误差项
|
|
|
|
|
|
|
|
|
|
误差项越小,代表预测的越准确。
|
|
|
|
|
|
|
|
|
|
#### 独立同分布的意义
|
|
|
|
|
|
|
|
|
|
- 误差 ε(i) 是独立且具有相同的分布,并服从均值为0方差为θ平方的高斯分布
|
|
|
|
|
|
|
|
|
|
> 我们拆开上面的话
|
|
|
|
|
|
|
|
|
|
- 独立:小明和小红一起来贷款,他们没关系
|
|
|
|
|
- 同分布:他们都是去同一个银行
|
|
|
|
|
- 高斯分布:银行可能会多给,也可能会少给,但绝大多数情况下这个浮动不会太大,极小情况下浮动会比较大,符合正常情况
|
|
|
|
|
|
|
|
|
|
![1613977618784](assets/1613977618784.png)
|
|
|
|
|
|
|
|
|
|
现实中也很难有绝对的高斯分布,大多数是近似高斯分布,也就是我们算法推导的时候也很难得到一个完全正确的答案,只有最接近的答案,也就是存在误差。
|
|
|
|
|
|
|
|
|
|
#### 似然函数的作用
|
|
|
|
|
|
|
|
|
|
- 预测值与误差:![1613978116054](assets/1613978116054.png)(1)
|
|
|
|
|
|
|
|
|
|
> y是真实值、x是预测值、ε误差值,现在我们要求的就是θ,它应该怎么求解
|
|
|
|
|
|
|
|
|
|
- 由于误差服从高斯分布:![1613978136136](assets/1613978136136.png)(2)
|
|
|
|
|
|
|
|
|
|
> 高斯分布的公式,这里我们要求的是θ,所以把θ移动到左边,变成y - θX = ε,即演变成
|
|
|
|
|
|
|
|
|
|
- 将(1)式带入(2)式:![1613978160407](assets/1613978160407.png)(3)
|
|
|
|
|
|
|
|
|
|
> 这里我们希望左边的x和θ组合完后,和真实值y越解决越好,即成为y的可能性越大越好
|
|
|
|
|
|
|
|
|
|
- 似然函数:![1613978566334](assets/1613978566334.png)
|
|
|
|
|
|
|
|
|
|
解释:为什么引入,什么样的参数跟我们的数据组合后恰好是真实值
|
|
|
|
|
|
|
|
|
|
- 对数似然:![1613978607945](assets/1613978607945.png)
|
|
|
|
|
|
|
|
|
|
解释:乘法难解,加法就容易了,对数里乘法可以转换成加法
|
|
|
|
|
|
|
|
|
|
- 展开化简:![1613980700874](assets/1613980700874.png)
|
|
|
|
|
|
|
|
|
|
- 目标:让似然函数(对数变换后也一样)越大越好
|
|
|
|
|
|
|
|
|
|
![1613980821171](assets/1613980821171.png)(最小二乘法)
|
|
|
|
|
|
|
|
|
|
#### 参数求解
|
|
|
|
|
|
|
|
|
|
- 目标函数:![1614044218548](assets/1614044218548.png)
|
|
|
|
|
- 求偏导:![1614044234709](assets/1614044234709.png)
|
|
|
|
|
- 偏导等于0的最优解:![1614044250549](assets/1614044250549.png)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 梯度下降
|
|
|
|
|
|
|
|
|
|
#### 通俗理解
|
|
|
|
|
|
|
|
|
|
- 引入:当我们得到了一个目标函数后,如何求解?(并不一定可解,线性回归可以当做是一个特例)
|
|
|
|
|
- 常规套路:机器学习的套路就是我们交给机器一堆数据,然后告诉它什么样的学习方式是对的(目标函数),然后让它朝着这个方向去做
|
|
|
|
|
- 如何优化:一步步的完成迭代。![1614051473653](assets/1614051473653.png)
|
|
|
|
|
|
|
|
|
|
#### 参数更新方法
|
|
|
|
|
|
|
|
|
|
- 目标函数:![1614053992861](assets/1614053992861.png)
|
|
|
|
|
|
|
|
|
|
> θ0和θ1分别得出方向,最终找到综合的结果。
|
|
|
|
|
|
|
|
|
|
- 寻找山谷的最低点,也就是我们的目标函数终点
|
|
|
|
|
|
|
|
|
|
- 下山分多步走(更新参数)
|
|
|
|
|
|
|
|
|
|
1. 找到最合适的方向
|
|
|
|
|
2. 每次走一小步
|
|
|
|
|
3. 按照方向和步伐更新参数
|
|
|
|
|
|
|
|
|
|
![1614054121928](assets/1614054121928.png)
|
|
|
|
|
|
|
|
|
|
梯度下降,目标函数:![1614054304093](assets/1614054304093.png)
|
|
|
|
|
|
|
|
|
|
- 批量梯度下降:![1614054320647](assets/1614054320647.png)
|
|
|
|
|
|
|
|
|
|
(容易得到最优解,但由于每次考虑所有样本,速度很慢)
|
|
|
|
|
|
|
|
|
|
- 随机梯度下降:![1614054359779](assets/1614054359779.png)
|
|
|
|
|
|
|
|
|
|
(每次找到一个样本,迭代速度快,但不一定每次都朝着收敛的方向)
|
|
|
|
|
|
|
|
|
|
- 小批量梯度下降发:![1614054402887](assets/1614054402887.png)
|
|
|
|
|
|
|
|
|
|
> 简化成代码即 θ = θ - α×(1/n) × ( (残差×数据)矩阵 )
|
|
|
|
|
>
|
|
|
|
|
> 残差=![1614131914417](assets/1614131914417.png)
|
|
|
|
|
|
|
|
|
|
(每次更新选择一小部分数据来算)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 学习率(步长)
|
|
|
|
|
|
|
|
|
|
> 上面小批量梯度公式里的α
|
|
|
|
|
|
|
|
|
|
- 学习率(步长):对结果会产生巨大的影响,一般小一些
|
|
|
|
|
- 如何选择:从小的开始,知道不能再小
|
|
|
|
|
- 批处理数:32、64、128都可以,很多时候还要考虑资源和时间
|
|
|
|
|
|
|
|
|
|
![1614062404175](assets/1614062404175.png)
|
|
|
|
|
|