这周的内容是对多元线性回归模型的学习,感觉还可以,就是不知道代码实现起来会不会比较难。不过这几天的学习,别的不说,头发是噌噌噌地掉,进入正题。
先介绍符号
:表示第i个对象的第j个特征值。
思路和一元线性回归模型一样,就是一些细节处理有点变化。
模型:
将参数进行矢量化: ,b作为一个单独的参数
所以模型变为:
然后是对矢量化的代码实现思路:
# 代码实现一
f = 0
for i in range(0,n):
f = f + w[j]*x[j]
f = f + b
# 代码实现二
f = np.dot(w,x) + b
梯度更新函数可以写为: 这里的
是对那个偏导数的缩写
用于多元线性回归的梯度下降法:
模型:
误差成本函数:
梯度下降公式:
在线性回归中,还有另一种寻找w和b的方式,就是使用正规方程法,该方法只适用于线性回归,其他都不适用,如果特征值太多(>10000),会很慢。具体的老师没讲,等这一周学完,我再回过头来搞一下。(((做个标签)))
然后是特征缩放
特征缩放的原因:有些特征值的范围比较极端,太大了,或者太小了,比如::1000~3000,
:0~5,这时候对应选的w最后也会很极端,那么我们再用梯度下降的时候,找这种极端的,就很容易一不小心跳过去,所以就要做一下缩放
特征缩放的目的:让那极端的范围变为正常,这样的w就不极端了,得到最后结果的速度也会快很多
具体操作:
方法一:除以最大值,用.describe()来查看最大值
方法二:均值归一化: u:平均值
方法三:Z-score标准化: u:平均值
:标准差
特征缩放到最后,最好是能将范围缩到 -1 ~ 1 或者 -3 ~ 3 或者 -0.3 ~ 0.3,超出这几个范围,就缩放吧。
判断梯度下降是否收敛,就是靠绘图,
图像
这种图像,他的代价函数有时候会上涨,有两个可能的问题:1、学习率太大了。2、代码有bug。解决办法:选择较小的学习率
这种图像。他的代价函数直接随迭代次数上涨,还是有两个可能的问题:1、学习率太太太太大了。2、代码有很严重的bug。
解决办法:先选小的,看是不是学习率的问题,再判断是不是代码的问题
学习率:0.001 , 0.01 , 0.1 ,1
最后是特征工程
比如一块房子,你有他的长度特征,宽度特征
,那么你可以自己定义一个面积特征
来代替上述两个特征,这种更有效。
这是特征方程的一个例子,你自己也可以创造出别的特征
变化或结合原有特征,创造新特征。(不得不说,这里让我想到了,主成成分法)