手推线性模型及最小二乘法(房价预测实例)

手推线性模型及最小二乘法(房价预测实例)

线性模型及最小二乘法推导

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

房价预测实例

  1. 生成数据
    #生成数据
    import numpy as np
    #生成随机数
    np.random.seed(1234)
    x = np.random.rand(500,3)
    #构建映射关系,模拟真实的数据待预测值,映射关系为y = 4.2 + 5.7*x1 + 10.8*x2,可自行设置值进行尝试
    y = x.dot(np.array([4.2,5.7,10.8]))
    
  2. 线性模型的训练
    import numpy as np
    from sklearn.linear_model import LinearRegression
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    #调用模型
    lr = LinearRegression(fit_intercept=True)
    #训练模型
    lr.fit(x,y)
    print("估计的参数值为:%s" %(lr.coef_))
    #计算R平方
    print('R2:%s' %(lr.score(x,y)))
    #任意设定变量,预测目标值
    x_test = np.array([2,4,5]).reshape(1,-1)
    y_hat = lr.predict(x_test)
    print("预测值为: %s" %(y_hat))
    
  3. 最小二乘法实现
   class LR_LS():
   def __init__(self):
       self.w = None      
   def fit(self, X, y):
       # 最小二乘法矩阵求解
   	 	Xt = X.transpose();#转置变成列向量
   	    XXt=X.dot(Xt);#矩阵乘
   	    XXtInv = np.linalg.inv(XXt)#求逆
   	    XXtInvX = XXtInv.dot(X)
   	    coef = XXtInvX.dot(y.T)
   	    
   	    y_est = Xt.dot(coef)
   	    
   	    return y_est,coef
       self.w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
      		
   	    #要拟合的函数
   	   
   	   
   		
   def predict(self, X):
       # 用已经拟合的参数值预测新自变量
        return np.power(x,5)
   	    return np.sin(x) 
   	 	return 5*x+3
   		return np.sqrt(25-pow(x-5,2))
        y_pred = X.dot(self.w)
       
       return y_pred

   if __name__ == "__main__":
       lr_ls = LR_LS()
       lr_ls.fit(x,y)
       print("估计的参数值:%s" %(lr_ls.w))
       x_test = np.array([2,4,5]).reshape(1,-1)
       print("预测值为: %s" %(lr_ls.predict(x_test)))

估计的参数值为:[ 4.20000001 5.70000003 10.79999997]
预测值为:[85.19999995]

Reference

  1. https://github.com/datawhalechina/teamlearning/blob/master/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AE%97%E6%B3%95%E5%9F%BA%E7%A1%80/Task1%20Linear_regression.ipynb
  2. 李航《统计学习方法》
  3. https://www.bilibili.com/video/BV1aE411o7qd?p=12
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值