线性回归与最小二乘法

线性回归模型是使用最广泛的模型之一,也最经典的回归模型,如下所示
x轴表示自变量x的值,y轴表示因变量y的值,图中的蓝色线条就代表它们之间的回归模型,在该模型中,因为只有1个自变量x,所以称之为一元线性回归,公式如下

我们的目的是求解出具体的参数值,可以穿过这些点的直线可以有多条,如何选取呢?此时就需要引入一个评价标准。在最小二乘法中,这个评价标准就会误差平方和,定义如下

其中e表示通过回归方程计算出的拟合值与实际观测值的差,通过维基百科上的例子来看下实际的计算过程

如上图所示,有4个红色的采样点,在每个点都可以得到(x, y)的观测值,将4个采样点的数据,带入回归方程,可以得到如下结果

计算全部点的误差平方和,结果如下

对于上述函数,包含了两个自变量,为了求解其最小值,可以借助偏导数来实现。通过偏导数和函数极值的关系可以知道,在函数的最小值处,偏导数肯定为0,所以可以推导出如下公式

对于上述两个方程构成的方程组,简单利用消元法或者代数法就可以快速求出两个参数的值

实际上,更加通过的方法是通过矩阵运算来求解,这种方法不仅适合一元线性回归,也适合多元线性回归,其本质是利用矩阵来求解以下方程组

计算过程如下

>>> data = np.array([[1, 1], [1, 2], [1, 3], [1, 4]])
>>> data
array([[1, 1],
       [1, 2],
       [1, 3],
       [1, 4]])
>>> target = np.array([6, 5, 7, 10]).reshape(-1, 1)
>>> target
array([[ 6],
       [ 5],
       [ 7],
       [10]])
# 先对data矩阵求逆矩阵
# 再计算两个矩阵的乘积
>>> np.matmul(np.matrix(data).I, target)
matrix([[3.5],
        [1.4]])

通过一个逆矩阵与矩阵乘积操作,就可以方便的求解参数。在scikit-learn中,使用最小二乘法的代码如下

>>> data = np.array([1, 2, 3, 4]).reshape(-1, 1)
>>> data
array([[1],
       [2],
       [3],
       [4]])
>>> target = np.array([6, 5, 7, 10]).reshape(-1, 1)
>>> target
array([[ 6],
       [ 5],
       [ 7],
       [10]])
>>> reg = linear_model.LinearRegression()
>>> reg.fit(data, target)
LinearRegression()
>>> reg.intercept_
array([3.5])
>>> reg.coef_
array([[1.4]])

intercept_表示回归方程的截距,coef_表示回归方程的系数。

最小二乘法的求解过程简单粗暴,但是也存在一定限制,首先,根据方程组能够求解可以知道,样本数目必须大于等于特征的个数;其次,当输入的特征很多,大于10000时,矩阵运算非常的费时。

最小二乘法肯定可以求解出线性方程的解,但是其解只是在线性模型假设的前提下得到的最优解,如果数据不符合线性模型,此时用最小二乘法依然可以得到结果,但是显然是一个非常差的拟合结果,为了更好的评估线性回归拟合效果的好坏,我们还需要一个评估指标R square, 公式如下

这个值也称之为拟合优度,从定义可以看出,其范围在0到1之间,越靠近1,说明拟合效果越好。在scikit-learn中,提供了计算拟合优度的函数,用法如下

>>> from sklearn.metrics import mean_squared_error, r2_score
>>> predict = reg.predict(data)
>>> mean_squared_error(target, predict)
1.0500000000000003
>>> r2_score(target, predict)
0.7

对于线性回归而言,离群值对拟合结果影响很大,在预处理阶段,要注意过滤离群值点;同时,我们会根据回归系数对变量的重要性进行排序,此时要注意各个变量的单位是不一样的,在预处理阶段需要进行归一化。

·end·
(0)

