python绘制拟合回归散点图_机器学习之利用Python进行简单线性回归分析

前言:在利用机器学习方法进行数据分析时经常要了解变量的相关性,有时还需要对变量进行回归分析。本文首先对人工智能/机器学习/深度学习、相关分析/因果分析/回归分析等易混淆的概念进行区分,最后结合案例介绍如何利用Python进行简单线性回归分析。

一、机器学习

1.1什么是机器学习

谈到机器学习,人们会很容易联想到人工智能和深度学习,我们通过这三个概念的对比来说明三者的区别和联系。

人工智能Artificial Inteligence:这个概念早在1956年就被提出,当时科学家梦想着用当时刚刚出现的计算机来构造复杂的、拥有像人类智慧特性的机器。目前,AI的分支很多,诸如专家系统、机器学习、自然语言处理以及推荐系统等。

机器学习Mechine Learning:机器学习是实现人工智能的一种方法,是使用算法解析数据、并从中学习,然后对真实世界中事件作出决策或预测。机器学习是通过大量数据来“训练”算法模型,利用算法从数据中学习如何完成任务。学习方法可以分为:监督学习(如分类)、无监督学习(如聚类)等。(下面介绍一些基础概念)学习(learning):是指找到特征(feature)和标签(label)的映射(mapping)关系。

有监督学习(supervised learning):不仅将训练数据(特征)丢给计算机,还把分类的结果(数据具有的标签)也一并丢给计算机分析,如分类和回归;

无监督学习(unsupervised learning):只提供训练数据(特征),不给结果(标签),计算机只能利用其计算能力分析数据的特征,然后得到一些数据集合,集合内的数据在某些特征上相同或相似,如聚类分析;

半监督学习(semi-supervised learning):给计算机大量训练数据与少量分类结果(具有同一标签的集合)。

聚类(clustering):无监督学习的结果,聚类的结果将产生若干组集合,同集合中对象彼此相似,与其他集合中对象相异。

分类(classification)与回归(regression):有监督学习的两大应用,其区别在于分别产生离散或连续的结果(分类及回归方法的区别在下文中有较详细分析)。起名困难症用户:机器学习之利用Python进行逻辑回归分析​zhuanlan.zhihu.comv2-a88239f10766e1269e3d2d3dbc9d5131_180x120.jpg

深度学习Deep Learning:深度学习是机器学习的一种方法,其本身会用到有监督和无监督的学习方法来训练深度神经网络。人工智能、机器学习、深度学习三者的关系

1.2机器学习的步骤

利用机器学习方法分析、解决问题的过程可分为五个步骤:机器学习主要步骤

1.提出问题

明确要分析的问题,为后续的机器学习过程提供目标。

2.理解数据(采集并查看数据)

采集数据(根据研究问题采集数据);导入数据(从不同数据源读取数据);查看数据信息(描述统计信息、数据缺失值、异常值情况等,可以结合具体图表来直观查看数据)。

3.数据清洗(数据预处理)

数据预处理是数据分析过程中关键的一环,数据质量决定了机器学习分析的上限,而具体采用的算法和模型只是逼近这个上限。(包括缺失数据处理、异常值处理、数据类型转换、列名重命名、数据排序、选择子集、特征工程等步骤)

4.构建模型

根据研究的问题以及数据的特点选择合适的算法,将训练数据放入所选择的机器学习算法中构建相应的模型,有时需要对多种算法模型进行比较,甚至进行模型整合。

5.模型评估

利用测试数据对得到的模型效果进行评估,具体评估指标依据研究的问题及采用的模型进行选择,常用到的指标需根据模型的类型而定,如分类模型常用准确率、ROC-AUC等,而回归模型可以用决定系数等。各类学习器评价指标 - MsSpark的博客 - CSDN博客​blog.csdn.netv2-c5b1c4482ccdda7aa2d01ee1214ea3a7_180x120.jpg

1.3特征(feature)和标签(label)

机器学习中经常遇到特征及标签两个概念:

