专栏名称: 大数据挖掘DT数据分析
实战数据资源提供。数据实力派社区,手把手带你玩各种数据分析,涵盖数据分析工具使用,数据挖掘算法原理与案例,机器学习,R语言,Python编程,爬虫。如需发布广告请联系: hai299014
51好读  ›  专栏  ›  大数据挖掘DT数据分析

利用回归模型预测数值型数据(代码)

大数据挖掘DT数据分析  · 公众号  · 大数据  · 2017-03-16 21:41

正文



数据挖掘入门与实战  公众号: datadw



机器学习算法按照目标变量的类型,分为标称型数据和连续型数据。标称型数据类似于标签型的数据,而对于它的预测方法称为分类,连续型数据类似于预测的结果为一定范围内的连续值,对于它的预测方法称为回归。


“回归”一词比较晦涩,下面说一下这个词的来源:

“回归”一词是由达尔文的表兄弟Francis Galton发明的。Galton于1877年完成了第一次回归预测,目的是根据上一代豌豆种子(双亲)的尺寸来预测下一代豌豆种子(孩子)的尺寸。 Galton在大量对象上应用了回归分析,甚至包括人的身高预测。他注意到,如果双亲的高高度比平均高度高,他们的子女也倾向于比平均高度高,但尚不及双亲(笔者感觉未必,Galton并未考虑物质条件的发展会带来整体身高的增加,至少笔者感觉80,90的人普遍比父母高)。孩子的高度向着平均高度“回归”。

类型

回归按照方法可分为线性回归和非线性回归。线性回归适用线性方程来拟合曲线进行预测。在非线性回归中,特征之间出现非线性操作的可能性(比如相乘或者相除)。非线性回归中有种特殊的类型--逻辑回归,和线性回归不同的是,它属于“分类”的问题,这是由于它适用曲线拟合的方式来解决分类问题,所以也被称为回归。


线性回归

原理简介

线性回归衡量的是两个变量之间的关系,最直接的办法就是求得一个回归方程(regression equation),将已知条件x代入方程得到预测结果y。


假设我们获取到一个地区过去一段时间内的房价走势情况,我们根据下面的公式进行评估:

上面的式子可以看到房价和房屋面积、房子朝向呈线性的关系。而求该方程的过程称为 回归方程 ,其中0.7和0.19称为 回归系数 ,面积和房子的朝向称为 特征

可以看到“回归”问题最重要的是如何获得回归方程,如果得到该方程后,所有的一切问题将迎刃而解。

假如我们用 X (m×n)来表示特征的矩阵, 回归系数 θ (n×1)来表示,预测结果由 Y=Xθ 获得。在实际应用中,我们通常认为能带来最小平方误差的θ就是我们所要寻找的回归系数向量。平方误差指的是预测值与真实值的差的平方,这种方法就称为“ 最小二乘法 ”。所以回归问题转化为如何求最小 平方误差 ,即目标函数为:

求该函数的方法很多,在此介绍一种方法:

注意,上述公式中包含 ,也就是需要对矩阵求逆。因此这个方程只在逆矩阵存在的情况下适用。


应用

上面讲解了线性回归的原理,那如何将上面的算法应用到现实的场景中呢?我们使用python语言将上述的算法实现了一遍:

def standRegres(xArr,yArr):
    xMat = mat(xArr); yMat = mat(yArr).T
    xTx = xMat.T*xMat    # #判断是否存在逆矩阵
    if linalg.det(xTx) == 0.0:        
print "This matrix is singular, cannot do inverse"    return                ws = xTx.I * (xMat.T*yMat)    
   return ws

得到回归系数后,还需要乘以特征值后得到预测值。

大家会说python不是以算法包的种类多而出名吗?有现成的算法库,我干嘛还要自己去实现算法呢。当然,python里面有sklearn包中有现成的linear_model的函数可以供大家使用,而且使用方法特别简单:

from sklearn import datasets, linear_model
regr = linear_model.LinearRegression()regr.fit(x, mydata)
predict_outcome = regr.predict(x)

模型评估

基本上所有的数据集都可以使用上述的方法建立模型,那么,如何来判断模型的好坏呢?如果比较一下下面两个图,如果在这两个数据集上做线性回归,那么效果肯定不相同。

图1 具有相同回归系数的两组数据的对比

我们可以计算预测值和真实值之间的误差,也就是计算这两个序列的相关系数,来评价模型的好坏。







请到「今天看啥」查看全文