相关推荐

  • Python|线代矩阵问题

    问题描述 Python中含有丰富的库提供我们使用,学习数学分支线性代数时,矩阵问题是核心问题.Numpy库通常用于python中执行数值计算,并且对于矩阵操作做了特殊的优化,numpy库通过向量化避免 ...

  • 什么是异方差?如何处理异方差?

    目录 1 一些例子 2 什么是异方差 3异方差产生的原因 4 异方差后果 5 如何识别异方差 6 补救 1 一些例子 消费函数,收入不同,边际消费倾向如何变化? 企业的投资.销售收入与利润:大型企业的 ...

  • 最小二乘法的多角度理解

    最小二乘法的多角度理解

  • 矩阵相乘

    import numpy as np arr1 = np.array(((1,4),(2,5),(3,2))) arr2 = np.array((3,4)) print('第一个矩阵:\n',arr1 ...

  • 最小二乘法小结

    公众号后台回复"python",立刻领取100本机器学习必备Python电子书 最小二乘法是用来做函数拟合或者求函数极值的方法.在机器学习,尤其是回归模型中,经常可以看到最小二乘法 ...

  • 最小二乘法——线性回归背后的数学,探究其公式的诞生过程

    你可能听说过比萨斜塔的故事.在建造过程中,塔开始逐渐向一边倾斜. 假设吉诺( Gino),其中一位工程师,想预测塔的未来倾斜度.他想知道倾斜度是否会增加,到明年会增加多少.吉诺的唯一信息是下面的表格, ...

  • 如何通俗理解线性回归? | 30天学会医学统计与SPSS公益课(Day16)

    30天打卡学习医学统计与SPSS本课程是高校医学统计学教授的公益.免费公开课!如假包换!我将每天推送视频和文字教程,讲授基于医学数据的各种统计分析策略.如果你能跟得上节奏,我相信在一个月后,您将会掌握 ...

  • (3条消息) 线性回归与岭回归参数向量公式推导

    线性回归是一种常用的机器学习回归算法,其原理是通过输入和输出学习回归函数,确定回归参数向量 w \mathbf{w} w和截距 b b b.对于新的样本 x \mathbf{x} x,其预测值为 y ...

  • (3条消息) 【回故系列】线性回归的矩阵推导

    线性模型(Linear Model),是机器学习中的一类算法的总称,其形式化定义为:通过给定的样本数据集 ,线性模型试图学习到这样的一个模型,使得对于任意的输入特征向量 ,模型的预测输出 能够表示为输 ...

  • Matlab中的偏最小二乘法(PLS)回归模型,离群点检测和变量选择

    原文链接:http://tecdat.cn/?p=22319 本文建立偏最小二乘法(PLS)回归(PLSR)模型,以及预测性能评估.为了建立一个可靠的模型,我们还实现了一些常用的离群点检测和变量选择方 ...

  • 两阶段最小二乘法TSLS案例分析

    两阶段最小二乘回归(2sls回归)是解决内生性问题的常用方法.上文中对两阶段最小二乘法做了基本介绍,本文将通过案例说明具体操作步骤. 1 背景 本案例引入Mincer(1958)关于工资与受教育年限研 ...

  • 一文读懂内生性问题之两阶段最小二乘法TSLS

    TSLS,即两阶段最小二乘回归.是用于解决内生性问题的一种方法,除TSLS外还可使用GMM估计. 内生变量是指与误差项相关的解释变量.对应还有一个术语叫'外生变量',是指与误差项不相关的解释变量. 产 ...

  • 偏最小二乘法路径模型分析plspm

    PLS-PM是一种用于研究多个观测变量的数据分析方法,其中多个观测变量可以汇总为一个潜在变量,并且潜在变量之间存在线性关系.它将主成分分析.典型相关分析和多元回归结合起来迭代估计,是一种因果建模的方法 ...

  • R语言Gibbs抽样的贝叶斯简单线性回归仿真分析

    原文链接:http://tecdat.cn/?p=4612 贝叶斯分析的许多介绍都使用了相对简单的教学实例(例如根据伯努利数据给出成功概率的推理).虽然这可以很好地介绍贝叶斯原理,但是将这些原理扩展到 ...