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

2023-10-27

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

在这里插入图片描述

引言:

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

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

一、线性回归算法实操

通过基于线性回归模型对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排放量的模型拟合表现更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • 用 Python 实现 OpenAI 余额查询功能

    大家开发完 OpenAI 的产品后经常需要关注费用情况 也有很多网站支持输入 api key 查询余额 但是 你真的敢用么 这里教大家自己用 python 写一段查询 openai key 的代码 如下 import datetime 用您
  • 技术人赚钱的9个路线

    没有轻松地路线 只是你没看见付出的光阴 明哥语录 赚钱之后的4个流向 技术是最容易变现的 只是我们都没有注意到而已 很多技术人对自己的技术价值认识不清晰 导致怀抱金砖而不知 这也就形成了那些外包平台 帮你链接资源赚取资源信息差价 其实现在个
  • C语言字符串转long long例程atoll()及long long打印

    ernest 20161129 include unistd h include fcntl h include stdio h include
  • excel服务器bom修改,勤哲Excel服务器物料清单BOM表的实现方法

    一 什么是BOM 在企业信息化进程中 经常会涉及到BOM表 BOM数据等 那么什么是BOM呢 简单的说BOM Bill of Material 就是物料清单 用计算机辅助企业生产管理 首先要使计算机能够读出企业所制造的产品构成和所有要涉及的
  • Hibernate 配置文件(hibernate.cfg.xml、hbm.xml)

    目录 Hibernate xml 1 数据库的基本信息 2 集成 C3P0 设置数据库连接池信息 3 Hibernate 基本信息 4 注册实体关系映射文件 实体关系映射文件 实体类文件名 hbm xml 1 hibernate mappi
  • Hive 删除表报错: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.

    操作Hive 的时候报错 提示如下 hive gt drop table toss1 FAILED Execution Error return code 1 from org apache hadoop hive ql exec DDLT
  • 点开软件显示从服务器返回参照,win10打开软件从服务器返回了一个参照怎么解决...

    很多网友刚升级了windows10系统的 就出现了从服务器返回了一个参照的问题 更升级了系统对出现这样的问题 很多网友不知所措 不知道该怎么办 不要急 就让win10官网小编告诉大家win10打开软件从服务器返回了一个参照解决方法吧 win
  • 学生宿舍管理系统ASP .NET CORE MVC

    学生宿舍管理系统 管理系统应设计的主要功能和数据要求 管理系统应设计的主要功能和数据要求 用户管理 将系统用户分为学生用户 类 管理员类 学生用户只能查询和修改自己的基本信息 管理员可以 使用本 系统的所有功能 学生宿舍管理 学生用户可以查
  • 简单实现x的n次方(10 分)

    简单实现x的n次方 10 分 本题要求实现一个计算x n n 0 的函数 函数接口定义 double mypow double x int n 函数mypow应返回x的n次幂的值 题目保证结果在双精度范围内 裁判测试程序样例 include
  • YOLOv3-药草识别实现

    一 标注工具 labelimg 使用工具lableimg 1 操作步骤 使用cmd进入下载目录之后 使用python lableimg进入标注工具 open选择文件之后 选择Create nRectBox进行选择区域 并且标注药草名 如下
  • 爬虫逆向学习进阶路线

    大数据时代下 爬虫技术逐渐成为一套完整的系统性工程技术 涉及的知识面广 平台多 技术越来越多样化 对抗性也日益显著 大家可以参考一下学习路线 看看自己需要对哪些知识进行补充 爬虫逆向学习路线 学习路线总结 系统提高 加密算法特征和实现 传输
  • [创业之路-51] :动态股权机制 -6- 创始团队股权比例如何分配比较合理

    创始团队股权比例如何分配 可以参考以下几个标准 提出创意并获得执行可以先分10 不能只是空点子 要执行并落地 最初召集大家一起创业的创始人可以多分5 创始人是公司主要运营负责人的额外多分5 让公司发展从0到1 增加5 20 例如建立良好的市
  • 八目云播服务器维护,LiveQing 云平台直播点播使用说明

    LiveQing 云平台直播点播使用说明 下载安装包 zip 是windows环境中使用的安装包 tar gz 是linux环境中使用的安装包 Windows下安装 说明 Windows 64位 系统 下载的安装包放置在任意一个目录下 解压
  • CSS笔记

    2 3 4 5
  • 在Spark上运行apache beam

    目录 apache beam 个人使用经验总结目录和入门指导 Java 为了方便 以下面这个名字替换的程序做简单例子 The ReplaceMyName 把Create数组里的myName替换成xxx since 2019 12 17 pu
  • [C语言]define 定义常量/宏

    1 运用define定义常量 2 运用define定义宏 1 运用define定义常量 格式 define 符号 数值 define A 100 定义后的常量 作用域在整个项目 可以跨源文件调用 2 运用define定义宏 宏与函数其实十分
  • 学习PWM——控制的关键

    目录 一 PWM的简介 1 PWM是什么 2 PWM的参数 1 PWM的频率 2 PWM的周期 3 占空比 3 PWM的原理 1 高级输出比较通道 2 通用输出比较通道 3 输出比较模式 二 PWM的结构 1 PWM的基本结构 2 参数计算
  • Blip2 文章阅读

    论文地址https arxiv org pdf 2301 12597 pdf BLIP 2 Bootstrapping Language Image Pre training with Frozen Image Encoders and L
  • 【PyTorch教程】05-如何使用PyTorch训练神经网络模型 (2022年最新)

    本期目录 使用PyTorch训练神经网络 torch autograd 1 神经网络背景 2 加载预训练模型 有重大更新 2 1 新老版本写法对比 2 2 新写法的好处 2 3 图像数据的预处理 2 4 训练模式和验证模式之间的转换 3 正
  • 机器学习技术(六)——有监督学习算法之线性回归算法实操

    机器学习技术 五 有监督学习之线性回归算法实操 引言 机器学习监督算法是一种基于已有标记数据的学习方法 通过对已知输入和输出数据的学习 建立一个模型来预测新的输入数据的输出 这种算法模仿人类的学习过程 从已有的经验中总结规律 并将其应用于新