特征:数据的特征,描述数据的属性。

标签:数据的标签,对数据的预测结果。

1.4Python机器学习包sklearn

Python提供了强大的sklearn包,可以调用不同机器学习方法解决问题。我们并不需要一开始就掌握sklearn中每种机器学习方法,只需在用到某个机器学习方法时,再去sklearn中找对应算法的用法即可。本文第三部分会以调用sklearn包中LinearRegression方法进行简单线性回归分析为例,说明如何使用Python进行数据分析。sklearn algorithm cheat-sheet

二、相关分析及回归分析

机器学习常用来解决相关分析和回归分析的问题,本文接下来主要介绍两者的相关概念及评估指标,以及它们的区别与联系。

2.1相关分析及回归分析相关分析(Correlation analysis):研究两个或两个以上处于同等地位的随机变量间的相关关系的统计分析方法。

回归分析(Regression analysis):确定两种或两种以上变量间相互依赖定量关系的统计分析方法,将变量分为因变量和自变量。

两者的区别:相关分析中涉及的变量不区分自变量和因变量,变量之间关系是对等的;回归分析中,需要根据研究对象的性质和研究分析的目的,区分变量为自变量和因变量。

相关分析主要通过“相关系数”反映变量间相关程度的大小,因为变量间关系是对等的,所有相关系数是唯一的;回归分析中,自变量和因变量之间可能存在多个回归方程。

两者的联系:相关分析是回归分析的基础和前提,回归分析是相关分析的深入和继续。

相关分析表现变量间数量变化的相关程度,回归分析表现变量间数量相关的具体形式。

只有变量间存在高度相关时,进行回归分析需求具体形式才有意义。

2.2线性相关性类型及回归分析类型

2.2.1线性相关性类型

以两个变量的简单线性相关为例:

散点图(直观判断变量间是否有相关性的最佳方法):结合散点图来直观显示各个变量之间的相关性。

三种线性相关性:正线性相关(总体表现直线朝上);负线性相关;非线性相关。

2.2.2回归分析类型

根据不同的维度对回归分析进行分类:一元回归和多元multivariate回归分析(因变量多少);

简单回归和多重multiple回归分析(自变量多少);

线性回归和非线性回归(自变量及因变量间关系类型)。

2.3衡量指标

2.3.1衡量变量间相关度的指标

符号(反映两个变量的相关性方向);大小(表示两个变量相关性程度)指标一:协方差

协方差(cov(data,bias=1)):描述变量间相互关系,两随机向量X,Y之间的协方差定义为cov(X,Y)=E[(X-E(X))(Y-E(Y))],E表示数学期望。可通俗的理解为,两个变量在变化过程中是同方向变化还是反方向变化?以及同向或反向程度如何?

符号表示相关性方向;大小表示相关性程度。

该指标缺点:容易受到变量量纲影响。指标二:相关系数

相关系数(corrcoef(data)):先对变量做标准化变换(除相应标准差),然后再计算协方差,把先标准化变换后做协方差运算定义为变量间的相关系数(皮尔逊相关系数)。可以理解为是剔除两个变量量纲影响,标准化后的特殊协方差。

相关系数与协方差对比:相关系数是一个无单位的量,绝对值不超过1,它描述了变量间的线性相关程度。

当变量间相关系数为0时,变量间不存在线性趋势关系,但可能存在非线性趋势关系。

当变量间相关系数的绝对值为1时,一个变量是另一变量的线性函数;当变量间相关系数越接近1时,变量间线性趋势越明显。

在用协方差描述变量间的相关程度时会受到变量的量纲和数量级的影响,即使对于同样的一组变量,当变量的量纲和数量级发生变化时,协方差也会随之改变。

2.3.2衡量回归模型精确度的指标

>>>先介绍回归分析中的最佳拟合线(回归方程)

最佳拟合线即能最准确预测出所有点真实值的线。

如何求出回归方程中的截距和回归系数(最小二乘法:使误差平方和最小)

