网站换肤代码,京津冀协同发展的先行领域,深圳公司网站改版通知,上海电子商城网站制作Course1-Week2-多输入变量的回归问题 文章目录 Course1-Week2-多输入变量的回归问题1. 向量化和多元线性回归1.1 多维特征1.2 向量化1.3 用于多元线性回归的梯度下降法 2. 使梯度下降法更快收敛的技巧2.1 特征缩放2.2 判断梯度下降是否收敛2.3 如何设置学习率 3. 特征工程3.1 选…Course1-Week2-多输入变量的回归问题 文章目录 Course1-Week2-多输入变量的回归问题1. 向量化和多元线性回归1.1 多维特征1.2 向量化1.3 用于多元线性回归的梯度下降法 2. 使梯度下降法更快收敛的技巧2.1 特征缩放2.2 判断梯度下降是否收敛2.3 如何设置学习率 3. 特征工程3.1 选择合适的特征3.2 多项式回归 笔记主要参考B站视频“(强推|双字)2022吴恩达机器学习Deeplearning.ai课程”。 好文 2023吴恩达机器学习 上班族35 天学完~学习笔记 (1.1 监督学习)——系列文章入门机器学习/深度学习要多长时间 本篇笔记对应课程 Course1-Week2下图中深紫色。 1. 向量化和多元线性回归 在上一周“单变量线性回归”的基础上本周将继续拓展到“多元线性回归”第1节、“多项式回归”第3节并介绍加速梯度下降法收敛的技巧第2节。
1.1 多维特征
首先将单个特征扩展到多个特征下面是机器学习术语 m m m训练样本的总数。 n n n输入特征的总数。 X ⃗ \vec{X} X 全部的输入特征值是一个二维向量每一行表示一个样本每一列表示所有样本的单个特征。 x ⃗ j \vec{x}_j x j表示第 j j j个特征概念(一维向量) j j j的取值范围为 j 1 , . . . , n j1,...,n j1,...,n。 x ⃗ ( i ) \vec{x}^{(i)} x (i)第 i i i个训练样本的输入特征(一维向量) i i i的取值范围为 i 1 , . . . , m i1,...,m i1,...,m。 x ⃗ j ( i ) \vec{x}^{(i)}_{j} x j(i)第 i i i个训练样本的第 j j j个特征是单个值。如下图中 x ⃗ 4 ( 3 ) 30 \vec{x}^{(3)}_4 30 x 4(3)30。 y ⃗ ( i ) \vec{y}^{(i)} y (i)第 i i i个训练样本的目标值是单个值。 Y ⃗ \vec{Y} Y 全部的训练样本的特征值是一维向量。 注若无特殊说明所有的一维向量都默认为列向量。 概念区分 单变量线性回归(univariate linear regression)只有单个特征的线性回归模型。多元线性回归(multiple linear regression)具有多维特征的线性回归模型。multivariate regression不是上述“多元回归”另有别的意思后面介绍。 图1-2-1 四维特征的房价预测问题 如上图所示将“房价预测”中的输入特征数量增加为4个输入特征房屋面积、卧室数量、房屋层数、房屋年龄。于是显然其线性回归模型也将从 f w , b ( x ) w x b f_{w,b}(x) wxb fw,b(x)wxb 扩展为下面的向量形式 f w ⃗ , b ( x ⃗ ) w 1 x 1 w 2 x 2 . . . w 4 x 4 b ∑ j 1 n w j x j b w ⃗ ⋅ x ⃗ b \begin{aligned} f_{\vec{w},b}(\vec{x}) w_1x_1 w_2x_2 ... w_4x_4 b\\ \sum_{j1}^{n}w_jx_j b\\ \vec{w}·\vec{x} b \end{aligned} fw ,b(x )w1x1w2x2...w4x4bj1∑nwjxjbw ⋅x b w ⃗ [ w 1 , w 2 , . . . , w n ] T \vec{w}[w_1,w_2,...,w_n]^T w [w1,w2,...,wn]T表示参数(列)向量。 w i w_i wi表示当前特征对房屋价格影响。 b b b常数项参数。可以理解为房屋的基价(base price)。 x ⃗ [ x 1 , x 2 , . . . , x n ] T \vec{x}[x_1,x_2,...,x_n]^T x [x1,x2,...,xn]T表示单个样本的特征(列)向量。 w ⃗ ⋅ x ⃗ \vec{w}·\vec{x} w ⋅x 表示两个向量的点积。 1.2 向量化 简单来说所谓“向量化”就是将分散的数字绑在一起进行处理。虽然概念很简单但是“向量化”对于机器学习来说非常重要因为它可以使模型更简洁、代码更简洁并且也可以加速代码运行速度。比如下图给出了三种书写求和公式的方法。可以发现使用向量形式的模型表达式最简洁、代码最少(一行) 图1-2-2 向量化的好处 一个一个写很麻烦耗时耗力也不会加快代码计算。for循环每次只能计算单个乘法并相加n很大时非常耗时。向量相乘形式简洁、运行更快。这是因为 numpy.dot()可以并行计算所有乘法再进行相加。甚至某些内置算法还会使用GPU加速运算。 注Optional Lab介绍了一些NumPy的语法。 并且梯度下降法的迭代计算中使用向量更新参数也会非常简洁。所以机器学习中尽量使用向量化代码。
1.3 用于多元线性回归的梯度下降法 有了“向量化”的铺垫本节将前面的单变量线性回归问题扩展到多元线性回归。首先使用“向量”重写模型然后也就可以写出梯度下降法的“向量”形式进而迭代计算出模型参数 Model : f w ⃗ , b ( x ⃗ ) w ⃗ ⋅ x ⃗ b Cost function : min w ⃗ , b J ( w ⃗ , b ) 1 2 m ∑ i 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 Gradient descent repeat until convergence : { w j w j − α ∂ ∂ w j J ( w ⃗ , b ) w j − α m ∑ i 1 m [ ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) ⋅ x ⃗ j ( i ) ] , j 1 , 2 , . . . , n . b b − α ∂ ∂ b J ( w ⃗ , b ) b − α m ∑ i 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) \begin{aligned} \text{Model} : \quad f_{\vec{w},b}(\vec{x}) \vec{w}·\vec{x} b\\ \text{Cost function} : \quad \min_{\vec{w},b} J(\vec{w},b) \frac{1}{2m} \sum_{i1}^{m}(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})^2\\ \begin{aligned} \text{Gradient descent} \\ \text{repeat until convergence} \end{aligned} : \left\{\begin{aligned} w_j w_j - \alpha \frac{\partial }{\partial w_j} J(\vec{w},b) w_j - \frac{\alpha}{m} \sum_{i1}^{m}[(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})·\vec{x}^{(i)}_j],\; j1,2,...,n. \\ b b - \alpha \frac{\partial }{\partial b} J(\vec{w},b) b - \frac{\alpha}{m} \sum_{i1}^{m}(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}) \end{aligned}\right. \end{aligned} ModelCost functionGradient descentrepeat until convergence:fw ,b(x )w ⋅x b:w ,bminJ(w ,b)2m1i1∑m(fw ,b(x (i))−y(i))2:⎩ ⎨ ⎧wjbwj−α∂wj∂J(w ,b)wj−mαi1∑m[(fw ,b(x (i))−y(i))⋅x j(i)],j1,2,...,n.b−α∂b∂J(w ,b)b−mαi1∑m(fw ,b(x (i))−y(i)) 模型中 x ⃗ \vec{x} x 表示单个样本的所有特征是一维向量。 f w ⃗ , b ( x ⃗ ( i ) ) f_{\vec{w},b}(\vec{x}^{(i)}) fw ,b(x (i))是一个值 y ( i ) y^{(i)} y(i)是一个值。 除了梯度下降法还有一类求解模型参数的方法——正规方程法(Normal rquation method)。此方法利用线性代数的知识直接令代价函数的梯度 ∂ ∂ w ⃗ J ( w ⃗ , b ) 0 ⃗ \frac{\partial }{\partial \vec{w}} J(\vec{w},b) \vec{0} ∂w ∂J(w ,b)0 便可以一步求解出代价函数极小点所对应的参数值 w ⃗ ( X ⃗ T X ⃗ ) − 1 X ⃗ T Y ⃗ \vec{w}(\vec{X}^T\vec{X})^{-1}\vec{X}^T\vec{Y} w (X TX )−1X TY 见“详解正规方程”。但是这种方法有两个缺点 适用面小仅适用于线性拟合无法应用于其他方法比如下周要学的“逻辑回归算法(logistic regression algorithm)”或者神经网络(Course2)。计算规模不能太大如何特征值数量很大矩阵的逆等求解非常慢。 正规方程法通常会包含在机器学习函数库中我们无需关心具体的计算过程。对于大多数机器学习算法来说梯度下降法仍然是推荐的方法。 本节Quiz In the training set below, what is x 4 ( 3 ) x_4^{(3)} x4(3)? Please type in the number below (this is an integer such as 123, no decimal points). Answer: 30 Which of the following are potential benefits of vectorization? Please choose the best option. √ It can make your code shorter. √ It allows your code to run more easily on parallel compute hardware. √ It makes your code run faster. √ All of the above. To make gradient descent converge about twice as fast, a technique that almost always works is to double the learning rate α \alpha α. × True √ False With polynomial regression, the predicted values f w , b ( x ) f_{w,b}(x) fw,b(x) does not necessarily have to be a straight line (or linear) function of the input feature x x x. × False √ True 2. 使梯度下降法更快收敛的技巧
2.1 特征缩放 特征缩放(feature scaling)可以使梯度下降法更快收敛。这主要是因为不同特征的取值范围有很大不同但所有特征所对应的参数的学习率是一致的。这就导致取值范围较小的特征的参数会“跟不上”取值范围较大的特征的参数变化。比如我们来看看“特征值大小”和其关联的“参数大小”的关系首先将“房价预测”的问题简化成两个特征 图1-2-3 取值范围不同的特征对预测结果的影响不同 x 1 x_1 x1房屋面积范围是300~2000平方英尺。 x 2 x_2 x2卧室数量范围是0~5。 参数选择显然取值范围更大的 x 1 x_1 x1 影响更大。 w 1 50 , w 2 0.1 , b 50 w_150,w_20.1,b50 w150,w20.1,b50计算出来的房屋价格是 $ 100050.5 k 100050.5k 100050.5k显然与实际的 $ 500 k 500k 500k 完全不符。 w 1 0.1 , w 2 50 , b 50 w_10.1,w_250,b50 w10.1,w250,b50计算出来的房屋价格是 $ 500 k 500k 500k正好等于房屋实际价格。 于是便考虑将 特征值归一化使所有特征值的取值范围大致相同这样就不会影响参数的迭代计算了。如下图便给出了进行 特征缩放 前后的对比 图1-2-4 特征值缩放效果-等高图 左两图是训练样本散点图右两图是代价函数等高图。上两图对应特征缩放前下两图对应特征缩放后。 特征缩放前散点图呈现条形等高图呈极窄的椭圆形。这是因为对于范围较大的特征值( x 1 x_1 x1)所对应的参数 w 1 w_1 w1一点微小的改变就会导致代价函数剧烈变化进而使得等高图呈椭圆状。在使用梯度下降法的时候由于学习率一样每走一小步就会导致代价函数在 w 2 w_2 w2方向变化不多、但在 w 1 w_1 w1方向急剧变化于是就会“反复横跳”增加迭代次数和计算量甚至不能收敛。特征缩放后散点图分布较为均匀并且等高图呈圆形。梯度下降法可以径直朝最小值迭代减少迭代次数、更快的得到结果。 好现在我们知道进行 特征缩放 很有必要那具体如何进行“特征缩放”来使得所有特征都有相近的范围大小呢主要有下面三种方法并给出了第三种方法“Z-score归一化”的特征缩放效果 除以最大值所有特征除以各自的范围最大值使得特征值范围都在0~1之间。于是 0.15 ≤ x 1 2000 ≤ 1 0.15 \le \frac{x_1}{2000} \le 1 0.15≤2000x1≤1、 0 ≤ x 2 5 ≤ 1 0 \le \frac{x_2}{5} \le 1 0≤5x2≤1。均值归一化(Mean normalization)使得特征值范围大致为-1~1。假设 x 1 x_1 x1的平均值为 μ 1 600 \mu_1600 μ1600、 x 2 x_2 x2的平均值为 μ 2 2.3 \mu_22.3 μ22.3于是 − 0.18 ≤ x 1 − μ 1 2000 − 300 ≤ 0.82 -0.18 \le \frac{x_1 - \mu_1}{2000 - 300} \le 0.82 −0.18≤2000−300x1−μ1≤0.82、 − 0.46 ≤ x 2 − μ 2 5 − 0 ≤ 0.54 -0.46 \le \frac{x_2 - \mu_2}{5 - 0} \le 0.54 −0.46≤5−0x2−μ2≤0.54。Z-score归一化(Z-score normalization)【推荐】使得特征值服从标准正态分布。假设 x 1 x_1 x1的平均值和标准差分别为 μ 1 600 , σ 1 450 \mu_1600,\sigma_1450 μ1600,σ1450、 x 2 x_2 x2的平均值和标准差分别为 μ 2 2.3 , σ 2 1.4 \mu_22.3,\sigma_21.4 μ22.3,σ21.4于是 − 0.67 ≤ x 1 − μ 1 σ 1 ≤ 3.1 -0.67 \le \frac{x_1 - \mu_1}{\sigma_1} \le 3.1 −0.67≤σ1x1−μ1≤3.1、 − 1.6 ≤ x 2 − μ 2 σ 2 ≤ 1.9 -1.6 \le \frac{x_2 - \mu_2}{\sigma_2} \le 1.9 −1.6≤σ2x2−μ2≤1.9。 注Z-score归一化的合理性在于自然界中大部分数据都是服从正态分布的。 均值 μ j 1 m ∑ i 0 m − 1 x ⃗ j ( i ) , j 0 , 1 , . . . , n . \mu_j \frac{1}{m} \sum_{i0}^{m-1}\vec{x}^{(i)}_j , \; j0,1,...,n. μjm1∑i0m−1x j(i),j0,1,...,n. 方差 σ j 2 1 m ∑ i 0 m − 1 ( x ⃗ j ( i ) − μ j ) 2 , j 0 , 1 , . . . , n . \sigma^2_j \frac{1}{m} \sum_{i0}^{m-1} (\vec{x}^{(i)}_j-\mu_j)^2, \; j0,1,...,n. σj2m1∑i0m−1(x j(i)−μj)2,j0,1,...,n. 标准差 σ j σ j 2 , j 0 , 1 , . . . , n . \sigma_j \sqrt{\sigma^2_j}, \; j0,1,...,n. σjσj2 ,j0,1,...,n. 图1-2-5 Z-score归一化的效果 上面三个图的横纵坐标分别为两个特征房屋面积、房屋年龄。可以看到特征缩放后样本散点图分布的更加均匀。 下面两个图的横纵坐标同样是两个特征房屋面积、卧室数量。可以看到特征缩放后等高线图趋近圆形。 图片来自C1_W2_Lab03_Feature_Scaling_and_Learning_Rate_Soln 最后要说明一点特征缩放后只要所有特征值的范围在一个数量级就都可以接受但若数量级明显不对等就需要 重新缩放。
2.2 判断梯度下降是否收敛 本节主要介绍 横坐标为迭代次数 的“学习曲线(learning carve)”。学习曲线可以帮助我们判断梯度下降法 是否正在收敛或者判断梯度下降法 是否已经收敛。如下图给出了正常的学习曲线 图1-2-6 正常收敛的学习曲线示意图 正常情况每次迭代后代价函数都应该下降。直到某次迭代后代价函数几乎不再下降就认为是收敛。算法没有收敛若某次迭代后代价函数变大则算法没有收敛可能意味着学习率 α \alpha α过大。算法已经收敛上图中的红色段可以看到代价函数几乎不再下降。 自动收敛测试(automatic convergence test)若两次迭代之间代价函数的减少值 ≤ ϵ 1 0 − 3 \le \epsilon10^{-3} ≤ϵ10−3(自定义)即可认为收敛。但是通常 ϵ \epsilon ϵ的选取很困难所以还是建议使用上图所示的学习曲线进行判断。 注意不同的算法或问题其收敛的迭代次数都不同有些问题可能几十次就收敛有些问题可能需要上万次才能收敛。由于很难提前知道梯度下降法是否会收敛所以可以根据这个学习曲线来进行判断。
2.3 如何设置学习率 之前提到学习率太小收敛太慢学习率太大可能不会收敛。那如何选择合适的学习率呢正确的做法是迭代较小的次数快速地、粗略地选出合适的学习率。具体的选择策略是从一个较小的学习率(如0.01)开始逐渐增大直到出现不收敛的情况。如下图所示 图1-2-7 逐步增加学习率 代价函数起伏不定代码逻辑有bug(比如迭代方向写反)或者学习率太大。验证代码逻辑正常当学习率很小时代价函数会不断减小即使很慢。 3. 特征工程 “特征工程”这个标题听起来怪怪的其实就是如何挑选、组合、使用“特征”的一套方法论。特征工程(Feature engineering)使用先验知识或直觉来转换或组合原始特征从而设计出新的特征进而简化算法或者使预测结果更准确。 关于Python仿真scikit-learn是一个非常广泛使用的开源机器学习库但是老师希望能理解线性回归的原理而不是盲目地调用scikit-learn的函数。 3.1 选择合适的特征 最简单的特征工程就是“选择合适的特征”。比如下图中原始特征应该为房子所在地块的长度(frontage)和宽度(depth)但占地面积(frontage × depth)应该是更符合直观的特征于是就利用两个原始特征创造出了新的特征。 图1-2-8 创造新的特征 3.2 多项式回归 另一种特征工程就是对某个特征进行幂次进而实现使用非直线来拟合数据也就是“多项式回归(Polynomial Regression)”。比如给出下图中红叉所示的训练样本显然用直线拟合并不符合直观于是 二次函数拟合虽然前半段看起来很好但是终归会下降这不符合“面积越大房子越贵”的常识。三次函数拟合符合直觉但后面房价随面积快速上升。开根号拟合符合直觉房价随着面积缓慢上升。 注幂次越高特征缩放就显得越重要否则参数的为微小变化将引起代价函数的剧烈波动很可能会导致算法无法收敛。 图1-2-9 多项式拟合——二次拟合、三次拟合、开根号拟合 在Course2中将介绍如何挑选不同的特征现在只是明确用户可以挑选特征并且使用“特征工程”和“多项式函数”可以拟合出曲线来更加贴合样本。 Which of the following is a valid step used during feature scaling? × Add the mean (average) from each value and and then divide by the (max - min). √ Subtract the mean (average) from each value and then divide by the (max - min). Suppose a friend ran gradient descent three separate times with three choices of the learning rate α \alpha α and plotted the learning curves for each (cost J J J for each iteration). For which case, A or B, was the learning rate a likely too large? √ case B only. × Both Cases A and B. × case A only. × Neither Case A nor B. Of the circumstances below, for which one is feature scaling particularly helpful? × Feature scaling is helpful when all the features in the original data (before scaling is applied) range from 0 to 1. √ Feature scaling is helpful when one feature is much larger (or smaller) than another feature. 注本题想表达的意思是原始特征值范围都在0~1附近时就没必要进行特征缩放了。 You are helping a grocery store predict its revenue, and have data on its items sold per week, and price per item. What could be a useful engineered feature? √ For each product, calculate the number of items sold times(乘) price per item. × For each product, calculate the number of items sold divided(除) by the price per item. 注C1_W2_Linear_Regression包含单变量线性回归、多线线性回归的练习题值得一做。