做网站的是什么职业,我市精神文明建设的门户网站,阿里主机 wordpress,微信公众平台小程序申请COURSE1 WEEK2
多维特征
在线性回归中#xff0c;往往特征不止一个#xff0c;而是具有多维特征
例如#xff0c;在预测房价的例子中#xff0c;我们知道更多的信息#xff1a; x 1 x_1 x1#xff1a;房屋的面积 x 2 x_2 x2#xff1a;卧室的数目 x 3 x_3 x3往往特征不止一个而是具有多维特征
例如在预测房价的例子中我们知道更多的信息 x 1 x_1 x1房屋的面积 x 2 x_2 x2卧室的数目 x 3 x_3 x3楼层数目 x 4 x_4 x4房屋的年限 因此我们每一个特征 x ( i ) x^{(i)} x(i) 的表示变成了向量形式 x j ( i ) x^{(i)}_j xj(i) 表示具体的某的 特征 i 行 j 列
从而我们的线性模型公式转化为 f w , b ( x ) w 1 x 1 w 2 x 2 w 3 x 3 w 4 x 4 b f_{w,b}(x) w_1x_1 w_2x_2 w_3x_3 w_4x_4 b fw,b(x)w1x1w2x2w3x3w4x4b 其中 w i w_i wi可以理解为第 i i i 个特征对目标的贡献程度
进而推广到更一般的形式 f w , b ( x ) w 1 x 1 w 2 x 2 ⋯ w n x n b f_{w,b}(x) w_1x_1 w_2x_2 \dots w_nx_n b fw,b(x)w1x1w2x2⋯wnxnb 将所有的参数 w i w_i wi组合在一起形成向量 w ⃗ [ w 1 , w 2 , … , w n ] \vec {w} [w_1, w_2, \dots, w_n] w [w1,w2,…,wn]将所有的特征 x i x_i xi 组合在一起形成一个向量 x ⃗ [ x 1 , x 2 , … , x n ] \vec{x} [\boldsymbol x_1, \boldsymbol x_2, \dots, \boldsymbol x_n] x [x1,x2,…,xn]
从而将模型形式可以写为 f w ⃗ , b ( x ⃗ ) w ⃗ ⋅ x ⃗ b f_{\vec w, b}(\vec x) \vec w \cdot \vec x b fw ,b(x )w ⋅x b 其中 ⋅ \cdot ⋅ 代表点乘
这种具有多个特征的线性回归模型叫做多元线性回归
向量化
在多元线性回归中使用向量化的方法可以使得代码的编写更加简洁实现更加快速
如果不使用向量化在代码的编写中我们需要计算以下结果 f w ⃗ , b ( x ⃗ ) ∑ j 1 n w j x j b f_{\vec w, b}(\vec x) \sum _{j1}^{n}w_jx_j b fw ,b(x )j1∑nwjxjb 当 n n n 较大时需要较大的计算量实现较为复杂
f 0
for j in range(n):f f w[j] * x[j]
f f b所谓向量化就是把数据都看作向量在每一步的计算中使用向量的计算。例如多元线性回归模型将 w w w 和 特征 x x x 进行点乘计算
f np.dot(w, x) b向量化的好处
使得代码更加简洁运算速度更快
多元线性回归的梯度下降
与单变量线性回归的梯度下降相似唯一不同的是此时要把参数 w w w 当作是一个向量 w ⃗ \vec w w 因此得到参数更新的公式 w j w j − α ∂ ∂ w j J ( w ⃗ , b ) b b − α ∂ ∂ b J ( w ⃗ , b ) w_j w_j - \alpha \frac{\partial}{\partial w_j}J(\vec w, b) \\ b b - \alpha \frac{\partial}{\partial b}J(\vec w, b) wjwj−α∂wj∂J(w ,b)bb−α∂b∂J(w ,b)
正规方程
正规方程即最小二乘法。
由于我们要求解损失函数最小的时候对应的参数值所以不妨将损失函数看作是参数的函数然后对损失函数求一阶导函数令一阶导函数等于 0求解其极小值点就对应着最优的参数
特点
仅适用于线性回归解决最小化参数问题同梯度下降算法但是不需要迭代当特征较多时 10000运行速度较慢
只要特征变量的数目并不大标准方程是一个很好的计算参数的替代方法。具体地说只要特征变量数量小于一万通常使用标准方程法而不使用梯度下降法。
特征缩放
使用特征缩放的方法能够使得梯度下降算法的运行速度得到提升
所谓特征缩放就是在进行模型训练之前对数据进行归一化操作 例如以房价预测为例特征又房屋面积 x 1 x_1 x1 和卧室数量 x 2 x_2 x2因此 p r i c e ^ w 1 x 1 x 2 x 2 b \hat {price} w_1x_1 x_2x_2 b price^w1x1x2x2b 其中 x 1 ∈ [ 300 , 2000 ] x 2 ∈ [ 0 , 5 ] x_1 \in [300,2000]x_2 \in [0, 5] x1∈[300,2000]x2∈[0,5] 数据集 $x_1 2000, x_2 5, price $500K$ 由此可以看出我们的参数 w 1 w_1 w1应该较小 w 2 w_2 w2 应该较大 即对于一个好的模型来说 当特征的可能指较小时其参数的合理值将相对较大当特征的可能指较大时其参数的合理值将相对较小 当每个特征的取值范围相差较大时特征关系与损失函数图像如下
如右侧的损失函数梯度图当我们使用梯度下降算法时如果学习率设置不当算法会来回左右横跳动经过很长一段时间才会收敛到最优值 当我们使用特征缩放时即将 x 1 x_1 x1和 x 2 x_2 x2进行重新标度归一化到区间 [ 0 , 1 ] [0,1] [0,1]内保证了两个特征拥有一个可比较的范围从而使得损失函数梯度图更像一个圆形便于算法能够快速收敛到最优点
特征缩放方法
特征缩放的目的是将一列数据变化到某个固定区间(范围)中
均值归一化
将数据归一化到区间 [ − 1 , 1 ] [-1,1] [−1,1]内 x x − μ x m a x − x m i n x \frac{x - \mu}{x_{max} - x_{min}} xxmax−xminx−μ 其中 μ \mu μ 是数据 x x x 的均值
Z-score 归一化
即将数据转化为均值为0标准差为1的分布 x x − μ σ x \frac{x - \mu}{\sigma } xσx−μ 其中 μ \mu μ 是数据的均值 σ \sigma σ 是标准差
特征缩放的好坏具体取决于所有特征进行特征缩放后的取值范围是否尽量一致以保证梯度下降算法的有效进行
梯度下降法则
如何判断梯度下降是否收敛
一般而言在模型训练阶段随着迭代次数的进行损失值如下图所示
可以看到的是当迭代次数大于300时曲线接近平行下降的趋势非常平缓此时意味着我们的梯度下降开始收敛了
通常可以使用 epsilon法进行自动收敛测试即设置收敛阈值 ε 0.001 \varepsilon 0.001 ε0.001当损失值下降幅度小于阈值时即认为算法开始收敛但从实际来看要想确定一个正确的阈值是非常困难的
如何设置学习率
如果学习率设置过大则最终结果不容易收敛
如果学习率设置太小则会导致算法运行较长时间 通过绘制损失函数与迭代次数关系的图像如果损失函数出现时而下降时而上升即不是一直下降的趋势那么则表明学习率的设置可能较大也可能是代码存在错误
因此在实际工作中一般会选择一系列的值不断去尝试且在尝试的过程中只对模型的部分数据进行有限的迭代次数通过对比来选择最优的学习率
多项式回归
特征工程
在实际问题中使用的模型往往比较复杂因此有时需要利用特征工程的方法来对模型加入一些重要的特征
例如在预测房价时目前存在临街长度 x 1 x_1 x1 和深度 x 2 x_2 x2因此房价预测模型为 f w ⃗ , b ( x ⃗ ) w 1 x 1 w 2 x 2 b f_{\vec w, b}(\vec x) w_1x_1 w_2x_2 b fw ,b(x )w1x1w2x2b
但是在实际中根据生活经验使用房屋面积作为单特征可能会更好的帮助我们进行预测因此引入第三个变量房屋面积 x 3 x_3 x3且 x 3 x 1 x 2 x_3 x_1x_2 x3x1x2从而我们的模型转化为 f w ⃗ , b ( x ⃗ ) w 1 x 1 w 2 x 2 w 3 x 3 b f_{\vec w, b}(\vec x) w_1x_1 w_2x_2 w_3x_3 b fw ,b(x )w1x1w2x2w3x3b 这种方法叫做创建新特征
多元线性回归特征工程
将多元线性回归与特征工程的思想结合起来就是多项式回归的算法这可以使我们获得更好的数据模型
对于通过面积来预测房价的例子根据数据集的分布情况可以看出如果使用二次函数来拟合效果可能会更好如下图 但是考虑到二次函数在达到最高点之后会再次下降而实际情况中房屋面积越大价格应该是越高因此对模型进行调整改为三次函数模型 同时在加入高次幂时要记得对使用特征缩放得方法保证我们的梯度下降算法有效的进行
除此之外由于观察到随着面积的增长价格增长的趋势不在那么陡峭因此也可以考虑使用平方根函数