指标三:决定系数R平方(coefficient of determination)

决定系数(model.score()):评估得到的回归方程是否较好拟合样本数据的统计量。(以下是与决定系数相关的重要指标,以及决定系数的计算过程)

总的平方和:观测值与平均值的离差平方和

误差平方和:观测值与预估值的离差平方和

回归平方和:预估值与平均值的离差平方和

三个平方和之间的关系

决定系数的计算(回归平方和与总平方和的商)

决定系数与相关系数对比:决定系数表示回归线拟合程度,即有多少百分比的y波动可以被回归线描述;相关系数表示变量间的相关关系。

决定系数大小:R平方越高,回归模型越精确,取值为[0,1];相关系数等于 (相关性方向符号+or-)决定系数开方,取值为[-1,1]。

决定系数越大则拟合优度越好,但具体问题要具体分析;相关系数绝对值越大说明变量相关性越强。

2.4相关关系与因果关系

注意不能混淆相关关系和因果关系,相关分析只能表明变量是如何或以怎样的程度彼此联系在一起的。

三、回归分析的Python实现

利用Python中的sklearn包进行简单线性回归分析。

3.1提出问题

探究“学习时长”和“学习成绩”之间是否存在相关性关系,如果有找出其回归方程。

3.2理解数据

1、导入数据包

import warnings

from collections import OrderedDict

import pandas as pd

import numpy as np

warnings.filterwarnings('ignore')

2、创建数据并查看数据

#创建数据并查看数据

examDict={'学习时间':list(np.arange(0.5,5.5,0.25)),

'学习成绩':[10, 22, 13, 43, 20, 22, 33, 50, 62,

48, 55, 75, 62, 73, 81, 76, 64, 82, 90, 93]}

examOrderedDict=OrderedDict(examDict)

examDf=pd.DataFrame(examOrderedDict)

examDf.head()

#查看数据描述统计信息

examDf.describe()

>>>

学习时间学习成绩

00.5010

10.7522

21.0013

31.2543

41.5020

学习时间学习成绩

count20.00000 20.000000

mean2.8750053.700000

std1.4790226.435821

min0.5000010.000000

25%1.6875030.250000

50%2.8750058.500000

75%4.0625075.250000

max5.2500093.000000

3、提取特征值和标签

#特征值:解释变量(自变量),一般加X为后缀

#标签:因变量,一般加y为后缀

exam_X=examDf['学习时间']

exam_y=examDf['学习成绩']

4、利用散点图查看数据间关系

import matplotlib.pyplot as plt

#散点图

plt.scatter(exam_X,exam_y,color='b',label='考试数据')

#横纵轴标签

plt.legend(loc=2)

plt.xlabel('学习时间')

plt.ylabel('学习成绩')

plt.show()

5、求出变量间相关系数

#变量间的相关系数

rDf=examDf.corr()

print(rDf)

>>>

学习时间学习成绩

学习时间1.00000.9379

学习成绩0.93791.0000

从散点图中,我们可以看出学习时长和学习成绩之间应该存在线性相关关系,且相关系数为0.9379呈现强线性相关关系(模型选择时,我们会创建线性回归模型进行拟合)。

3.3构建模型

1、从数据集中分离出训练数据train和测试数据test

from sklearn.cross_validation import train_test_split

#建立训练集和测试集数据

train_X,test_X,train_y,test_y =train_test_split(exam_X,exam_y,train_size=0.8)

#输出训练集和测试集数据大小

print('训练集大小',train_X.shape,train_y.shape)

print('测试集大小',test_X.shape,test_y.shape)

>>>

训练集大小 (16,) (16,)

测试集大小 (4,) (4,)

绘制散点图,查看训练集和测试集数据的分布情况

import matplotlib.pyplot as plt

#散点图

plt.scatter(train_X,train_y,color='b',label='训练集')

plt.scatter(test_X,test_y,color='r',label='测试集')

#横纵轴标签

plt.legend(loc=2)

plt.xlabel('学习时间')

