多维特征
在线性回归的初级版本中,只有一个特征x(房子的大小),可以预测y(房子的价格),所以该模型是fw,b(x)=wx+b
现在不仅考虑这一个特征,还知道其他特征,比如卧室数量、楼层数量以及房子年代来预测房子的价格
使用x1 x2 x3 x4来表示这4个特征
xj用来表示特征列表,这里的j是1-4,因为有4个特征,
n表示特征的总数,这里n=4
x(i)表示第i个训练样本,这里x(i)是由一个4个数字组成的列表(包含第i个训练样本所有特征的向量),比如x(2)是第二个训练样本的特征向量,即[1416,3,2,40]
要引用第i个训练样本中的某个特征,使用x(i)j表示,比如x(2)3表示的是第三列第二行的特征即2
在x上加箭头表示是个矢量,是个有很多数字的向量
以前的模型,x是个单一的特征,所以只有一个数字
现在具有了多个特征,所以模型变为了fw,b(x)=w1x1 +w2x2 +w3x3 +w4x4+b
如何理解这些参数?
可以把b=80想象成一所房子的基本价格,起价是8万美元,假设她没有面积,没有卧室,没有层数,没有房龄,可以把0.1理解为每增加一平方英尺,价格增加0.1千美元,即100美元,每增加一间浴室,价格增加4千美元,每增加一个楼层,价格增加10千美元,房龄每加一年,价格减少2千美元
w上带箭头,表示向量,也可以不画,将其矢量化使其表达更为简单
w和b两个向量之间点积运算,就是w1x1 +w2x2 +w3x3 +……+wnxn
下面的表达式和上面的表达式是一样的,点积表示法可以让我们用更少的字符,更紧凑的表示模型
这种具有多个输入特征的线性回归称为多元线性回归,这与只有一个特征变量的回归形成对比,将这个模型称为多元线性回归
向量化
在学习一个算法时,矢量化可以减少代码,运行高效,写向量化代码时,会用到现代数值线性代数函数库,也会用到GPU(图形处理单元)
参数w和b,w是个有三个数字的向量,所以n=3
特征x的向量,也是三个数字
在线性代数中,索引从1开始,所以第一个下标就是w1和x1,在python中的可以使用numpy库去定义数组,在python中,数组计数时,数组的索引从0开始,可以使用w[0]去访问第一个元素,使用x[0]去访问x数组中的第一个元素,并没有使用向量化,而是循环
但是右下角使用向量化,可以用一行代码实现,np.dot(w,x)实现了向量w和x之间的点积,这是numpy中的dot函数,是两个向量点乘运算的向量化实现,特别是当n很大的时候,它的代码比前两个运行的快
优点:减少了代码量, 运行速度快的多,原因是numpy dot能够调用计算机中的并行硬件
总而言之:向量化可以简化代码,方便阅读,加快运行速度
使用for循环,一次执行一次代码,从t0到t15,而使用向量化,由于numpy中的dot函数通过计算机硬件实现向量化,所以计算机可以在t0时得到向量w和x的所有值,并且同时将w和x相乘,然后在t1,计算机调用专门的硬件去计算这16个数字的和,而不需要一个接一个的做加法运算了,在大型数据集上使用向量可以更快的更高效的运行算法
向量化是如何帮助实现多元线性回归的
比如你要计算这16个权重w的导数,可以将w和d的值用两个np.array()中储存起来,d存导数的值,这个例子忽略b,如果没用向量化是左边的式子
如果使用向量化,计算机硬件从向量w中取出16个所有值,并行的做减法,减去0.1乘向量d中所有的16个值,同时将计算结果赋值给w
用于多元线性回归的梯度下降法
式子左边的w都可以用右边的向量w进行代替
对于多元线性回归,j的取值范围是1-n,所以要更新参数w1~wn
梯度下降法是个好方法,用于最小化代价函数J来找到w和b,
正规方程法:只能用于线性回归求解w和b,它被证明用高级线性代数库来求解w和b,并且无需任何迭代
缺点是无法推广到其他学习算法,如果样本特征数量太大,执行的会很缓慢,只是一些机器学习库可能会用到这种复杂的方法,在后台求解w和b