第一部分:多变量线性回归
1.多特征
例:房子价格决定于,房间个数、房间尺寸、位置等
符号:
n=特征数量
=第i个训练实例,也即特征矩阵的第i行
=特征矩阵的第i行第j个特征,也即第i个训练实例的第j个特征
支持多变量的假设 ℎ 表示为:
此时,模型参数是n+1维的向量,任何一个训练实例也都是n+1维的向量,因此特征矩阵X的维度是m*(n+1),基于矩阵运算,公式可简化为
2.多变量梯度下降
期望:
参数:
代价函数:
目标:找到使得最小的参数矩阵
梯度下降:
Python代码:
def computeCost(X,y, theta):
inner =np.power(((X *theta.T) - y),2)
return np.sum(inner) /(2 *len(x))
3.梯度下降的时间1——特征缩放(feature scaling)
原理:让所有的特征保持在相同的尺寸内以使得梯度下降更快收敛
如图,左边是原始的图形,当两组数据差别较大的时候,图形会显得特别扁平,梯度下降算法就会显得特别慢,我们可以将所有的特征都缩放到-1到1之间,如右边的图形所示每此时梯度下降就会比较快。
此外还可以使用均值归一化:,其中。是平均值,是标准差。
4.梯度下降的实践2——学习率(learning rate)
梯度下降:
如图:如果学习率太大,会不收敛,如果学习率太小则下降慢
问题:如何选择学习率使得梯度下降高效且趋于收敛
解决方案:绘制代价函数与迭代次数的图表来观察,通常将代价函数变化值与某个阈值进行比较,选出合适的学习率
一般情况下,以下几个学习率可供考虑:0.01,0.03,0.1,0.3,1,3,10
5.特征和多项式回归
我们在建立模型的时候并不是所有的数据都适合使用,有些数据本身可以进行修改。
对于某些数据可以简化:比如房子的临街的宽度与纵向深度可以转化为一个值就是房子的面积
另外我们还可以用
6.正规方程
假设:
问题:求也即求解使得代价函数最小的
解决方案:假设训练特征矩阵为X(包含x0=1),训练结果为y,利用正规方程解出来的向量: ,注:对于不可逆矩阵,正规方程得方法不可用
in Octivate:
pinv(X'*X)*X'y
python实现正规方程:
import numpy as np
def normalEqn(X,y):
theta = np.linalg.inv(X.T@X)@X.T@y
return theta