机器学习技术(六)——有监督学习算法之线性回归算法实操

news2025/1/21 1:02:13

机器学习技术(五)——有监督学习之线性回归算法实操

在这里插入图片描述

引言:

机器学习监督算法是一种基于已有标记数据的学习方法,通过对已知输入和输出数据的学习,建立一个模型来预测新的输入数据的输出。这种算法模仿人类的学习过程,从已有的经验中总结规律,并将其应用于新的情况。

本文将介绍有监督学习算法之线性回归的案例实操。

文章目录

  • 机器学习技术(五)——有监督学习之线性回归算法实操
    • 一、线性回归算法实操
      • 1、实验目的
      • 2、导入相关依赖
      • 3、读取并查看数据
      • 4、数据清洗
      • 5、合并两个数据集
      • 6、数据可视化
        • 1、绘制3D图
        • 2、构建折线图
      • 7、训练模型并进行可视化
        • 1、划分数据集
        • 2、训练模型
        • 3、数据可视化

一、线性回归算法实操

通过基于线性回归模型对1960-2010年的年份对全球气温以及二氧化碳排放量的线性关系进行建模以及探索,一共51个数数据点,通过对这51个样本的分析得出两者的线性关系预测。

数据下载地址:https://download.csdn.net/download/tianhai12/88275733

1、实验目的

采用线性回归模型对1960年至2010年年份以及全球温度和二氧化碳排放量的数据进行训练并进行预测。

2、导入相关依赖

#导入相关依赖库
import matplotlib.pyplot as plt
import matplotlib as mpl
import pandas as pd
import seaborn as sns
import sklearn
import numpy as np

3、读取并查看数据

将全球气温数据以及二氧化碳排放量数据进行导入。

#读取数据
co2_df = pd.read_csv('global_co2.csv')
temp_df = pd.read_csv('annual_temp.csv')
#查看前五行数据
print(co2_df.head())
print(temp_df.head())

结果显示如下,二氧化碳排放量共有八个变量。全球气温统计共有GCAG以及GISTEMP两种来源。

  Year  Total  Gas Fuel  Liquid Fuel  Solid Fuel  Cement  Gas Flaring  \
0  1751      3         0            0           3       0            0   
1  1752      3         0            0           3       0            0   
2  1753      3         0            0           3       0            0   
3  1754      3         0            0           3       0            0   
4  1755      3         0            0           3       0            0   

   Per Capita  
0         NaN  
1         NaN  
2         NaN  
3         NaN  
4         NaN  
    Source  Year    Mean
0     GCAG  2015  0.8990
1  GISTEMP  2015  0.8700
2     GCAG  2014  0.7402
3  GISTEMP  2014  0.7500
4     GCAG  2013  0.6687

4、数据清洗

将我们所需数据从原有数据集中提取并重新整合命名。

# 数据清洗
co2_df = co2_df.iloc[:,:2]                     # 只提取CO2的总量和年份数据
co2_df = co2_df.loc[co2_df['Year'] >= 1960]   # 只获取 1960 - 2010年的数据
co2_df.columns=['Year','CO2']                # 重命名列名
co2_df = co2_df.reset_index(drop=True)       # 重新设定索引

# 只保留GCAS一个燃气
temp_df = temp_df[temp_df.Source != 'GISTEMP']                              
# Drop name of source
temp_df.drop('Source', inplace=True, axis=1)                                
# 重置索引
temp_df = temp_df.reindex(index=temp_df.index[::-1])                        
# 只保留 1960 - 2010
temp_df = temp_df.loc[temp_df['Year'] >= 1960].loc[temp_df['Year'] <= 2010]   
# 重命名列
temp_df.columns=['Year','Temperature']                                    
# 重置索引
temp_df = temp_df.reset_index(drop=True)                                  
# 输出前五行
print(co2_df.head())
print(temp_df.head())

结果如下所示,只留下CO2排放量以及来源GCAG的温度统计。

   Year   CO2
0  1960  2569
1  1961  2580
2  1962  2686
3  1963  2833
4  1964  2995
   Year  Temperature
0  1960       0.0252
1  1961       0.0818
2  1962       0.0924
3  1963       0.1100
4  1964      -0.1461

5、合并两个数据集

将数据整合在一起便于后续回归计算。

