回归算法 经典案例 波士顿房价预测

回归是统计学中最有力的工具之一。机器学习监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型、连续性而定义的。回归算法用于连续型分布预测,针对的是数值型的样本,使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签。
回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。那么什么是线性关系和非线性关系?
比如说在房价上,房子的面积和房子的价格有着明显的关系。那么X=房间大小,Y=房价,那么在坐标系中可以看到这些点:
在这里插入图片描述

那么通过一条直线把这个关系描述出来,叫线性关系在这里插入图片描述

那么回归的目的就是建立一个回归方程(函数)用来预测目标值,回归的求解就是求这个回归方程的回归系数。
二、回归算法之一元线性回归
1、回归的定义
回归的定义:回归最简单的定义是,给出一个点集D,用一个函数去拟合这个点集。而且使得点集与拟合函数间的误差最小,假设这个函数曲线是一条直线,那就被称为线性回归,假设曲线是一条二次曲线,就被称为二次回归。
目标值预期是输入变量的线性组合。线性模型形式简单、易于建模,但却蕴含着机器学习中一些重要的基本思想。线性回归,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。
对于单变量线性回归,例如:前面房价例子中房子的大小预测房子的价格。

NO.square_feetprice
11506450
22007450
32508450
43009450
535011450
640015450
760018450

一元线性回归通用公式为:在这里插入图片描述

表示大小为x(单位:平方英尺)的房子的价格为 ,其中 是直线的截距, 为回归系数,即直线的斜率。
我们要计算的东西其实就是 和 这两个系数,因为只要这两个系数确定了,那直线的方程也就确定了,然后就可以把要预测的x值代入方程来求得对应的 值了。
在这里插入图片描述

图中蓝色的点为真实的数据,红色的线为通过线性回归算法获得的函数模型。
2、算法总结与不足
上述分析过程,有两点不足:
(1)数据量太少,预测的误差可能较大;
(2)影响房价不止房子大小这一个因素,肯定还有很多其他因素,这里没有把其他因素考虑进去,导致预测的结果也是不准确的。既然有一元回归分析,那肯定也有多元回归分析。
三、多元线性回归
(一)定义
假定预测值与样本特征间的函数关系是线性的,回归分析的任务,就在于依据样本X和Y的观察值。去预计函数h,寻求变量之间近似的函数关系。定义:
在这里插入图片描述

当中,n=特征数目;
xj=每一个训练样本第j个特征的值,能够觉得是特征向量中的第j个值。
为了方便。记x0=1。则多变量线性回归能够记为:
在这里插入图片描述

(θ、x都表示(n+1,1)维列向量)
Note:注意多元和多次是两个不同的概念。“多元”指方程有多个參数。“多次”指的是方程中參数的最高次幂。多元线性方程是如果预测值y与样本全部特征值符合一个多元一次线性方程。
广义线性回归
用广义的线性函数:
在这里插入图片描述

wj是系数,w就是这个系数组成的向量。它影响着不同维度的Φj(x)在回归函数中的影响度,Φ(x)是能够换成不同的函数。这种模型我们觉得是广义线性模型,Φ(x)=x时就是多元线性回归模型。
(二)线性回归的求解
说到回归,经常指的也就是线性回归。因此本文阐述的就是多元线性回归方程的求解。如果有连续型值标签(标签值分布为Y)的样本,有X={x1,x2,…,xn}个特征,回归就是求解回归系数θ=θ0,θ1,…,θn。那么,手里有一些X和相应的Y,如何才干找到θ呢? 在回归方程里,求得特征相应的最佳回归系数的方法是最小化误差的平方和。
这里的误差是指预测y值和真实y值之间的差值,使用该误差的简单累加将使得正差值和负差值相互抵消。所以采用平方误差(最小二乘法)
平方误差能够写做:
在这里插入图片描述

下面就概括一下常用的几种求解算法。
1、梯度下降法(Gradient Descent)
根据平方误差,定义该线性回归模型的损耗函数(Cost Function)为:
在这里插入图片描述

(系数是为了方便求导展示)
线性回归的损耗函数的值与回归系数θ的关系是碗状的,只有一个最小点。线性回归的求解过程如同Logistic回归,区别在于学习模型函数hθ(x)不同,梯度法具体求解过程参考“机器学习经典算法详解及Python实现—Logistic回归(LR)分类器”。
2、Normal Equation(也叫普通最小二乘法)
Normal Equation算法也叫做普通最小二乘法(ordinary least squares),其特点是:给定输入矩阵X,如果XTX的逆存在并可以求得的话,就可以直接采用该方法求解。其求解理论也十分简单:既然是是求最小误差平方和,另其导数为0即可得出回归系数。
在这里插入图片描述

