多元线性回归实例--预测1立方米混凝土抗压强度

news/2025/1/1 12:19:33/

文章目录

    • 一、前言
    • 二、前期准备工作
      • 1.导入数据
      • 2.探究关系
    • 三、多元线性回归
      • 1.训练模型
      • 2.计算得分
      • 3.可视化预测结果

------【机器学习第1天:线性回归(代码篇)】------
------【机器学习第2天:线性回归(理论篇)】------
------【机器学习第3天:预测汽车的燃油效率】------


一、前言

今天之所以选择这个主题是因为无意间看到另外一个博主做了这方面的预测,上一篇文章不是刚讲到多元线性回归这个点嘛,然后今天本来打算就这个点进行延伸,写一点相关知识点,然后觉得这个案例挺合适的,就准备拿它来进行扩展了。

然而,今天一天都栽在这上面了。事情是这样的,我依照上一篇文章的步骤,依次导入数据、整理数据、探究各个因素之间的关系。在可视化这步时却发现发现影响混凝土抗压强度的八个因素与它本身并不构成线性关系(查阅相关资料后证明这些因素与混凝土抗压强度是存在线性关系的)。
在这里插入图片描述
然后,一整天都在找原因,因为自己也正在学习ML的相关知识,所以就对自己产生了怀疑是不是自己的知识环节出现了问题呢,反复推理验证后,总结了如下几点:

  • 1.线性回归模型的公式如下,如果某个值(f)能通过线性回归模型来预测,那么它必然和它的影响因素成线性关系。
    在这里插入图片描述
  • 2.在线性关系探究的过程中若显示为散点形式或其他其他非线性形式,可能是由于该值与多个因素有关联加上数据量较少,扰乱了我们的视线。下图可以明显看出1立方米混凝土抗压强度在185、195、205、230处是受到除水分之外的其他因素的干扰,加上我这次数据量也仅1030条,让原本应该为线状散点图呈现了下面的样子
    在这里插入图片描述
  • 3.在关系探索中,如果可以尽量保持单一变量,比如上面我就应该保持除水分外其它因素(矿渣、煤灰等等)的不变。

心酸的一天,下面来看看我今天的代码吧

二、前期准备工作

1.导入数据

import pandas as pd
import matplotlib.pyplot as plt
"""
Cement:                       水泥  (单位:千克)
Blast Furnace Slag:           矿渣  (单位:千克)
Fly Ash:                      煤灰  (单位:千克)
Water:                        水    (单位:千克)
Superplasticizer:             塑化剂(单位:千克)
Coarse Aggregate:             粗颗粒(单位:千克)
Fine Aggregate:               细颗料(单位:千克)
Age:                          天数  (已经使用的天数)
Concrete compressive strength:1立方米混凝土抗压强度
大家拿到数据后注意观察数据头
"""
dataframe = pd.read_excel('../data/Concrete_Data.xls')
dataframe.head(5)

在这里插入图片描述

2.探究关系

import numpy as np#设置中文显示
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']fig = plt.figure(figsize = (13,17))
#调整子图间距
plt.subplots_adjust(wspace =0.1, hspace =0.4)
ax1 = fig.add_subplot(421)
ax2 = fig.add_subplot(422)
ax3 = fig.add_subplot(423)
ax4 = fig.add_subplot(424)
ax5 = fig.add_subplot(425)
ax6 = fig.add_subplot(426)
ax7 = fig.add_subplot(427)
ax8 = fig.add_subplot(428)
ax1.scatter(dataframe['Blast Furnace Slag'], dataframe['Concrete compressive strength'], alpha=0.3)
ax1.set_title('1立方米混凝土抗压强度与矿渣含量之间的关系')
ax2.scatter(dataframe['Fly Ash'], dataframe['Concrete compressive strength'], alpha=0.3)
ax2.set_title('1立方米混凝土抗压强度与碳灰含量之间的关系')
ax3.scatter(dataframe['Water'], dataframe['Concrete compressive strength'], alpha=0.3)
ax3.set_title('1立方米混凝土抗压强度与水分含量之间的关系')
ax4.scatter(dataframe['Superplasticizer'], dataframe['Concrete compressive strength'], alpha=0.3)
ax4.set_title('1立方米混凝土抗压强度与塑化剂含量之间的关系')
ax5.scatter(dataframe["Coarse Aggregate"], cars['Concrete compressive strength'], alpha=0.3)
ax5.set_title('1立方米混凝土抗压强度与粗颗粒含量之间的关系')
ax6.scatter(dataframe["Fine Aggregate"], cars['Concrete compressive strength'], alpha=0.3)
ax6.set_title('1立方米混凝土抗压强度与细颗粒含量之间的关系')
ax7.scatter(dataframe["Age"], cars['Concrete compressive strength'], alpha=0.3)
ax7.set_title('1立方米混凝土抗压强度与时间之间的关系')
ax8.scatter(dataframe["Cement"], cars['Concrete compressive strength'], alpha=0.3)
ax8.set_title('1立方米混凝土抗压强度与水泥质量之间的关系')

在这里插入图片描述
在这里插入图片描述

三、多元线性回归

1.训练模型

