基本的数学知识:线性回归、最小二乘法
维基百科之中将线性回归解释如下:在统计学中,线性回归(英语:linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归(multivariate linear regression)。
在线性回归中,数据使用线性预测函数来建模,并且未知的模型参数也是通过数据来估计。这些模型被叫做线性模型。最常用的线性回归建模是给定X值的y的条件均值是X的仿射函数。不太一般的情况,线性回归模型可以是一个中位数或一些其他的给定X的条件下y的条件分布的分位数作为X的线性函数表示。像所有形式的回归分析一样,线性回归也把焦点放在给定X值的y的条件概率分布,而不是X和y的联合概率分布(多元分析领域)。
线性回归是回归分析中第一种经过严格研究并在实际应用中广泛使用的类型。这是因为线性依赖于其未知参数的模型比非线性依赖于其未知参数的模型更容易拟合,而且产生的估计的统计特性也更容易确定。
线性回归有很多实际用途,分为以下两大类:
- 如果目标是预测或者映射,线性回归可以用来对观测数据集的和X的值拟合出一个预测模型。当完成这样一个模型以后,对于一个新增的X值,在没有给定与它相配对的y的情况下,可以用这个拟合过的模型预测出一个y值。
- 给定一个变量y和一些变量X1, X2, X3, ,Xn,这些变量有可能与y相关,线性回归分析可以用来量化y与Xj之间相关性的强度,评估出与y不相关的 Xj 并识别出哪些 Xj 的子集包含了关于y的冗余信息。
线性回归模型经常用最小二乘逼近来拟合,但他们也可能用别的方法来拟合,比如用最小化“拟合缺陷”在一些其他规范里(比如最小绝对误差回归),或者在桥回归中最小化最小二乘损失函数的惩罚。相反,最小二乘逼近可以用来拟合那些非线性的模型。因此,尽管“最小二乘法”和“线性模型”是紧密相连的,但他们是不能划等号的。
对于上面介绍到的最小二乘法,我们来简单的介绍(来源:维基百科):最小二乘法(英语:least squares method),又称最小平方法,是一种数学优化方法。它通过最小化误差的平方和寻找数据的最佳函数匹配。
利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
“最小二乘法”是对超定方程组,即其中存在比未知数更多的方程组,以回归分析求得近似解的标准方法。在这整个解决方案中,最小二乘法演算为每一方程式的结果中,将残差平方和的总和最小化。
最重要的应用是在曲线拟合上。最小平方所涵义的最佳拟合,即残差(残差为:观测值与模型提供的拟合值之间的差距)平方总和的最小化。当问题在自变量(x变量)有重大不确定性时,那么使用简易回归和最小二乘法会发生问题;在这种情况下,须另外考虑变量-误差-拟合模型所需的方法,而不是最小二乘法。
最小平方问题分为两种:线性或普通的最小二乘法,和非线性的最小二乘法,取决于在所有未知数中的残差是否为线性。线性的最小平方问题发生在统计回归分析中;它有一个封闭形式的解决方案。非线性的问题通常经由迭代细致化来解决;在每次迭代中,系统由线性近似,因此在这两种情况下核心演算是相同的。
最小二乘法所得出的多项式,即以拟合曲线的函数来描述自变量与预计应变量的变异数关系。
当观测值来自指数族且满足轻度条件时,最小平方估计和最大似然估计是相同的。最小二乘法也能从动差法得出。
对于最小二乘法,我们给出一个示例:如果读者拥有初等数学的基础,看懂这个问题应该不是难事。
示例:我们现在由有四个数据点 (x,y):(1,6), (2,5),(3,7),(4,10),我们希望找出一条和这四个点最匹配的直线y = kx + b(k为斜率,b为截距)。
解:由题意我们可以得到下列四个式子:k + b = 6、2k + b = 5、3k + b = 7、4k + b = 10利用最小二乘法的规则:尽量使得等号两边的方差最小,也就是找出下面这个函数的最小值。S = [6 - (k + b)] ^ 2 + [5 - (2k + b)] ^ 2 + [7 - (3k + b)] ^ 2 + [10 - (4k + b)] ^ 2,最小值我们可以通过对 k 和 b 求偏导数并且令偏导数为零,我们可以得到如下图所示的公式:
我们通过对图中方程组的求解可以得出:b = 3.5,,k = 1.4,因此我们就得到了最佳的匹配直线方程为:y = 1.4x + 3.56。
下面我们就开始线性回归的基本知识介绍:
1.假设函数/预测函数:
2.我们的目的就是:
3.那么怎么寻找呢或者说我们怎么确定?我们定义成本函数/损失函数:这个函数计算的就是我们实际的值与用预测函数计算的值之间的均方误差,公式如下:
这个公式线性回归的成本函数,它的含义为:根据预测函数算出来的预测值与该点对应的实际值的差值的平方求和再求平均。我们的目标也就是使他的值最小。那对于我们朴素的想法来讲,我们可以一个一个尝试两个变量(θ0, θ1)的值,并将给定数据集的数据进行带入,然后找出最下小的值所对应的参数,那么这个参数就是我们所要的,这样,我们就完成了预测函数的确定。(请大家注意:我们这里的变量只有两个,因此画出来的曲线应该是一个二元函数。我们也许可以看出他的最小值,但是当我们的自变量增加到三个甚至更多的时候,我们在采用尝试的方法得到的结果就会不准)。那么怎么解决这个问题呢?梯度下降算法就诞生了
简单的解释一下梯度下降算法(寻找最优解的算法):**我们每进行一次改变的时候我们就寻找使方差最小的 θ0 和 θ1 (也就是拟合程度最高的曲线)。**下面的介绍来自百度百科:顾名思义,梯度下降法的计算过程就是沿梯度下降的方向求解极小值(也可以沿梯度上升方向求解极大值)。
下面我们用python代码来进行上述行为的实现:我们的数据集为(1,4)(2,5)(3,10)(4,8),我们想寻找直线 y = θ0 + θ1x 中的与这四个点拟合程度最高的那条线的 θ0 和 θ1。
import matplotlib.pyplot as plt
import numpy as np
#基本的数据集
x = np.array([1, 2, 3, 4])
y = np.array([4, 5, 10, 8])
#建模
from sklearn.linear_model import LinearRegression
model = LinearRegression() #创建线性回归模型
#训练(要求格式输入为一行一个数据)
x = x.reshape(-1, 1) #进行格式变换
y = y.reshape(-1, 1) #-1表示基于另一个确定值比如这里的1进行维度计算,可以得到一个n维1列的数据集
model.fit(x, y) #用来训练模型的算法(梯度下降算法在这一步就会自动实现)
train_score = model.score(x, y) #计算得分(可以理解为模型再数据集上的准确率)
plt.scatter(x, y)
plt.plot(x, model.predict(x), 'r-') #画线
plt.show() #显示图形
print(train_score) #打印的得分(没有换算成百分制)
由上面的代码我们可以得到下面的这样一条红色的线,那么他对应的就是最佳拟合的直线,并且他的得分输出为0.6351…(也就是63.5%)
0.6351648351648351
Process finished with exit code 0