机器学习--线性回归

机器学习–线性回归

如有错误或者疑问,欢迎交流,转载请注明出处


线性回归定义

h(x)=i=1nθixi=θTx

上式中n是特征维度,目标是使损失函数 J最小,其中m是训练样本数目
J(θ)=i=1m12m(h(x(i))y(i))2

梯度下降

J(θ)θj==1mi=1m(h(x(i))y(i))h(x(i))θj1mi=1m(h(x(i))y(i))x(i)j

  • batch gradient descent
    对每个j:
    θj:=θjα1mmi=1(h(x(i))y(i))x(i)j
def batch_gradient_descent(X, y, theta, alpha, num_iters):
    '''
    X: (m,n) ndarray, m是训练样本数目,n是特征维度
    y: (m,) ndarray
    '''
    m = y.size
    J_history = np.zeros(num_iters)
    for i in range(num_iters):
        predictions = np.dot(X,theta)
        updates = X.T.dot(predictions - y)
        theta = theta  - alpha * (1.0/m) * updates
        J_history[i] = compute_cost(X,y,theta)
    retrun theta, J_history
  • stochastic gradient descent
    训练样本过多时,训练一轮的代价比较大,一个一个样本来,一批一批的来叫mini_batch~~
    for i=1:m{
      for j = 1:n{
         θj:=θjα(h(x(i))y(i))x(i)j }
    }
def stochastic_gradient_descent(X, y, theta, alpha, num_iters):
    '''
    X: (m,n) ndarray, m是训练样本数目,n是特征维度
    y: (m,) ndarray
    '''
    m = y.size
    J_history = np.zeros(num_iters)

    for i in range(num_iters):
        predictions = np.dot(X,theta)
        for j in range(m):
            updates = X[j,:]*(predictions[j] - y[i])
            theta = theta - alpha*updates
        J_history[i] = compute_cost(X, y, theta)

    return theta, J_history

最小二乘法

将损失函数写成矩阵形式

12(Xθy)T(Xθy)==12i=1m(h(x(i))y(i))2J(θ)

θ 求导得 θJ(θ)=XTXθXTy ,极值处导数为0得

θ=(XTX)1Xy

最小化 J(θ) θ 由闭式解(closed form)一步求得

def normal_eqn(X,y):
    theta = np.zeros((X.shape[1], 1))
    X_temp = np.mat(X.T.dot(X))#转成mat矩阵,后面才能求逆
    X_pinv = np.array(X_temp.I)
    theta = (X_pinv.dot(X.T)).dot(y)
    return theta
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值