导语
回归:从一组数据出发,确定某些变量之间的定量关系式;即建立数学模型并估计未知参数。
回归的目的是预测数值型的目标值,它的目标是接受连续数据,寻找最适合数据的方程,并能够对特定值进行预测。这个方程称为回归方程,而求回归方程显然就是求该方程的回归系数,求这些回归系数的过程就是回归。
我们先来看看回归跟分类的区别:(引用 - 走刀口的回答 - 知乎
https://www.zhihu.com/question/21329754/answer/17901883)
分类和回归的区别在于输出变量的类型。
定量输出称为回归,或者说是连续变量预测;
定性输出称为分类,或者说是离散变量预测。
举个例子:
预测明天的气温是多少度,这是一个回归任务;
预测明天是阴、晴还是雨,就是一个分类任务。
普通线性回归
我们做线性回归是为了得到一个最优回归系数向量w使得当我们给定一个x能够通过y=xw预测y的值。假定输入数据存放在矩阵 X 中,而回归系数存在在向量 w 中。那么对于给定的数据X1,预测结果将会通过Y1=XT1w给出。
那么怎样的w才是最优的呢?在标准线性回归中我们需要找到是误差最小的w, 即预测的y值与真实的y值之间的差值,为了避免简单累加造成的正负差值相互抵消,这里采用了平方误差:
平方误差
用矩阵可表示为:(y-Xw)T(y-Xw),)因为要求函数的极小值,对w求导可得:
对w求导
使其等于0,便可求出W的最优解:
求出w
上述求w最优解的方法也叫做最小二乘法。
需要注意的是,上述公式中包含(XTX)-1,也就是需要对矩阵求逆,因此这个方程只有在逆矩阵存在的时候有用,所以我们写代码时必须需要事先确定矩阵是否可逆。
此外,我们知道线性回归的方程的一般形式为:y=wx+b;即存在一定的偏移量b,于是,我们可以将回归系数和特征向量均增加一个维度,将函数的偏移值b也算作回归系数的一部分,占据回归系数向量中的一个维度,比如w=(w1,w2,...,wN,b)。相应地,将每条数据特征向量的第一个维度设置为1.0,即所有特征向量的第一个维度值均为1.0,这样,最后得到的回归函数形式为y=w[0]+w[1]x1+...+w[N]xN.
Python代码实现
# 普通线性回归
def standRegress(xArr, yArr):
# 用mat函数转换为矩阵之后可以才进行一些线性代数的操作
xMat = mat(xArr); yMat = mat(yArr).T
# XtX
xTx = xMat.T * xMat
# 判断矩阵是否可逆
if linalg.det(xTx) == 0:
print("This matrix is singular, cannot do inverse")
return
# 根据公式计算w
w_hat = xTx.I * (xMat.T * yMat)
return w_hat
线性回归拟合
相关系数(Correlation Coefficient)计算:
几乎任意数据集都可以用上述方法建立模型,怎么判断这些模型的好坏呢?为了计算预测值序列和真实值序列的匹配程度,可以计算出这两个序列的相关系数。
计算公式:
相关系数
公式就是用X