#整合两个数据表到一个表中
climate_change_df = pd.concat([co2_df, temp_df.Temperature], axis=1)
#打印新数据集的前五行
print(climate_change_df.head())

得到如下结果

 Year   CO2  Temperature
0  1960  2569       0.0252
1  1961  2580       0.0818
2  1962  2686       0.0924
3  1963  2833       0.1100
4  1964  2995      -0.1461

6、数据可视化

1、绘制3D图

导入所需方法,对年份,二氧化碳排放量以及全球温度构建3D图

#导入绘制3D图像的方法
from mpl_toolkits.mplot3d import Axes3D
#创建画布
fig = plt.figure()
#设定画布大下
fig.set_size_inches(12.5, 7.5)
ax = fig.add_subplot(111, projection='3d')
#绘制散点图
ax.scatter(xs=climate_change_df['Year'], ys=climate_change_df['Temperature'], zs=climate_change_df['CO2'])
#添加xlabel, ylabel,标题
ax.set_ylabel('Relative tempature'); ax.set_xlabel('Year'); ax.set_zlabel('CO2 Emissions')
ax.view_init(10, -45)

得到下图
在这里插入图片描述

2、构建折线图

从上图样本点可以看出变量之间一个近似线性的关系,为了更好理解数据分别构建年份与CO2折线图以及年份与温度折线图,相当于将3D拆分为2D。
在这里插入图片描述

可见二氧化碳排放量随着年份上升,相对平稳上涨。相比之下全球相对温度随着年份上升起伏较大,但总体也呈上升阶段。
在这里插入图片描述

7、训练模型并进行可视化

1、划分数据集

划分训练集以及测试集,利用线性回归模型对数据进行建模,并输出可视化图像。

#导入数据集的划分方法
from sklearn.model_selection import train_test_split
#分别给X,Y进行赋值
X = climate_change_df['Year']
X = X.values
X = X.reshape(-1,1)
Y = climate_change_df[['CO2', 'Temperature']].astype('float32')
Y = Y.values
#划分训练集和测试集,test_size参数为指定测试集的比例,此处为10%的数据集设置为测试集。
X_train, X_test, y_train, y_test = np.asarray(train_test_split(X, Y, test_size=0.1))

2、训练模型

导入所需方法并创建模型输出模型测试结果。

#导入线性回归方法
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
from sklearn.metrics import accuracy_score
#创建模型
reg = LinearRegression()
#使用训练集训练模型
reg.fit(X_train, y_train)
#测试集进行测试,并输出模型测试结果
y_pred=list(reg.predict(X_test.reshape(-1, 1)))
#测试集进行测试,并输出模型测试结果
r2_score(y_test, y_pred, multioutput= 'variance_weighted')

每次输出的值都不相同,不过都在0.9以上,说明得分情况比较优秀

3、数据可视化

标准化后进行可视化步骤,对该三维数据形成三维折线图。

#生成数组,并进行标准化
x_line = np.arange(1960,2011).reshape(-1,1)
p = reg.predict(x_line).T
#生成画布
fig2 = plt.figure()
#设置画布大小
fig2.set_size_inches(12.5, 7.5)
ax = fig2.add_subplot(111, projection='3d')
#绘制3D散点图,三个维度分别表示年份,温度和CO2
ax.scatter(xs=climate_change_df['Year'], ys=climate_change_df['Temperature'], zs=climate_change_df['CO2'])
#添加各坐标轴的描述
ax.set_ylabel('Relative tempature'); ax.set_xlabel('Year'); ax.set_zlabel('CO2 Emissions')
#绘制折线图
ax.plot(xs=x_line, ys=p[1], zs=p[0], color='green')
ax.view_init(10, -45)

将两个表现在二维空间的一元线性模型投射于三维空间中的一根直线虽然只有一条直线,但其实x轴和y轴,x轴和z轴形成两个一元线性模型。

在这里插入图片描述

分别可视化两个模型为2D

