第二部分:线性回归

第一部分:多变量线性回归

1.多特征

例:房子价格决定于,房间个数、房间尺寸、位置等

符号:

n=特征数量

x^{^{i}}=第i个训练实例,也即特征矩阵的第i行

x^{_{j}^{i}}=特征矩阵的第i行第j个特征,也即第i个训练实例的第j个特征

支持多变量的假设 ℎ 表示为:h(\theta )=\theta _{0}x_{0}+\theta _{1}x_{1}+\theta _{2}x_{2}+...\theta _{n}x_{n} (and {x_{0}}=1)

此时,模型参数是n+1维的向量,任何一个训练实例也都是n+1维的向量,因此特征矩阵X的维度是m*(n+1),基于矩阵运算,公式可简化为h_{\theta }(x)=\theta ^{T }X

2.多变量梯度下降

期望:h(\theta )=\theta ^{T }X=\theta _{0}x_{0}+\theta _{1}x_{1}+\theta _{2}x_{2}+...\theta _{n}x_{n} (and {x_{0}}=1)

参数:\theta

代价函数:J(\theta_{0},\theta_{1},\theta_{2}...\theta_{n} )=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{i})-y^{i})^{2}

 目标:找到使得J(\theta)最小的参数矩阵\theta

梯度下降:

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之间,如右边的图形所示每此时梯度下降就会比较快。

此外还可以使用均值归一化:x_i=\tfrac{x_n-\mu _n}{s_n},其中。\mu _n是平均值,s_n是标准差。

4.梯度下降的实践2——学习率(learning rate)

梯度下降:\theta_j=\theta_j=\alpha \tfrac{\partial }{\partial \theta_j}J(\theta)

如图:如果学习率太大,会不收敛,如果学习率太小则下降慢

问题:如何选择学习率\alpha使得梯度下降高效且趋于收敛

解决方案:绘制代价函数与迭代次数的图表来观察,通常将代价函数变化值与某个阈值进行比较,选出合适的学习率

 

 一般情况下,以下几个学习率可供考虑:0.01,0.03,0.1,0.3,1,3,10

5.特征和多项式回归

我们在建立模型的时候并不是所有的数据都适合使用,有些数据本身可以进行修改。

对于某些数据可以简化:比如房子的临街的宽度与纵向深度可以转化为一个值就是房子的面积

另外我们还可以用

6.正规方程

假设:J(\theta)=\alpha\theta^2+b\theta+c

问题:求\tfrac{\partial }{\partial\theta_j}J(\theta_j)=0也即求解使得代价函数最小的\theta

解决方案:假设训练特征矩阵为X(包含x0=1),训练结果为y,利用正规方程解出来的向量:\theta=(X^TX)^{-1}X^Ty  ,注:对于不可逆矩阵,正规方程得方法不可用

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值