矩阵X为(m,n+1)矩阵(m表示样本数、n表示一个样本的特征数),y为(m,1)列向量。
上述公式中包含XTX, 也就是需要对矩阵求逆,因此这个方程只在逆矩阵存在的时候适用。然而,矩阵的逆可能并不存在,后面“岭回归”会讨论处理方法。
3、局部加权线性回归
线性回归的一个问题是有可能出现欠拟合现象,因为它求的是具有最小均方误差的无偏估计。显而易见,如果模型欠拟合将不能取得最好的预测效果。所以有些方法允许在估计中引入一些偏差,从而降低预测的均方误差。其中的一个方法是局部加权线性回归(Locally Weighted Linear Regression, LWLR )。在该算法中,我们给待预测点附近的每个点赋予一定的权重。于是公式变为:
在这里插入图片描述

其中,W是(m,m)矩阵,m表示样本数。
LWLR使用 “核”(与支持向量机中的核类似)来对附近的点赋予更高的权重。核的类型可以自由选择,最常用的核就是高斯核,高斯核对应的权重如下:
在这里插入图片描述

其中,k需要优化选择。
局部加权线性回归也存在一个问题,即增加了计算量,因为它对每个点做预测时都必须使用整个数据集,而不是计算出回归系数得到回归方程后代入计算即可。因此该算法不被推荐。
4、岭回归(ridge regression)和缩减方法
当数据的样本数比特征数还少时候,矩阵XTX的逆不能直接计算。即便当样本数比特征数多时,XTX 的逆仍有可能无法直接计算,这是因为特征有可能高度相关。这时可以考虑使用岭回归,因为当XTX 的逆不能计算时,它仍保证能求得回归参数。简单说来,岭回归就是对矩阵XTX进行适当的修正,变为 (I是单位矩阵,对角线为1,其他为0)从而使得矩阵非奇异,进而能对式子求逆。在这种情况下,回归系数的计算公式将变成:
在这里插入图片描述

为了使用岭回归和缩减技术,首先需要对特征做标准化处理,使各特征值的取值尺度范围相同,从而保证各特征值的影响力是相同的。
如何设置λ的值?通过选取不同的λ来重复上述测试过程,最终得到一个使预测误差最小的λ。可通过交叉验证获取最优值–在测试数据上,使误差平方和最小。
岭回归最先用来处理特征数多于样本数的情况,现在也用于在估计中加入偏差,从而得到更好的估计。事实上,上述公式是在最小平方误差和公式里引入了每个特征的惩罚因子得到,为的是防止过度拟合(过于复杂的模型),在损失函数里增加一个每个特征的惩罚因子,这就是线性回归的正则化
在这里插入图片描述

Note: 是一个常数,x0=1是固定的,那么 不需要惩罚因子,岭回归公式中的I的第一个元素要为0。
这里通过引入λ来限制了所有误差平方之和,通过引入该惩罚项,能够减少不重要的参数,这个技术在统计学中也叫做缩减(shrinkage )。缩减方法可以去掉不重要的参数,因此能更好地理解数据。此外,与简单的线性回归相比,缩减法能取得更好的预测效果,缩减法还可以看做是对一个数据模型的拟合采取了偏差(预测值与真实值差距)、方差(不同预测模型间的差距)折中方案,增加偏差的同时减少方差。偏差方差折中是一个重要的概念,可以帮助我们理解现有模型并做出改进,从而得到更好的模型。岭回归是缩减法的一种,相当于对回归系数的大小施加了限制。另一种很好的缩减法是lasso。lasso难以求解,但可以使用计算简便的逐步线性回归方法来求得近似结果。还有一些其他缩减方法,如lasso、LAR、PCA回归以及子集选择等。与岭回归一样,这些方法不仅可以提高预测精确率,而且可以解释回归系数。
5、回归模型性能度量
数据集上计算出的回归方程并不一定意味着它是最佳的,可以便用预测值yHat和原始值y的相关性来度量回归方程的好坏。相关性取值范围0~1,值越高说明回归模型性能越好。
线性回归是假设值标签与特征值之间的关系是线性的,但有些时候数据间的关系可能会更加复杂,使用线性的模型就难以拟合,就需要引入多项式曲线回归(多元多次拟合)或者其他回归模型,如回归树。
 多元线性回归案例分析:
例如:商品的销售额可能与电视广告投入,收音机广告投入,报纸广告投入
有关系,可以有
在这里插入图片描述

