机器学习回归篇-简单线性回归_无风而起的博客-程序员秘密

技术标签: 机器学习  回归问题  

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

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

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

本篇所讲的简单线性回归,就是只包含一个自变量(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
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ewfwewef/article/details/53009671

智能推荐

大数据基础知识学习-----Linux学习笔记(一)CentOS常用命令_centos 红底白字文件_四川码匠的博客-程序员秘密

CentOS常用命令文件目录类建立目录:mkdir 目录名删除空目录:rmdir 目录名无条件删除子目录:rm -rf 目录名改变当前目录:cd 目录名(进入用户home目录:cd ~;进入上一级目录:cd -)查看自己所在目录:pwd查看当前目录大小:du显示目录文件列表:ls-l (-a:增加显示隐含目录) 其中:蓝:目录;绿:可执行文件;红:压缩文件;浅蓝:链...

php生成apk,php自定义apk安装包实例,phpapk安装包_PHP教程_weixin_39834767的博客-程序员秘密

php自定义apk安装包实例,phpapk安装包本文实例讲述了php自定义apk安装包的方法,分享给大家供大家参考。具体实现方法如下:众所周知,apk格式安装文件是android智能系统的安装文件,下面我们来看一个利用php实现自定义apk安装包实例。一、需求:需要实现对产品进行一次推荐好友安装的活动,每个会员下载自己的专属安装包(里面记录会员的相关信息)。二、思路:经过了解,发现apk安装包原来...

国产操作系统怎么下载安装使用Photoshop这样的软件?_麒麟系统可以装ps吗_Linux极客的博客-程序员秘密

不少朋友曾表示要支持国产,想尝试我们国家自己发行的操作系统,但又听别人说国产操作系统软件匮乏,基本没什么软件,要啥没啥,所以又纷纷打了退堂鼓。但笔者可以负责任地告诉大家,现在的国产操作系统已经能够兼容越来越多的常用软件了,据说还有不少的常用软件正在适配的路上,满足日常基本的工作需求已经没问题了。中兴新支点操作系统桌面比如笔者用了一年多的中兴新支点操作系统,在他们系统自带的软件中心就能看...

浏览器启动就打开特定网页_启动浏览器时如何打开一组特定的网页_culun797375的博客-程序员秘密

浏览器启动就打开特定网页If you have certain webpages that you visit every time you open your browser, you can save time by having them automatically open when you startyour browser. We’ll show you how to set thi...

QuotaExceededError the quota has been exceeded --- Firefox 报错解决_henryzyk的博客-程序员秘密

QuotaExceededError the quota has been exceeded — Firefox 报错解决

随便推点

JS表单提交和复选框测试_表单提交复选框的值_BlueSkyInMyMind的博客-程序员秘密

1.编写html&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt; &amp;lt;form id=&quot;fo

跨域拦截Access-Control-Allow-Origin设置多个origin_weixin_30266885的博客-程序员秘密

在Extjs和java项目碰到了需要同时处理跨域,外部要访问后台接口的问题原来的代码是这样,只能设置一个extjs前台需要过滤的跨域请求package com.xgt.config;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.h...

MYSQL8mysql -u root -p mysql不是内部外部命令_学python的精神小伙的博客-程序员秘密

MYSQL8mysql -u root -p mysql不是内部外部命令这是因为path环境变量没有配好!!进入电脑的高级系统配置的环境变量找到系统变量的path把你mysql的bin路径复制下来,粘贴在path上面我的bin路径是E:\MySQL-8.0.11\mysql-8.0.11-winx64\binwin10path添加路径直接编辑path然后新建把bin路径放进去就ok...

linux下tomcat工程增量更新,Docker + Tomcat 实现 Springboot 项目增量升级_刘省吉的博客-程序员秘密

1、首先 下载 Tomcat镜像docker pull tomcat2、Maven 打包命令mvn clean install3、Tomcat 默认端口80804、启动Tomcat 查看是否能成功启动(基础命令参数,自行百度吧)docker run --name tomcat -d -p 8088:8080 tomcat5、游览器 查看Tomcat是否成功启动http://localhost:80...

TFlite (一)yolov4 / yolov4-tiny 模型转化__yuki_的博客-程序员秘密

环境:python 3.6.8依赖:tensorflow-gpu 2.3.0rc0 opencv-python 4.1.1.26 lxml tqdm absl-py matplotlib easydict pillow步骤:Weights ---&gt; TF ---&gt; TFlite一、下载模型与参数yolov4.weights:下载 yolov4.cfg:下载 yolov4-tiny.weights:下载 yolov4-ti...

推荐文章

热门文章

相关标签