plt.ylabel('学习成绩')

plt.show()

2、创建线性回归模型

#导入线性回归模型

from sklearn.linear_model import LinearRegression

#创建模型

model=LinearRegression()

3、训练模型

#导入模型的数据应为一列数据

train_X=train_X.values.reshape(-1,1)

train_y=train_y.values.reshape(-1,1)

test_X=test_X.values.reshape(-1,1)

test_y=test_y.values.reshape(-1,1)

print('训练集大小',train_X.shape,train_y.shape)

print('测试集大小',test_X.shape,test_y.shape)

model.fit(train_X,train_y)

>>>

训练集大小 (16, 1) (16, 1)

测试集大小 (4, 1) (4, 1)

3.4模型评估

1、查看模型得分(即决定系数大小)

#查看模型得分

print('模型得分为',round(model.score(test_X,test_y),4))

>>>

模型得分为 0.4662

2、求出并绘制模型拟合线(模型的回归方程)y=a+bx

#模型拟合线(模型的回归方程)y=a+bx

a=model.intercept_

b=model.coef_

print('模型的回归方程是:y=%f+%fx'%(a,b))

>>>

模型的回归方程是:y=4.197326+16.893159 x

#绘制拟合曲线

plt.scatter(train_X,train_y,color='b',label='train data')

test_y_pred=model.predict(test_X)

plt.plot(test_X,test_y_pred,color='black',label='best line')

#测试集数据的散点图

plt.scatter(test_X,test_y,color='r',label='test data')

#坐标轴

plt.xlabel('学习时间')

plt.ylabel('学习成绩')

plt.legend(loc=2)

plt.show()

四、总结

机器学习方法有很多,这些方法有些很容易混淆,比如相关分析/回归分析/因果分析以及聚类分析/分类分析等,在使用时要注意区分其异同点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十年经验教你如何学习嵌入式系统

一、如何学习嵌入式系统- - 嵌入式系统的概念着重理解“嵌入”的概念 ,主要从三个方面上来理解。1、从硬件上,“嵌入”将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累…

php博客文章修改,wordpress博客如何快速修改文章阅读数

WordPress修改文章阅读次数可以通过插件来完成,下面我们以WP-PostViews插件演示如何修改文章阅读次数。WP-PostViews是一个非常常用的wordpress插件,主要用于文章阅读数访问量的统计,插件使用简单,直接安装启用即可,并…

ionic拍照,从相册选择功能

在介绍插件的使用之前,我们有必要先大致了解下插件的原理 一、插件工作原理分析 一个插件是如何正确地在IONIC框架下运行的呢? 前台的HTML/js代码又是如何与后面具体平台做数据交互的呢? 这个就需要对插件的工作原理及各个模块之间的流程关系有一个基本的了解。 为…

python爬虫爬图片教程_python爬虫实战之爬取京东商城实例教程

前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧。 主要工具 scrapy BeautifulSoup requests 分析步骤 1、打开京东首页,输入裤子将会看到页面跳转到了这里&#xff0c…

安卓camera总体框架

今天是周五了,时间过得真快,通常这个时候,我都还沉醉了上班的状态中,说到上班,我是认真的,我非常喜欢上班,特别是今天,我会听到一声优美的声音,我的银行卡会多出一些钱&a…

matlab可以连接阻抗分析仪么,阻抗分析仪的工作原理与测试方法

阻抗分析仪和LCR表是非常通用的测量器件的电子仪器。根据阻抗范围和频率范围的不同,有一系列不同原理的仪器来满足测试要求,图1是不同阻抗范围和不同频率范围的阻抗测量方法。图1 阻抗测量方法图2是自动平衡电桥法的原理框图。通过精确测量加载到被测件D…

分享几个有意思的视频

最近微信加我的好友有点多,然后问问题的也不少,有的问题我不知道,有的问题我觉得百度一下应该很多答案,有的问题我觉得我可以知道,但是需要自己去寻找答案,也需要花费我一些时间,我有时候非常不…

