老饼讲解:一步一步上手学习
虽然是机器学习进阶,但我们不免还是从线性回归这个老朋友开始!线性回归模型可以说是最简单的模型,那这节就让我们继续来看看线性回归模型吧!
线性回归模型简单地假设各个x变量与y是线性关系,也就是:
所以呢,在二维的时候,线性回归模型的意思就是,用一条直线去拟合样本点:

接下来,只需要令样本的拟合误差MSE最小化,求出其中的就可以了:
其中,和分别代表第样本的预测值和真实值
有的同学问,怎么求得令MSE最小的w,b?其实使用最小二乘法就可以了。
一般来说,把线性回归模型表示为矩阵形式:
根据最小二乘法的求解公式,可得到W为:
事实上,我们也不真的自己去用公式来求解,都是在python中使用sklearn包求解就可以了。
在构建好线性回归模型之后,可以使用R方来评估模型的拟合优度。
R方有两种表述,第一种R方的表述为:
第二种R方的表述为:
我们先来看看SST、SSR、SSE分别是什么,如下:
SST(Sum Squares Total)是的方差总和:。
SSR(Sum Squares Regression)是回归值的方差总和,。
SSE(Sum Squares Errors)是误差的方差总和:。
它们三者的关系为:。
直接从三者的表达式,是推导不出的,需要结合和的关系,才能得到这关系。
因此,SST一般认为是的总方差,而SSR是回归模型解释的方差,SSE是未被解释的方差。
所以,就是回归模型所解释的方差占比,它在[0,1]之间,越接近1,说明模型的拟合效果越好。
好了,下面我们拉一个例子来看看线性回归模型怎么使用。
假设我们采集的x、y数据如下:

事实上,上面的数据是我用 生成的,接下来我们就可以构建一个线性回归模型,看看模型是不是能找出和的关系。在python中,只需要使用sklearn的linear_model.LinearRegression()函数就可以构建一个线性回归模型了,下面我们直接展示代码:
"""
本代码用于展示如何使用sklearn实现线性回归
本代码来自:《老饼讲解-机器学习》 www.bbblearn.com
"""
from sklearn import linear_model
import numpy as np
x = np.array([[0, 2], [1, 1], [2,3],[3,2],[4,5],[5,2]]) # 用于训练的x
y = np.array([8,7,15,14,25,18]) # 用于训练的y
reg = linear_model.LinearRegression() # 调用sklearn的线性模型包,训练数据
reg.fit(x,y) # 训练模型
print("模型参数:"+str(reg.coef_)) # 打印模型权重
print("模型阈值:"+str(reg.intercept_)) # 打印模型阈值好了,运行代码,得到如下的结果:

将参数代入模型表达式,即可得到的关系如下:
可以看到,模型已经找出了我们的真实关系,哈哈哈!
好了,以上就是线性回归模型了,线性回归模型最大的好处就是足够简单,但需要注意的是,输入变量和输出变量需要是线性关系,如果不是线性关系,那就不适用了,可能要想点办法来将它们转换为线性关系。
评论