特征:
TV:对于一个给定市场中单一产品,用于电视上的广告费用(以千为单位)
Radio:在广播媒体上投资的广告费用
Newspaper:用于报纸媒体的广告费用
响应:
Sales:对应产品的销量
在这个案例中,我们通过不同的广告投入,预测产品销量。因为响应变量是一个连续的值,所以这个问题是一个回归问题。数据集一共有200个观测值,每一组观测对应一个市场的情况。通过模型搭建,最终预测哪个特征对结果影响比较大。

#从sklearn中导入数据集datasets
from sklearn import datasets
#将函数datasets.load_boston重命名为dataset
dataset=datasets.load_boston()
#输出dataset
print(dataset)
#输出dataset中的数据,并重命名为x
x=dataset.data
#输出x的长度
print(len(x))
#输出x的形状
print (x.shape)
#输出x中的前四行数据
print (x[:4])


#输出dataset中的target并重命名为y
y=dataset.target
#输出y中的前四行数据
print (y[:4])


#导入numpy包并重命名为np
import numpy as np
#:选取表示所有行;newaxis表示选取列;12表示第12列
x=x[:,np.newaxis,12]
#输出x中的第四行
print (x[:4])


#取x中除后56行数据之外的数据并重命名为x_train,作为训练集
x_train=x[:-56]
#取x中后56行数据并重命名为x_test,作为测试集
x_test=x[-56:]
#输出训练集与测试集的长度
print (u'训练',len(x_train))
print (u'测试',len(x_test))

#取y中除后56行数据之外的数据并重命名为y_train,作为训练集
y_train=y[:-56]
#取y中后56行数据并重命名为y_test,作为测试集
y_test=y[-56:]


#从sklearn中导入linear_model(一元线性回归)
from sklearn import linear_model
#将linear_model.LinearRegression()函数重命名为clf
clf=linear_model.LinearRegression()
#将x_train,y_train训练集填充到clf中
clf.fit(x_train,y_train)
#输出clf
print (clf)
#输出斜率
print ('斜率',clf.coef_)
#输出截距
print ('截距',clf.intercept_)

#用x_test测试集做预测并重命名为pre
pre=clf.predict(x_test)
#输出pre的前四行数据输出
print (pre[:4])
#输出y_test,用该数据与pre数据进行比较
print (y_test[:4])



print ('残差平方和')
#残差平方和等于(y_test-pre)的平方
Cost=np.mean(y_test-pre)**2
print (Cost)

#导入matplotlib包下的pyplot并重命名为plt(画图工具)
import matplotlib.pyplot as plt
#命名图的标题为BST datasets
plt.title("BST datasets")
#命名x轴名称
plt.xlabel("feature")
#命名y轴名称
plt.ylabel("result")

#以x_test为x轴,y_test为y轴画图,颜色为blue
plt.plot(x_test,y_test,'b.')
#以x_test为x轴,pre为y轴画图,颜色为yellow,线宽度为2
plt.plot(x_test,pre,'y-',linewidth=2)
#在图中显示网格线
plt.grid(True)
#将图片存为BST.png,大小为300
plt.savefig('BST.png',dpi=300)

#画出每一个点到直线的垂直距离
for idx, m in enumerate(x_test):
    plt.plot([m,m],[y_test[idx],pre[idx]],'b-')
plt.savefig('12 feature.png',dpi=300)
plt.show()

2、数据说明:
该数据集包含13个影响房价的自变量,目标变量为MEDV,代表房价中位数。具体的格式说明如下表所示:

列名类型说明示例
CRIMFloat犯罪率0.00632
ZNFloat超过25000地区的居住面积所占比例18.0
INDUSFloat非零售业的商业用地比例2.31
CHASInt是否被Charles河流穿过(是,取值1;否,取值0)0
NOXFloat一氧化氮含量0.538
RMFloat房子的平均屋子数6.575
AGEFloat早于1940年建立的的住宅比例65.2
DISFloat距离五个上班区域的加权平均距离4.0900
RADInt反映到达放射形状的高速路的能力的指标1
TAXFloat每10000美元的财产税296
PTRATIOFloat小学生-老师的比例15.3
BFloat反映黑人比例的指标,B=1000(BK-0.63)^2,BK是黑人的比例396.90
LSTATFloat低收入人群的比例4.98
MEDVFloat自住房屋价格的中位数(单位1000美元)24.0

3、运行结果:
省略前一部分
[ 24. 21.6 34.7 33.4]
[[ 4.98]
[ 9.14]
[ 4.03]
[ 2.94]]
训练 450
测试 56
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
斜率 [-0.9540746]
截距 34.81982552
[ 18.18076454 17.90408291 18.34295722 18.84861676]
[ 13.4 15.2 16.1 17.8]
残差平方和
3.7758602109

4、可视化结果:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值