from sklearn.linear_model import LinearRegression#初始化模型
mul_LR_model = LinearRegression()#拟合模型
mul_LR_model.fit(dataframe[['Cement','Blast Furnace Slag','Fly Ash','Water','Superplasticizer','Coarse Aggregate','Fine Aggregate','Age']], dataframe['Concrete compressive strength'])
#预测
dataframe['预测值'] = mul_LR_model.predict(dataframe[['Cement','Blast Furnace Slag','Fly Ash','Water','Superplasticizer','Coarse Aggregate','Fine Aggregate','Age']])
#显示
dataframe.head(5)

在这里插入图片描述

2.计算得分

mul_score = mul_LR_model.score(dataframe[['Cement','Blast Furnace Slag','Fly Ash','Water','Superplasticizer','Coarse Aggregate','Fine Aggregate','Age']], dataframe['Concrete compressive strength'])
mul_score
"""
得分为:0.6154647342687214
"""

3.可视化预测结果

fig = plt.figure(figsize = (16,8))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)
ax1.scatter(dataframe['Cement'], dataframe['Concrete compressive strength'], c='blue', alpha=0.3)
ax1.scatter(dataframe['Cement'], dataframe['预测值'], c='red', alpha=0.3)
ax1.set_title('水泥')
ax2.scatter(dataframe["Blast Furnace Slag"], dataframe['Concrete compressive strength'], c='blue', alpha=0.3)
ax2.scatter(dataframe["Blast Furnace Slag"], dataframe['预测值'], c='red', alpha=0.3)
ax2.set_title('矿渣')
ax3.scatter(dataframe['Fly Ash'], dataframe['Concrete compressive strength'], c='blue', alpha=0.3)
ax3.scatter(dataframe['Fly Ash'], dataframe['预测值'], c='red', alpha=0.3)
ax3.set_title('煤炭')
ax4.scatter(dataframe['Water'], dataframe['Concrete compressive strength'], c='blue', alpha=0.3)
ax4.scatter(dataframe['Water'], dataframe['预测值'], c='red', alpha=0.3)
ax4.set_title('水')
plt.show() 

在这里插入图片描述


------【机器学习第1天:线性回归(代码篇)】------
------【机器学习第2天:线性回归(理论篇)】------
------【机器学习第3天:预测汽车的燃油效率】------


http://www.ppmy.cn/news/696233.html

相关文章

oracle 数据立方_关于在Oracle 数据库存储m³(立方米)

--------------注意:如下操作是在RHEL的VNC中执行的,并不是在secureCRT中执行的。------------ --------------原因:若是在secureCRT执行,m会显示成:m鲁,见如下的截图,是啥原因我还没研究-- 如下是实验的过程&#xff…

标准立方米的单位换算

换算mol与Nm3 1标准立方米(符号为Nm3)表示标况下(0℃,101325Pa)气体占据1立方米。 由于标况下每mol气体的体积为22.4L,因此Nm3和摩尔是相对应的单位。 相当于 1 N m 3 1000 N L 1000 / 22.4 m o l 1 Nm^31000NL1000/22.4 mol 1…

html显示立方米符号,怎么打立方米符号m³ 打出m³立方米符号的方法

首先,我们打开WORD,启动WORD的方法有很多种,下面先简单介绍下有哪几种常用的方法咯,希望大家不要为小编的罗嗦感到烦琐。嘿嘿。 1、开始,运行,输入命令winword后回车,便可启动WORD; …

html显示立方米符号,分享立方米符号怎么打 多种立方米符号打出方法

在用编写数学公式时,难免会遇见一些罕见的特殊符号,而这些符号几乎从来没用过,你都知道如何输入吗?比如“立方米符号”不少朋友初次遇到此类问题多数在键盘上找不到立方米字符,其实立方米字符要打出来是需要小小技巧的…

html显示立方米符号,立方米符号怎么打

在工作中,难免会遇见一些罕见的特殊符号,而这些符号几乎从来没用过,你都知道如何输入吗?比如立方米符号怎么打?立方米符号在数学中用的很频繁,很多新手朋友不知道怎么用电脑键盘打出来。现在分享几种方法,教你轻松打出立方米符号。 立方米符…

ElasticSearch 布尔查询

布尔查询可以组合前边的一些查询,比如组合filter和must/must_not等等 它的目的就是提高性能,比如先通过filter过滤一些数据之后,然后再计算评分,这样节省一些评分时间 POST test_goods/_doc {"name": "apple watch","price": 6999,"date&q…

HPM6750系列--第四篇 搭建Visual Studio Code开发调试环境

一、目的 在之前的博客中《HPM6750系列--第二篇 搭建Ubuntu开发环境》、《HPM6750系列--第三篇 搭建MACOS编译和调试环境》我们分别介绍了Ubuntu和MacOS系统上基于命令行的开发环境的搭建过程,包括环境准备、编译、调试过程,整个过程稍微有些繁琐可能有些…

MySQL复合查询

目录 一、多表查询 二、自连接 三、子查询 3.1 单行子查询 3.2 多行子查询 3.3 多列子查询 3.4 在from子句中使用子查询 四、合并查询 一、多表查询 实际开发中往往需要将多张表关联起来进行查询,即多表查询在进行多表查询时,只需将多张表的表名…