第2、5章 线性回归
概述
线性回归问题,是用来解决回归问题的最简单的算法。
线性回归(Linear Regression)是一种通过属性的线性组合来进行预测的线性模型,其目的是找到一条直线或者一个平面或者更高维的超平面,使得预测值与真实值之间的误差最小化。
如果特征只有一个,则称之为“一元线性分析”;如果特征有多个,则称之为“多元线性分析”。
基本原理
一元线性函数可以表达为:
,多元线性函数可以表达为
,我们把这个函数作为线性回归的“评估函数”。
其中
称之为“参数”,我们的目的就是找到最合适的
,使真实值和预测值之间的差异足够小。
一般采用梯度下降、最小二乘法去计算该参数。
代价函数
代价函数就是为了获得最合适的 而使用的函数。
平方误差函数
平方误差函数是最常用的代价函数,尤其在回归场景下的效果非常好:
最合适的 ,就是使代价函数 值最小的参数。
分析一下这个函数:
- :代表的是第i个预测结果。
- :代表的是第i个真实结果。
- :代表的是真实值与预测值的差的平方,之所以求平方是不是为了获得正数??
- :m代表的是训练样本的数量,除以m可以理解,求平均值,除2m就不知道是为啥了??
梯度下降
如何求得代价函数的最小值呢?
梯度下降是求解函数最小值的常用方法。梯度下降的步骤是:
- 设置 为某个值,比如0;
- 同时改变 的值,使 越好越小,直到接近局部最优。
- 此时的 就是最优解。
用一个形象的方式来描述梯度下降算法,如下图所示:
- 这是一座小山,目的是从山顶快速下山。
- 假设从点1开始下山,向周围看看哪个方向是下山最快的方向,然后往前走一步,比如到了1.1.
- 以1.1为始重复上述的步骤,一步步往山下走,最终走到了山脚。
- 而如果从点2开始下山的话,也会一步步走下山来,只不过终点可能是不一样的。
- 这正是梯度下降算法的一个特点:不同的起始点,可能到达不同的局部最优点。
梯度下降公式
下面给出梯度下降的公式:
推导过程就算了,没这个本事,下面看看该公式各个部分的含义:
- 目的:梯度下降的目的是求出最优点的 的取值。
- 最外层的repeat代表这个公式需要不断递归,直到达到最优点为止。
- for j=0 and j=1的意思是:因为只有两个 ,分别是 。
- := 这个符号是赋值的意思,即迭代更新 的值。这个在java中是很常见的用法,例如 。
-
:学习速率,代表着梯度下降的步长,α越大,则下降的越快,否则下降的越慢。
- 太大:造成无法收敛,过于发散的问题。
- 太小:迭代过程及其缓慢。
- :是导数,后面再详细描述导数的含义。
梯度下降的计算方式,称为同步更新方式,即使用同样的样本、参数来计算
的值。计算过程是这样的:
在计算
的时候,
依然是之前的
。
导数的作用
吴恩达老师介绍的导数概念,非常简单易懂:导数就是斜率。为了容易理解,假设
,我们看看
的变化情况:
如上图所示,沿着曲线画一条切线出来,该切线随着横轴变大的趋势,所以斜率是正值(
,如上图所示该斜率角为锐角,则斜率为正),则
,则
变小,往函数的底部移动;
而如果起始点在局部最优点的左边,切线不断变小,斜率为负数,则
,则
变大,往函数的底部移动;
斜率可以参考:斜率的计算公式
这两种情况下,都能保证 向着局部最优点移动。当到达局部最优点时,斜率为0,则 就不会再发生变化了。
通过梯度下降求解平方误差函数
把平方误差函数的公式带入梯度下降算法中,梯度下降算法变成如下所示的公式:
repeat{
}
这个公式,恕我推导不出来。
多变量线性回归
多变量线性回归,指的是样本特征的数量大于1个的情况,现实世界中这种情况更通用。
符号表
- :表示特征。
- y:预测结果。
- m:样本数量。
- n:特征数量
- :代表第i个样本的特征,是一个向量。
- :代表第i个样本的第j个特征。
评估函数
多变量线性回归的评估函数是
为了表达方便,我们假设
,则评估函数就变成了
。
下面对评估函数做一下简化处理,
- 假 设
- 假设
- 则
- 则 ,所以评估函数最终简化为 。
矩阵相乘的算法可以参考:机器学习之线性代数知识普及
梯度下降
多变量下梯度下降算法的公式变为如下所示:
repeat{
}
我们还是假设
,则
所以梯度下降算法就可以简化为:
repeat{
}
特征收敛
如果特征1的取值范围是(0-1),特征2的取值范围是(0-1000),这样的特征在梯度下降算法中计算起来非常慢且有可能无法收敛,解决方法就是把各个特征进行收敛,使它们的取值范围接近。
发散的特征指的是特征值间的差距过大,比如1和1000差1000倍,0.001和1其实也差1000倍。
除以最大值
比如可以把特征2的每个值都除以1000,这样就能得到(0-1)的数字了。但是这种方法有可能造成特征值太小,同样不能满足要求。
均值归一
其中
指的就是平均值;S指的是“
”
特征增减
有时候根据已有特征生成新特征,可以取得不俗的效果。
有时间把重复的特征去掉,反而能得到更好的效果。
α选值
α没有一个标准的值,太小的话计算效率慢;太大的话可能造成无法收敛,所以要不断地去优化这个参数,吴老师给出了一个经验值(0.001 0.003 0.01 0.03 0.1)。当收敛效果一致的情况下,选择稍大一些的α值,提升计算效率。
正规方程
利用正规方程可以一步求解,而不需要一步步迭代,正规方程的表达式为:
。
下面对梯度下降和正规方程进行对比,看看两者的优缺点各是什么。
梯度下降 | 正规方程 | |
---|---|---|
α | 需要计算合适的α值 | 不需要 |
计算速度 | 多次迭代,速度慢 | 直达目标,速度快 |
特征数量 | 无限制 | 小于10000 |
适用场景
示例
import pandas as pd
from sklearn.linear_model import LinearRegression
# 特征字段
features = ['accommodates', 'bedrooms', 'bathrooms', 'beds', 'price', 'minimum_nights', 'maximum_nights',
'number_of_reviews']
# normalize:特征是否做标准化处理,train_data['price']:是预测结果
reg = LinearRegression(normalize=True).fit(train_data[features], train_data['price'])
print("score", reg.score(test_data[columns], test_data['price']))
名词解释
高斯分布
高斯分布,也称之为正态分布。满足集中性、对称性、均匀变动性等特点。
- 集中性:正态曲线的高峰位于正中央,即均数所在的位置。
- 对称性:正态曲线以均数为中心,左右对称,曲线两端永远不与横轴相交。
- 均匀变动性:正态曲线由均数所在处开始,分别向左右两侧逐渐均匀下降。