机器学习回归篇-简单线性回归

之前的几篇里面讲了机器学习分类问题的一些算法,下面几篇来讲一下回归问题。

回归问题和分类问题有什么区别呢?
分类问题预测的结果是一些类别值,比如说,颜色类别,电脑品牌,有无信誉等。
回归问题预测的是连续型的数值,如房价,人数,降雨量等等

生活中我们做决定的过程通常是根据两个或多个变量之间的关系,解决回归问题就是通过建立方程来模拟两个或多个变量间的关系,被预测的变量叫做因变量,被用来预测的变量叫做自变量。回归问题在中学阶段的数学课上已经有过简单涉及,这里也算是再次复习一下。

本篇所讲的简单线性回归,就是只包含一个自变量(x)和一个因变量(y),两个变量的关系用一条直线来模拟的回归问题。至于包含两个以上变量的多元线性回归,以及非线性回归在后面的篇幅中再说。

先来看理解线性回归的几个方程
简单线性回归模型:
y = β1x + β0 + E
这里的β1和β0分别是直线方程里的参数。E代表着随机因素带来的偏差,
是均值为0的正态分布。

简单线性回归方程:
E(y) = β1x + β0
这里E(y)代表y的期望,因为偏差E均值为0这里去掉。

简单线性回归估计方程:
y估计 = b1x + b0
这里的b1和b0是我们根据一组已知的x,y样本计算出的值,是线性回归方程的估计参数,也是我们想要利用简单线性回归要计算出的参数。

另外简单线性回归自变量与因变量之间的关系包括,正向线性关系,反向线性关系,无关系,分别对应方程直线斜率>0, <0, =0的情况。

线性回归分析的流程:
这里写图片描述如如上图,已知了简单线性回归方程,β1,β0是未知参数,输入一组x和y的样本,根据一定的规则,通过这一组样本值,计算出估计参数b0,和b1,这两个参数是β0,β1的估计值这样就得到了一个y的估计方程,通过这个方程就可以根据x预测y的值了。

那么怎样通过一组样本列出简单线性回归的估计方程呢?下面用一个例子来说明。
这里写图片描述
一家汽车厂商月广告的数量x与月汽车销售数量y的对应关系如上图所示。
只有一个自变量x和一个因变量y,典型的简单线性回归问题。
我们要做的就是找到一条直线,使得上表中每一个x对应的y值与方程中相应x的y值之差的平方的和最小。
也就是这里写图片描述
满足这种情况的直线也就是最能代表这组样本趋势的一条直线
y估计 = b1x + b0 ,要做的就是求这种情况下的b1,b0。

求解过程利用到一个极值问题,上述公式差平方的和最小,这里略去推导的过程直接给出最终的公式:
这里写图片描述
这里写图片描述

通过上述公式就能求解出b1和b0的值,这里计算一下,将上图中的数据代入公式中,解出b1 = 5, b0 = 10
也就是最终的线性回归的估计方程为
y = 5x + 10
这样假如再给出比如月广告数量x为7,那么就可以推算出月销售数量y为45。
如图:
这里写图片描述

下面是简单的Python的实现

import numpy as np
#因为要用到均值等计算所以调用numpy库
#np.mean(x)返回列表x的均值

#函数fitSLR输入样本,列表x,y 返回最终估计方程的b1, b0, 主要还是直接使用上述给出的代数公式
def fitSLR(x, y):
    n = len(x)
    denominator = 0
    numerator = 0

    for i in range(0, n):
        numerator += (x[i] - np.mean(x)) * (y[i] - np.mean(y))
        denominator += (x[i] - np.mean(x))**2

    b1 = numerator / float(denominator)
    b0 = np.mean(y) - b1*np.mean(x)
    return b0, b1

#预测的函数, 给出要预测的x值,和估计方程的b0,b1,返回一个y值    
def predict(x, b0, b1):
    return b0 + x*b1

#下面用两组列表调用上定义的两个函数调用一下   
x = [1, 3, 2, 1, 3]
y = [14, 24, 18, 17, 27]

b0, b1 = fitSLR(x, y)
print "intercept:", b0, "slope:", b1
x_test = 7

y_test = predict(7, b0, b1)

print "y_test:", y_test
#成功根据计算好的方程,预测x=7时,y预测结果为45
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值