机器学习(一)标准方程与LinearRegression详解

线性回归一值是一个较为简单且常用的算法模型之一,那么实现线性回归一般有一下两个方法,一个是标准方程,一个是直接调用skLearn里的linearegression方法。两者究竟有何异同呢?

目录

1.标准方程

1.1标准方程代码实现

2.sklearn中LinearRegression


 

首先我们先要了解一下这两种方法的实现过程以及相关原理

1.标准方程

衡量线性回归模型好坏的标准我们通常选用RMSE,但是由于它要开根号计算不如MSE简单,所以在这就用Mse来当作损失函数,如下给出的是mse函数表达式

                                                              gif.latex?%5Cfrac%7B1%7D%7Bm%7D%5Csum%5C%28%5CTheta%20%5E%7BT%7Dx%5E%7B%28i%29%7D-y%5E%7Bi%7D%29%5E%7B2%7D

也就是说求解出mse最小值即可得到我们想要的线性回归方程的解,那么如何求解呢?这时候我们就需要利用到标准方程(闭式解方法)

                                                              gif.latex?%5Cwidehat%7B%5CTheta%20%7D%3D%28X%5E%7BT%7DX%29%5E%7B-1%7DX%5E%7BT%7Dy

mse最小值即为θ


1.1标准方程代码实现

好的此时已经把标准方程的大概原理思路捋了一遍,现在可以试着敲代码了。

  • 生成线性数据
import numpy as np
X=2*np.random.rand(100,1)
y=4+3*X+np,.random.randn(100,1)
  • 计算θ
X_b=np.c_[np.ones((100,1)),X]
theta_best=np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
theta_best

就是把上面标准方程的公式复现一遍,这里的theta_best结果为

                              9a1a728d1820411ebc2033869669b0b1.png

 第一个为偏置项,第二个为权重

  • 利用θ做出预测
x_new=np.array([[0],[2]])
x_new_b=np.c_[np.ones((2,1)),x_new]
y_predict=x_new_b.dot(theta_best)

这里预测选用了头和尾然后接下来画个图把头尾连接一下看看效果

  • 画图
  • import matplotlib.pyplot as plt
    x_new=np.array([[0],[2]])
    x_new_b=np.c_[np.ones((2,1)),x_new]
    y_predict=x_new_b.dot(theta_best)
    print(y_predict)
    plt.plot(x_new,y_predict,"r-")#从头至尾定位(两点确定一条线)
    plt.plot(X,y,"b.")#原始分布
    plt.axis([0,2,0,15])
    plt.show()

机器学习(一)标准方程与LinearRegression详解_第1张图片

 

  • 预测
new=np.array([3]) #输入你要的横坐标
x_new=np.c_[np.ones((1,1)),new]
y_pred=x_new.dot(theta_best)
y_pred   #结果array([[13.34049575]])

2.sklearn中LinearRegression

重点在于,这是基于最小二乘法的!那最小二乘法的损失函数是什么呢?

                                             gif.latex?%5Csum%5C%28%5CTheta%20%5E%7BT%7Dx%5E%7B%28i%29%7D-y%5E%7Bi%7D%29%5E%7B2%7D

这个就是最小二乘法的损失函数表达式,那跟上面标准方程差了个1/m,完全不影响变量,也就是说如果标准方程使用的损失函数为mse那么两个方法得到的结果是一样的

下面上代码

from sklearn.linear_model import LinearRegression
lin_reg=LinearRegression()
lin_reg.fit(X,y)
lin_reg.predict(x_new)

 非常的简洁干净

 


3.方法选择

我们在选择方法时候也需要考虑到速度问题,这里呢直接上结论,数据量小时,两个方法都可以选择,如果你希望掌控的更多,那标准方程法还可以更换其他损失函数。数据量大时,sklearn方法计算速度是要优于标准方程的。

 

 

你可能感兴趣的:(线性回归,机器学习,算法)