回归的概念
回归就是根据输入的数据写出一个目标值的公式,这个公式可以较好对输入的数据进行拟合,这个公式叫做回归方程,而公式中的涉及到的系数成为回归系数,求解这些系数的过程称为回归。简单来讲就是通过曲线对数据进行拟合。
Example
y = a*x1 + b*x2 + c*x3 + d
始终公式就是一个回归方程,其中a,b,c,d为回归系数,根据输入的数据x1,x2,x3 求解上述回归系数。
求解过程中主要是要根据上述回归方程的输出值(预测值)和数据的真实值作比较,通过减少两者的误差来求解回归方程的系数。
原理及过程
求出一个回归方程本质上就是求解这个回归方程的系数,这些系数确定了,回归方程也就确定了,所以所有的工作将在求解和优化这些回归系数上,条件只允许我们通过输入的数据集来获得这些系数。为了确定回归方程及计算回归系数,常有的方法是最小化回归方程的输出值(预测值)和输入数据对应的真实值之间的误差,常用于计算预测值和真实值之间的误差的方式是平方误差:
用矩阵表示可以写成右边的形式:,对w求导数
得到,令其等于零,求得系数w,
当求出w的之后,就可以用其对新的数据进行预测分析
Code
def simpleRegression(X,Y):
xMat=mat(X)
yMat = mat(Y).T
xTx = xMat.T*xMat
if(np.linalg.det(xTx) == 0.0):
print "输入数据构成的矩阵XMat不可逆"
return
w = xTx.I * (xMat.T*yMat)
return w
基于scikit-learn实现简单的线性回归
import matplotlib.pyplot as plt
from sklearn import linear_model,datasets
import numpy as np
trainData=diabetes_x[:-20]
testData= diabetes_x[-20:]
trainLabels= diabetes.target[:-20]
testLabels= diabetes.target[-20:]
#通过模块linear_model中的LinearRegressiong
#构造函数初始化一个新的模型
lrModel = linear_model.LinearRegression()
#调用fit()函数,在输入数据上训练模型
lrModel.fit(trainData,trainLabels)
#获取模型训练后的得到的回归系数weights
weights = lrModel.coef_
print "coefficients--weights: " , lrModel.coef_
#利用上述回归系数进行预测
predict= lrModel.predict(testData)
#输出预测值与真实值得平方差
print np.mean((predict-testLabels)**2)
print lrModel.score(testData,testLabels)