线性回归之标准方程法

目录

引入

梯度下降法VS标准方程法

标准方程法代码实现


引入

 假设引入一个买房子的问题,如下表,记录了房子大小,卧室数,客厅数,拥有几年了以及价格

 我们将这些数据转换成矩阵形式,如下:

转换成矩阵形式后,也可以将我们之前的方程转成矩阵形式如下,我们可以看到只需要求解出w即可。 

 

从第一张图,我们可以看到需要求最小的值,根据数学知识我们可以直到可以对函数进行求导来求最小的值。矩阵求导,我们需要引入一些概念以及求导公式(公式可以在网页中搜索):

分子布局:分子为列向量或者分母为行向量

分母布局:分子为行向量或者分母为列向量

求导过程如下:

使求导的结果等于0,结果如下:

 

在上边求出来的w中,(X.TX)^-1为X.TX的逆矩阵,这个在计算的时候要保证X.TX的行列式不为0,若为0则没有逆矩阵,不能使用此方法来计算。

梯度下降法VS标准方程法

梯度下降法标准方程法
缺点需要选择合适的学习率需要计算(X.TX)^-1
需要迭代很多个周期时间复杂度大约是O(n^3)
只能得到最优解的近似值n是特征值数量
优点当特征值非常多的时候也可以很好的工作不需要学习率
不需要迭代
可以得到全局最优解

标准方程法代码实现

  • 需要用到的库导入
import numpy as np
from numpy import genfromtxt
import matplotlib.pyplot as plt
%matplotlib inline
  • 将数据导入
data = np.genfromtxt('data.csv',delimiter = ',')
plt.scatter(x_data,y_data)
plt.show()
  •  将数据进行处理,添加偏执
x_data = data[:,0,np.newaxis]
y_data = data[:,1,np.newaxis]
#添加偏置
X_data = np.concatenate((np.ones((100,1)),x_data),axis = 1) #concatenate 组合  axis = 1表示对应行的数组进行拼接
print((X_data).shape)
  •  标准方程法求解线性回归
#标准方程法求解线性回归
def Stand_equation(Xarr,Yarr):
    #转换成矩阵的形式
    Xmat = np.mat(Xarr)
    Ymat = np.mat(Yarr)
    xtx = Xmat.T * Xmat
    if np.linalg.det(xtx) == 0.0:  #我们所求的矩阵的行列式不能等于0
        print("no eigenvalues")
        return 
    sw = xtx.I*Xmat.T*Ymat
    return sw
  • 调用我们写的函数
w = Stand_equation(X_data,y_data)
  • 这样就已经实现完了,接下来,我们画图来实际看看效果
#画图
x_test = np.array([[20],[80]])
y_test = w[0] + x_test*w[1]
plt.plot(x_data,y_data,'b.')
plt.plot(x_test,y_test,'r')
plt.show()
  • 结果显示

以上就是我们用不同于梯度下降法实现的线性回归!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值