机器学习第4天:预测1立方米混凝土抗压强度
时间:2022-07-22
本文章向大家介绍机器学习第4天:预测1立方米混凝土抗压强度,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、前言
今天之所以选择这个主题是因为无意间看到另外一个博主做了这方面的预测,上一篇文章不是刚讲到多元线性回归这个点嘛,然后今天本来打算就这个点进行延伸,写一点相关知识点,然后觉得这个案例挺合适的,就准备拿它来进行扩展了。
然而,今天一天都栽在这上面了。事情是这样的,我依照上一篇文章的步骤,依次导入数据、整理数据、探究各个因素之间的关系。在可视化这步时却发现发现影响混凝土抗压强度的八个因素与它本身并不构成线性关系(查阅相关资料后证明这些因素与混凝土抗压强度是存在线性关系的)。
然后,一整天都在找原因,因为自己也正在学习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天:预测汽车的燃油效率】------
- 从Java的类型转换看MySQL和Oracle中的隐式转换(二)(r6笔记第68天)
- R包—iGraph
- 深度学习中 GPU 和显存分析
- 数据库SQL优化大总结1之- 百万级数据库优化方案
- Golang语言社区--LollipopGO开源项目搭建商城路由分发
- Shapes and line types for R
- Python基本常用包整理(data analysis and machine learning),附查询包版本语句
- 一次 PyTorch 的踩坑经历,以及如何避免梯度成为NaN
- 递归与伪递归区别,Python 实现递归与尾递归
- N元分词算法
- 基于典型相关分析的词向量
- 分享一波关于做 Kaggle 比赛,Jdata,天池的经验,看完我这篇就够了。
- system表空间不足的问题分析(r6笔记第66天)
- 挑战数据结构和算法面试题——最大间隔
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 详解 MySQL 基准测试和sysbench工具
- 第六天:网络处理(anet部分)-- redis源码慢慢学,慢慢看【redis6.0.6】
- python爬王者荣耀壁纸
- 搞定三大神器之 Python 装饰器
- 当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?请求映射器篇
- rabbitpy使用purge不生效
- Springboot读取自定义属性之集合(list,数组)
- 被遗忘的 10 个Linux命令,很实用!
- Nginx配置中一个不起眼字符"/"的巨大作用,失之毫厘谬以千里
- 当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?SpringMVC视图处理器与视图篇章【终章】
- 求求你,别再开发的时候一用redis分布式锁,就急着去复制粘贴了!lua脚本的实现思路
- 全网最详细的 K8s Service 不能访问排查流程
- 团体程序设计天梯赛-练习集 L1-001 Hello World
- 团体程序设计天梯赛-练习集 L1-002 打印沙漏
- 团体程序设计天梯赛-练习集 L1-003 个位数统计