php+redis+设置前缀,spring使用Redis自定义前缀后缀名(去掉SimpleKey []+自定义)

标签:spring中自动加上 SimpleKey [] 解决方案一、自定义后缀名1、定义类实现KeyGenerator接口MyKeyGeneratorpackage com.wbg.springRedis.service.impl;import org.springframework.cache.interceptor.KeyGenerator;import org.springframework.stereotype.Compon…

北京的林书豪,像一把小李飞刀

从《我要打篮球》节目开始,就一直在关注书豪的比赛,我喜欢书豪,书豪选择来CBA打球,也满足了很多球迷的愿望,近距离感受球星的那种状态,今天晚上,北京跟青岛的比赛,我是一分钟没有拉下…

I2C和SPI注定要打一架

最近微信群里好几天聊到I2C,既然说到了I2C,那就有必要说SPI,那就一起说了算了,大家有更好见解的,留言回复下,让更多的人知道你的观点。整理与网络,侵删I2C和SPI应该要打一架?现今&am…

第1章 ssh命令和SSH服务详解

基础服务类系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远…

漫画:什么是区块链?

两年前,小灰以前写过一期关于区块链的漫画,可能很多新来的小伙伴还没有看过。最近趁着区块链重新成为热门话题,小灰把这篇漫画稍作修改,再次推送给大家。什么是区块链?区块链,英文 Blockchain,本…

php外卖系统源码单店,网上订餐系统 v3.1 单店版

系统以简单实用为主,系统的每一个功能都是实用的,像以很多网站为了好看把页面填的满满的,用户进来不知从何处操作起,我们的系统,一切了为了用户,为了网站经营者。我们所做的不仅仅是一个店铺展示系统&#…

python爬酷狗音乐_良心推荐!一个Python高手必读的库,真香!

菜鸟进阶高手,需要内外的修炼,外练招式,内修心法。招式有很多比如基本的函数,类,文件,模块,到并发,数据库的使用,再到一些框架的使用无论是爬虫的西瓜皮框架,…

web容器(02):tomcat配置监控

1、tomcat的目录结构 tomcat一般给Java应用的&#xff0c;apache一般给php应用的 bin文件夹(启动文件)&#xff1a; 配置监听之类的内容是在catalina.sh中加 conf文件夹(配置文件)&#xff1a; 2、server.xml配置文件说明 <Server port"8005" shutdown"SHUTD…

一般一个前端项目完成需要多久_制作分销小程序最快要多久

小猪V5分销小程序小编了解到&#xff0c;微商城及微分销搭建成为当下热门话题&#xff0c;下面从多个方面来谈谈快速制作电商小程序最快要多久。微信为小程序开放了超过60多个入口&#xff0c;比如有微信群聊入口、微信聊天主界面下拉、App分享信息卡片、发现栏小程序主入口、发…

那些有趣的电子漫画合集

素材来源&#xff1a;芯片之家同事调电路连续通宵两个晚上&#xff0c;结果。。。坐着我的芯片靠椅&#xff0c;剪个帅帅的光头。更多电子漫画合集&#xff1a;转自&#xff1a;长按识别图中二维码关注—————END—————扫码或长按关注回复「加群」进入技术群聊

vim nerdtree 标签_7款vim插件

作者&#xff1a;QvQ链接&#xff1a;https://zhuanlan.zhihu.com/p/145793963来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。集成开发环境&#xff08;IDE&#xff0c;Integrated Development Environment &#xff09…

单片机怎么学?

—————END—————扫码或长按关注回复「 加群 」进入技术群聊

tableau linux无网络安装_四十二、Linux网络管理,软件安装,进程管理总结

「Author&#xff1a; Runsen」1、⽹络管理1.1 网络状态查看在Linux中经常使用ifconfig&#xff0c;route和netstat查看网络状态&#xff0c;它们就是. net-tools工具&#xff0c;下面我来使用下。我就说下ifconfig和route在我们的linux中有很多网卡接口&#xff0c;比如eth0第…