#生成画布
f, axarr = plt.subplots(2, sharex=True)
#设置画布大小
f.set_size_inches(12.5, 7.5)
#绘制第一个折线图,横纵坐标分别为年份和CO2
axarr[0].plot(climate_change_df['Year'], climate_change_df['CO2'])
#在第一个折线图中添加预测的线性回归模型
axarr[0].plot(x_line, p[0])
#添加Y轴的描述
axarr[0].set_ylabel('CO2 Emissions')
#绘制第二个折线图,横纵坐标分别为年份和温度
axarr[1].plot(climate_change_df['Year'], climate_change_df['Temperature'])
#添加预测的模型
axarr[1].plot(x_line, p[1])
#添加X,Y轴的描述
axarr[1].set_xlabel('Year')
axarr[1].set_ylabel('Relative temperature')

在这里插入图片描述
输出分别为年份对于CO2排放量的一元线性回归模型,以及年份对于全球温度的一元线性回归,可以看出,线性模型符合数据趋势,相比之下年份与CO2排放量的模型拟合表现更好。

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

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

相关文章

抢跑预制菜,双汇发展转守为攻?

懒&#xff0c;懒出新风口&#xff0c;预制菜竟成了年轻人新时代的“田螺神话”&#xff1f; 《2022年中国预制菜产业发展白皮书》数据显示&#xff0c;2022年全国预制菜的市场规模是4196亿元人民币&#xff0c;到2026年可以突破万亿大关。 预制菜的火爆显而易见&#xff0c;…

ELK日志收集系统集群实验(5.5.0版)

目录 前言 一、概述 二、组件介绍 1、elasticsearch 2、logstash 3、kibana 三、架构类型 四、ELK日志收集集群实验 1、实验拓扑 2、在node1和node2节点安装elasticsearch 3、启动elasticsearch服务 4、在node1安装elasticsearch-head插件 5、测试输入 6、node1服…

【LeetCode题目详解】第八章 贪心算法 part06 738.单调递增的数字 968.监控二叉树 (day37补)

本文章代码以c为例&#xff01; 一、力扣第738题&#xff1a;单调递增的数字 题目&#xff1a; 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数…

嵌入式技术

嵌入式技术 嵌入式微处理器体系结构嵌入式微处理器分类多核处理器嵌入式软件嵌入式系统的组成嵌入式系统的特性 嵌入式技术和计算机网络 超纲的内容很多 这个课件只包含一半的分 其他的分看真题 嵌入式微处理器体系结构 将指令存储器和数据存储器合并在一起的结构 处于同一个存…

搭建一个你的文件共享站

说起文件共享&#xff0c;类似文件站这样的功能。在很久之前我使用过用apache httpd这个方案&#xff0c;这个的话就是太过于简单了。当然是满足需求的&#xff08;又不是不能用&#xff09; 今天来分享一个开源的文件共享平台。Pingvin Share 作者的github地址&#xff1a;ht…

面试了38位Java候选人之后,我总结出了他们关于面试中的16条通病

都说现在Java面试卷&#xff0c;前段时间项目招人的时候&#xff0c;我刚好就作为面试官面试了一些人 在整个面试的过程中&#xff0c;我就发现了一些关于面试的通病 所以呢&#xff0c;趁着这次金&#xff08;铜&#xff09;九银&#xff08;铁&#xff09;十的机会&#xf…

C++用于算法题中简化代码的冷门函数与类模板集合(持续更新中~)

1.accumulate ①求和&#xff1a; 第三个参数作为初始值&#xff0c;将区间[first, end)的值相加&#xff0c;返回初始值加上区间总和的值。 需要注意的是&#xff0c;如果总和超出区间中数的类型范围&#xff0c;可以将第三个参数强转成64位的long long类型 #include <iost…

CentOS 8 安装 Code Igniter 4

在安装好LNMP运行环境基础上&#xff0c;将codeigniter4文件夹移动到/var/nginx/html根目录下&#xff0c;浏览器地址栏输入IP/codeigniter/pulbic 一直提示&#xff1a; Cache unable to write to "/var/nginx/html/codeigniter/writable/cache/". 找了好久&…

企业数字化转型有没有通用的路径和准则?

数字化转型是利用数字技术从根本上改变企业运营方式并向客户提供价值的过程。它涉及将数字技术集成到组织活动的各个方面&#xff0c;从客户交互到内部流程。虽然数字化转型的具体方法可能会根据组织的目标、行业和现有基础设施而有所不同&#xff0c;但有一些通用路径和指南可…

异常的捕获和处理

