吴恩达《机器学习》多变量线性回归笔记

今天公式不是很多,还是用电子的吧,就不拍照了,最后在附上python代码。内容要点有:

  • 基本模型(Hypothesis)
  • 特征缩放(Feature Scaling)
  • α参数的评价和选择(Estimating)
  • 正规方程(Normal Equation)
  • Python代码
基本模型

  h Θ ( x ) = Θ T X , θ 是 n + 1 维 的 向 量 \ h_\Theta(x) = \Theta^TX, θ是n+1维的向量  hΘ(x)=ΘTXθn+1
对于参数下降,任然采用梯度下降的方法。为了统一 θ_0 和 θ_j(j>=1)时偏导数的差别,加上一个X_0 = 1,则迭代方程为:
  Θ j : = Θ j − α ∗ 1 m ∑ i = 1 m ( h Θ ( x i ) − y i ) x i \ \Theta_j := \Theta_j - \alpha*\frac{1}{m}\sum_{i=1}^{m}(h_\Theta(x^i) - y^i)x^i  Θj:=Θjαm1i=1m(hΘ(xi)yi)xi

特征缩放

使数据大概在-1到1这个区间范围,否则梯度下降的时候,影响效率,甚至难以收敛。常见的方法有均值归一化(Mean Normalization):
X := (X-u)/(Maximum - Minimum)
当然你也没必要太纠结于精确度,只要特征数据都在一个数量级就好。

对α的评估

记录每次迭代后cost的值,然后画出散点图,若不是下降的,证明α值太大了,需要小一点。在视频中,吴恩达老师采用的方法是三倍三倍的调整α的值。

正规方程

最后讲一下正规方程吧,多项式的就不谈了,这里也只是简单提了一下,之后的学习中应该会详细讲吧。
正规方程的原理就是J(θ)函数对各个θ_i求偏微分=0得到的,应该没理解错吧。
最后推导出一个求θ向量的矩阵方程:
  Θ = ( X T X ) − 1 X T y \ \Theta = (X^TX)^{-1}X^Ty  Θ=(XTX)1XTy
最后比较了一下两种方法的优劣,简单来说,梯度下降的方法需要选择合适的α、需要不断迭代,但无论n的值有多大,即数据规模无论多大,梯度下降都有比较好的效率。而正规方程正好相反,虽然不需要选择α,但一旦数据规模过大(可能10的5次方的量级以上时),它的时间复杂度是O(n^3),就难以忍受它的效率了。
而对于这个方程,还有一个小知识点要补充,就是求逆矩阵,众所周知,求逆矩阵是有条件的,当数据有冗余,也就是矩阵行列式=0吧;或者样本量太小,小于特征量个数,都无法求逆。但在编程语言中有一个pinv()函数用于求伪逆矩阵,具体数学原理也没讲,估计挺复杂的吧,笑。

Python方程
  • cost函数
  • gradient decent函数
  • 正规方程
#计算cost值,返回的是一个数,所以用了sum,否则会返回一个(1,1)的矩阵
def computeCost(X, y, theta):
    h_x = X.dot(theta.T)
    return np.sum((h_x - y).T.dot(h_x - y)/(2*len(y)))
#梯度下降函数 
def gradientDescent(X, y, theta, alpha, iters):
    temp = np.matrix(np.zeros(theta.shape))
    parameters = int(theta.ravel().shape[0])
    cost = np.zeros(iters)
    
    for i in range(iters):
        error = (X*theta.T) - y
        for j in range(parameters):
            term = (alpha/len(y))*np.sum(np.multiply(error,X[:,j]))
            temp[0,j] = theta[0,j] - term
            
        theta = temp
        cost[i] = computeCost(X, y, theta)
    return theta, cost
#数据归一化操作
data = (data - data.mean()) / data.std()
#正规方程
def normalEqn(X, y):
    theta = np.linalg.pinv(X.T.dot(X)).dot(X.T).dot(y)
    return theta
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值