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

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

在这里插入图片描述

引言:

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

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

文章目录

  • 机器学习技术(五)——有监督学习之线性回归算法实操
    • 一、线性回归算法实操
      • 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  2995Year  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.mzph.cn/news/65596.shtml

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

相关文章

安防监控/视频汇聚平台EasyCVR调用rtsp地址返回的IP不正确是什么原因?

安防监控/云存储/磁盘阵列存储/视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RT…

docker 笔记2 Docker镜像和数据卷

参考&#xff1a; 1.镜像是什么&#xff1f;&#xff08;面试题&#xff09; 是一种轻量级、可执行的独立软件包&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文…

算法笔记——路径问题

在引入介绍如何写一个算法的时候&#xff0c;我们先引入一个题作为例子 1137. 第 N 个泰波那契数 - 力扣&#xff08;LeetCode&#xff09; 作为刚开始学习算法的我们&#xff0c;看到这个题目的时候&#xff0c;应该想好以下的问题&#xff1a; 1.状态表示 我们要用什么来表…

Windows7安装SSH客户端的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

SQL sever中库管理

目录 一、创建数据库 1.1库界面方式 1.2SQL命令方式 二、修改数据库 2.1库界面方式 2.2SQL命令方式 三、删除数据库 3.1库界面方式 3.2SQL命令方式 四、附加和分离数据库 4.1附加和分离数据库概述 4.2作用 4.3附加和分离数据库方法 4.4示例 一、创建数据库 1.1库…

第 3 章 栈和队列 (循环队列)

1. 背景说明 和顺序栈相类似&#xff0c;在队列的顺序存储结构中&#xff0c;除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外&#xff0c; 尚需附设两个指针 front 和 rear 分别指示队列头元素及队列尾元素的位置。约定&#xff1a;初始化建空队列时&#x…

XmlDocument.SelectNodes 不起作用

今天采用Xpath读取Xml节点&#xff0c;怎么都读不出。 问题分析&#xff1a; 错误代码如下&#xff1a; XmlDocument xmlD new XmlDocument();xmlD.PreserveWhitespace true;xmlD.LoadXml(xStr);xmlD.SelectNodes("job-scheduling-data/schedule/job");经排查 do…

Python学习笔记——从面试题出发学习Python

Python学习笔记——从面试题出发学习Python Python学习笔记——从面试题出发学习Python1. 可变数据类型与不可变数据类型&#xff0c;深拷贝与浅拷贝&#xff0c;函数参数的传递机制1.1 变量与对象1.2 可变数据类型与不可变数据类型1.3 深拷贝与浅拷贝1.4 函数参数的传递机制1.…

Matlab(画图初阶)

目录 1.plot()函数 2. hold(添加新绘图是否保留旧绘图) 3. Plot Style 3.1 线型 3.2 标记 3.3 颜色 ​编辑 4. legend() 5.X 、Y and Title&#xff1f; 6. Text()和annotation() 7.line(创建基本线条) 7.1 基本语法 7.2 指定线条属性 7.3 更改线条属性 8.图像属性 8.1 …

c++入门一

参考&#xff1a;https://www.learncpp.com/cpp-tutorial/ When you finish, you will not only know how to program in C, you will know how NOT to program in C, which is arguably as important. Tired or unhappy programmers make mistakes, and debugging code tends…

软考高级架构师——6、软件架构设计

像学写文章一样&#xff0c;在学会字、词、句之后&#xff0c;就应上升到段落&#xff0c;就应追求文章的“布局谋 篇”&#xff0c;这就是架构。通俗地讲&#xff0c;软件架构设计就是软件系统的“布局谋篇”。 人们在软件工程实践中&#xff0c;逐步认识到了软件架构的重要性…

HarmonyOS Codelab 优秀样例——购物应用,体验一次开发多端部署魅力

一. 样例介绍 本篇Codelab基于自适应布局和响应式布局&#xff0c;实现购物应用在手机、折叠屏、平板不同屏幕尺寸设备上按不同设计显示。通过三层工程结构组织代码&#xff0c;实现一次开发&#xff0c;多端部署 。 手机运行效果如图所示&#xff1a; 折叠屏运行效果图&#x…

C语言:大小端字节序存储

一、大小端字节序存储介绍 大端字节序存储模式&#xff1a;把一个数据低位字节处的数据存放在高地址处&#xff0c;数据高位字节处的数据存放在低地址处 小端字节序存储模式&#xff1a;把一个数据低位字节处的数据存放在低地址处&#xff0c;数据高位字节处的数据存放在高地址…

MATLAB中isequal函数转化为C语言

背景 有项目算法使用matlab中isequal函数进行运算&#xff0c;这里需要将转化为C语言&#xff0c;从而模拟算法运行&#xff0c;将算法移植到qt。 MATLAB中isequal简单介绍 语法 tf isequal(A,B) tf isequal(A1,A2,...,An) 说明 如果 A 和 B 等效&#xff0c;则 tf is…

【Python】PySpark 数据计算 ⑤ ( RDD#sortBy方法 - 排序 RDD 中的元素 )

文章目录 一、RDD#sortBy 方法1、RDD#sortBy 语法简介2、RDD#sortBy 传入的函数参数分析 二、代码示例 - RDD#sortBy 示例1、需求分析2、代码示例3、执行结果 一、RDD#sortBy 方法 1、RDD#sortBy 语法简介 RDD#sortBy 方法 用于 按照 指定的 键 对 RDD 中的元素进行排序 , 该方…

用 ChatGPT 写代码太省时间了

几个月前&#xff0c;我们聊过陶哲轩使用 ChatGPT 辅助解决数学问题。当时&#xff0c;他觉得虽然测试结果不太令人满意&#xff0c;但也并没有对 ChatGPT 持完全否定的态度。他觉得&#xff0c;像 ChatGPT 这类大型语言模型在数学中可以用来做一些半成品的语义搜索工作&#x…

(超简单)将图片转换为ASCII字符图像

将一张图片转换为ASCII字符图像 原图&#xff1a; 效果图&#xff1a; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileWriter; import java.io.IOException;public class ImageToASCII {/*** 将图片转换为A…

保姆级教程之SABO-VMD-SVM的西储大学轴承诊断

之前写过一篇优化核极限学习机的轴承诊断&#xff0c;今天再出一期基于SVM的轴承诊断。 依旧是包含了从数据处理&#xff0c;到减法优化器SABO算法优化VMD参数&#xff0c;再到支持向量机的故障诊断&#xff0c;实现故障诊断的全流程&#xff0c;其他类型的故障诊断均可参考此流…

阿里云对象存储oss-文件上传过程详解(两种方式)

阿里云对象存储oss-文件上传过程详解{两种方式} 方式一(最新代码,时间:2023/8/27)(1)如何配置系统变量(2)完整代码 方式二(跟黑马最新教程同代码)(1)在复制下来的代码中(2)完整代码 方式一(最新代码,时间:2023/8/27) 问题:需要配置系统变量才能够使用 (1)如何配置系统变量 以wi…

服务器挂机赚钱之Traffmonetizer教程挂机,利用闲置的Vps赚钱

互联网VPS赚钱的项目traffmonetizer挂机&#xff0c;原理就是traffmonetizer通过共享闲置的带宽售卖给平台&#xff0c;然后平台将产生的收益就归你。如果你有闲置的vps服务器都可以通过traffmonetizer挂机赚钱。 VPS赚钱开始注册 实话实说吧&#xff0c;这个就是来拉人头的&…