目录 一、异常 1.异常概述 1.1认识异常 1.2Java异常体系结构 2.Java异常处理机制 2.1异常处理 2.2捕获异常 2.2.1使用try-catch捕获异常 2.2.2使用try-catch-finally处理异常 2.2.3使用多重catch处理异常 2.3抛出异常 2.3.1使用throws声明抛出异常 2.3.2使用throw…

小企业需不需要内部知识库?为什么都在倡导内部知识沉淀?

有多种方法可以提高员工敬业度和员工工作效率&#xff0c;从给予信任到创造积极的工作环境。但一还有一个不为人知但十分有效的方式——为员工创建良好的内部知识库。所以小企业同样需要内部知识库&#xff0c;以下是为什么倡导内部知识沉淀的理由&#xff1a; 知识积累与传承…

Http 1.0 1.1 2.0 3.0 版本差别

Http 1.0 发布年份&#xff1a;1996 非官方标准 短链接&#xff1a;每一次请求都对应一次TCP的连接与释放 开销大&#xff1a;每次请求都要TCP的连接与释放队头阻塞&#xff1a;每次请求都必须等上一次请求获得响应之后&#xff0c;才可以发送&#xff1b;效率低下 缓存&…

理论转换实践之keepalived+nginx实现HA

背景&#xff1a; keepalivednginx实现ha是网站和应用服务器常用的方法&#xff0c;之前项目中单独用nginx实现过负载均衡和服务转发&#xff0c;keepalived一直停留在理论节点&#xff0c;加之最近工作编写的一个技术文档用到keepalived&#xff0c;于是便有了下文。 服务组件…

Linux系统编程:线程同步及生产与消费者模型

目录 一. 线程同步的概念及功能 二. 线程同步的实现方法 2.1 条件变量相关函数 2.2 线程同步demo代码 三. 生成与消费者模型 3.1 生产与消费者模型的概念 3.2 生产与消费者模型实现代码 四. 总结 一. 线程同步的概念及功能 为了了解线程同步的概念及实现的功能&#xf…

Revit SDK:PointCurveCreation 创建点来拟合曲线

前言 这个例子通过留个例子来展示如何通过点来拟合曲线或者曲面。 内容 PointsParabola 生成抛物线的核心逻辑&#xff1a; double yctr 0; XYZ xyz null; ReferencePoint rp null; double power 1.2; while (power < 1.5){double xctr 0;double zctr 0;while (…

数据集学习笔记(七):不同任务数据集的标签介绍(包含目标检测、图像分割、行为分析)

文章目录 一、目标检测1.1 TXT1.2 COCO1.3 XML 二、图像分割2.1 json2.1 TXT2.1.1 json转txt 三、行为分析3.1 TXT3.2 JSON 一、目标检测 1.1 TXT 每行表示&#xff08;类别&#xff0c;中心x相对坐标&#xff0c;中心y相对坐标&#xff0c;相对宽度、相对高度&#xff09; 1…

FFmpeg4.3.1+h264在windows下编译与VS2017项目集成

前言 在Android音视频开发中&#xff0c;网上知识点过于零碎&#xff0c;自学起来难度非常大&#xff0c;不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》&#xff0c;结合我自己的工作学习经历&#xff0c;我准备写一个音视频系列blog。本文是音视频系…

python spyder环境配置

首先安装python&#xff0c;配置环境变量等等 其次 pip install spyder 安装 spyder 最后启动 spyder&#xff0c;cmd下 执行 spyder&#xff0c;就打开了 调试下面的代码看看是否是系统的python import sys print(sys.executable) print(sys.path) 工具-偏好-python调试器 …

QT(8.30)常用类与组件,实现登录界面

1.作业&#xff1a; 完成一个登录界面(图片未附带): 头文件: #ifndef WIDGET_H #define WIDGET_H#include <QWidget>#include <QLineEdit>//行编辑器#include<QIcon>//图标#include<QLabel>//标签#include<QPushButton>//按钮#include<QIc…

【pyqt5界面化工具开发-13】QtDesigner功能择优使用

目录 0x00 前言&#xff1a; 一、完成基本的布局 二、其他功能的使用 三、在代码行开发 0x00 前言&#xff1a; QtDesigner工具的择优使用&#xff1a; 1、他的界面开发&#xff0c;是我们主要需要使用的功能 2、他的其他功能的使用&#xff0c;有需要就可使用&#xff…