工业数学模型——钢坯力学性能预测(二)

news2024/11/26 13:57:07

1、工业场景

无论使用什么样的钢材,其机械性能都非常重要,主要性能通常是屈服强度和抗拉强度、延伸率和断面收缩率。力学性能可以通过试验室试验评估,使用钢材成品试样在类似的轧制条件下进行拉力试验。本文旨在利用数学模型构建了一种基于工业大数据为基础的钢坯力学性能预测模型。钢坯力学性能预测对于缩短产品研发周期,提高质量稳定性,提高生产效率,减排降耗等方面具有重要显示意义。

2、数学模型

钢坯力学性能主要受自身的化学成分以及生产过程控制参数的影响,即各种微量金属成分的含量、温度控制以及轧制厚度等工艺控制参数。由于各个钢种成分不一样,影响钢卷最终性能的工艺参数也不一样。常规来说主要影响其性能的为C、Si、Mn、S、P元素含量以及终轧温度、卷取温度等有关。我们将这些与产品性能相关的参数以及实际检测性能结果关联起来,建立性能预测模型,研究模型实时预测产品的性能部分替代传统取样方法的可行性。

本次研究主要采用随机森林算法。随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。

随机森林随机的主要是2个方面,一个是随机选取特征,一个是随机样本。比如我们有N条数据,每条数据M个特征,随机森林会随机X条选取样本数据和Y个特征,然后组成多个决策树。

随机森林的生成方法:

1.从样本集中通过重采样的方式产生n个样本。

2.假设样本特征数目为a,对n个样本选择a中的k个特征,用建立决策树的方式获得最佳分割点。

3.重复m次,产生m棵决策树。

4.多数投票机制来进行预测。

通过对历史数据分析,选取了在炉时长、部分在炉取样点温度、粗轧出口温度、精轧入口温度、精轧出口温度、冷却水温度、卷取温度等42个特征值,进行钢坯伸展性、延伸率、弯曲折断3个性能值进行预测。

3、数据清洗

本次研究以钢坯型号SPHC为例,通过对采集数据进行异常值处理最终获取3325条数据用于本次研究。
在这里插入图片描述

4、模型构建

from sklearn.ensemble import  RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import pandas as pd
import numpy as np



def open_excel():
    """
    打开数据集,进行数据处理
    :return:特征集数据、标签集数据
    """
    read_data = pd.read_csv(f'D:\\LIHAOWORK\\1.csv')
    labels = read_data.iloc[0:,[7, 9, 12]].to_numpy()
    labels = np.float64(labels)
    features = read_data.iloc[0:,[2, 3, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53]].to_numpy()
    features = np.float64(features)
    return features, labels


# 加载数据
X, y = open_excel()

# 处理nan值
#for idx, val in enumerate(X):
    #is_nan = np.isnan(val)
    #if(is_nan.any()) :
        #print(val)
        #print(idx)

# 样本分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)

# 建立模型
rf = RandomForestRegressor(n_estimators=10)

# 训练模型
rf.fit(X_train, y_train)

# 预测结果
y_pred = rf.predict(X_test)
print("预测结果为:", y_pred[:10])
print("实际结果为:", y_test[:10])
# 模型评估
print("MSE:", mean_squared_error(y_test, y_pred))

RandomForestRegressor 参数

def __init__(
        self,
        n_estimators=100,
        *,
        criterion="squared_error",
        max_depth=None,
        min_samples_split=2,
        min_samples_leaf=1,
        min_weight_fraction_leaf=0.0,
        max_features=1.0,
        max_leaf_nodes=None,
        min_impurity_decrease=0.0,
        bootstrap=True,
        oob_score=False,
        n_jobs=None,
        random_state=None,
        verbose=0,
        warm_start=False,
        ccp_alpha=0.0,
        max_samples=None,
    ):

其中关于决策树的参数:

criterion: “mse”来选择最合适的节点。
max_features: 选择最适属性时划分的特征不能超过此值。
当为整数时,即最大特征数;当为小数时,训练集特征数*小数;
if “auto”, then max_features=sqrt(n_features).
If “sqrt”, thenmax_features=sqrt(n_features).
If “log2”, thenmax_features=log2(n_features).
If None, then max_features=n_features.

max_depth: (default=None)设置树的最大深度,默认为None,这样建树时,会使每一个叶节点只有一个类别,或是达到min_samples_split。

min_samples_split: 根据属性划分节点时,每个划分最少的样本数。

min_samples_leaf: 叶子节点最少的样本数。

max_leaf_nodes: (default=None)叶子树的最大样本数。

min_weight_fraction_leaf: (default=0) 叶子节点所需要的最小权值

verbose: (default=0) 是否显示任务进程

关于随机森林特有的参数:

n_estimators=10: 决策树的个数,越多越好,但是性能就会越差,至少100左右(具体数字忘记从哪里来的了)可以达到可接受的性能和误差率。

bootstrap=True: 是否有放回的采样。

oob_score=False: oob(out of band,带外)数据,即:在某次决策树训练中没有被bootstrap选中的数据。多单个模型的参数训练,我们知道可以用cross validation(cv)来进行,但是特别消耗时间,而且对于随机森林这种情况也没有大的必要,所以就用这个数据对决策树模型进行验证,算是一个简单的交叉验证。性能消耗小,但是效果不错。

n_jobs=1: 并行job个数。这个在ensemble算法中非常重要,尤其是bagging(而非boosting,因为boosting的每次迭代之间有影响,所以很难进行并行化),因为可以并行从而提高性能。1=不并行;n:n个并行;-1:CPU有多少core,就启动多少job。

warm_start=False: 热启动,决定是否使用上次调用该类的结果然后增加新的。

min_impurity_decrease :一个阈值,表示一个节点分裂的条件是:如果这次分裂纯度的减少大于等于这这个值.。

random_state :如果是int数值表示它就是随机数产生器的种子.如果指定RandomState实例,它就是随机产生器的种子.如果是None,随机数产生器是np.random所用的RandomState实例; [int, RandomState instance or None, optional (default=None)] 

5.网格搜索交叉验证进行参数调优。

(1)调参n_estimators

from sklearn.ensemble import  RandomForestRegressor
from sklearn.model_selection import train_test_split, cross_val_score
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np



def open_excel():
    """
    打开数据集,进行数据处理
    :return:特征集数据、标签集数据
    """
    read_data = pd.read_csv(f'D:\\LIHAOWORK\\1.csv')
    labels = read_data.iloc[0:,[7, 9, 12]].to_numpy()
    labels = np.float64(labels)
    features = read_data.iloc[0:,[2, 3, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53]].to_numpy()
    features = np.float64(features)
    return features, labels


# 加载数据
X, y = open_excel()

# 处理nan值
#for idx, val in enumerate(X):
    #is_nan = np.isnan(val)
    #if(is_nan.any()) :
        #print(val)
        #print(idx)

# 样本分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)


mse_list = []
for i in range(0,200,10):
    rf = RandomForestRegressor(n_estimators=i+1)
    mse = cross_val_score(rf,X_train,y_train,cv=10,scoring='neg_mean_squared_error')
    print(mse.mean())
    mse_list.append(mse.mean())

plt.figure(figsize=[20,5])
plt.plot(range(1,201,10), mse_list)
plt.show()

运行结果
在这里插入图片描述在这里插入图片描述

均方误差数学上永远为正,但是sklearn当中使用均方误差作为评判标准时,却是计算”负均方误差“即 neg_mean_squared_error,所以这里是mse越接近0越好。随着决策树的增加,mes越接近0。在这里我们选择n_estimators=200,后面有时间可以再跑一下200-500的曲线。

(2)调参max_depth

from sklearn.ensemble import  RandomForestRegressor
from sklearn.model_selection import train_test_split, cross_val_score
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np



def open_excel():
    """
    打开数据集,进行数据处理
    :return:特征集数据、标签集数据
    """
    read_data = pd.read_csv(f'D:\\LIHAOWORK\\1.csv')
    labels = read_data.iloc[0:,[7, 9, 12]].to_numpy()
    labels = np.float64(labels)
    features = read_data.iloc[0:,[2, 3, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53]].to_numpy()
    features = np.float64(features)
    return features, labels


# 加载数据
X, y = open_excel()

# 处理nan值
#for idx, val in enumerate(X):
    #is_nan = np.isnan(val)
    #if(is_nan.any()) :
        #print(val)
        #print(idx)

# 样本分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)


mse_list = []
for i in range(10,30,1):
    rf = RandomForestRegressor(n_estimators=200,max_depth=i)
    mse = cross_val_score(rf,X_train,y_train,cv=10,scoring='neg_mean_squared_error')
    print(mse.mean())
    mse_list.append(mse.mean())

plt.figure(figsize=[20,5])
plt.plot(range(10,30,1), mse_list)
plt.show()

在这里插入图片描述在这里插入图片描述考虑到整体性能本次max_depth选择13

(3)剩余参数大家有兴趣可以调一下。在此就不一个一个调了。

6.训练

from sklearn.ensemble import  RandomForestRegressor
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import mean_squared_error
import pandas as pd
import numpy as np



def open_excel():
    """
    打开数据集,进行数据处理
    :return:特征集数据、标签集数据
    """
    read_data = pd.read_csv(f'D:\\LIHAOWORK\\1.csv')
    labels = read_data.iloc[0:,[7, 9, 12]].to_numpy()
    labels = np.float64(labels)
    features = read_data.iloc[0:,[2, 3, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53]].to_numpy()
    features = np.float64(features)
    return features, labels


# 加载数据
X, y = open_excel()

# 处理nan值
#for idx, val in enumerate(X):
    #is_nan = np.isnan(val)
    #if(is_nan.any()) :
        #print(val)
        #print(idx)

# 样本分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)

# 建立模型
rf = RandomForestRegressor(n_estimators=200,max_depth=13)

# 训练模型
rf.fit(X_train, y_train)

# 预测结果
y_pred = rf.predict(X_test)
print("预测结果为:", y_pred[:100])
print("实际结果为:", y_test[:100])
# 模型评估
print("MSE:", mean_squared_error(y_test, y_pred))

在这里插入图片描述最后MSE在35左右。

7.测评

伸展性预测和实际偏差在±26左右
延伸率预测和实际偏差在±4左右
弯曲折断预测和实际偏差在±23左右
本次研究比较粗糙,模型在算法和调参上整体优化的空间还是较大。
在这里插入图片描述

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

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

相关文章

生活篇——关于分期贷或信用贷的等额本息、先息后本、月利率、年利率、年利率单利的个人理解

首先我先就年利率的理解问一下各位读者2个问题。 问题1:假设你要借100000元,借一年,月利息0.2%,等额本息,那么你觉得你总共需要还多少利息?它的实际年利率约为多少? A.2400,2.4% …

智能资产管理:RFID技术与国产WMS系统的融合之路

随着信息技术的飞速发展,企业对于资产管理的需求也日益增长。传统的资产管理方法已无法满足现代企业的管理需求,因此,一种结合了RFID技术与国产WMS系统的智能资产管理方案应运而生。 RFID,即无线射频识别技术,通过无…

断裂重生:记忆是如何形成的

当形成长期记忆时,一些脑细胞会经历强烈的电活动,以至于使其DNA断裂。3月27日,一项发表于《自然》的小鼠研究表明,炎症反应开始起作用,修复这种损伤并帮助巩固记忆。 神经元在记忆形成过程中修复断裂的DNA。图片来源…

(4)(4.5) Underwater Sonar (Analog)

文章目录 前言 1 推荐硬件 2 连接和配置 3 参数说明 前言 本页详细介绍了低成本模拟水下声纳(又称"探鱼器")和数字转换器的设置,数字转换器可将模拟读数转换成 NMEA 0183,供 ardupilot 读取。这种设置可以测量船下…

如何在CentOS安装StackEdit Markdown编辑器并实现无公网IP远程访问使用

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安…

CODESYS开发教程14-指针使用

在写完《长字符串处理》以后,好长时间也没想到写什么内容好,前几天发现好像没有介绍过指针,那么今天我们的教程重点是介绍CODESYS中指针的使用。指针可以说算是C语言的精髓之一,有很多的优点和方便之处,但是同时也是个…

普通Java工程可执行JAR两种打包方式探讨

文章目录 一、需求概述二、代码结构三、运行结果四、打包设置1. 一体化可执行包2. 带外部依赖lib的可执行包 五、打包运行1. 源码放送2. 打包执行3. 打包结果 一、需求概述 普通Java工程 docker-show 实现了定时打印docker应用信息,现在需要将其打包成可执行Jar部署…

SSM学习——Spring AOP与AspectJ

Spring AOP与AspectJ 概念 AOP的全称为Aspect-Oriented Programming,即面向切面编程。 想象你是汉堡店的厨师,每一份汉堡都有好几层,这每一层都可以视作一个切面。现在有一位顾客想要品尝到不同风味肉馅的汉堡,如果按照传统的方…

【LeetCode热题100】17. 电话号码的字母组合(回溯)

一.题目要求 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 二.题目难度 中等 三.输入样例 示例 1: 输入…

团体程序设计天梯赛-练习集 (L1-025 - L1-036)

天梯赛题解合集 团体程序设计天梯赛-练习集 (L1-001 - L1-012) 团体程序设计天梯赛-练习集 (L1-013 - L1-024) 团体程序设计天梯赛-练习集 (L1-025 - L1-036) 团体程序设计天梯赛-练习集 (L1-03…

树与二叉树的应用试题

01.在有n个叶结点的哈夫曼树中,非叶结点的总数是( A ). A. n-1 B. n C. 2n-1 D.2n解析:哈夫曼树中只有度为0和2的结点,在非空二…

67、yolov8目标检测和旋转目标检测算法batchsize=1/6部署Atlas 200I DK A2开发板上

基本思想:需求部署yolov8目标检测和旋转目标检测算法部署atlas 200dk 开发板上 一、转换模型 链接: https://pan.baidu.com/s/1hJPX2QvybI4AGgeJKO6QgQ?pwd=q2s5 提取码: q2s5 from ultralytics import YOLO# Load a model model = YOLO("yolov8s.yaml") # buil…

spring boot3登录开发-3(2短信验证登录/注册逻辑实现)

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途 目录 写在前面 上文衔接 内容简介 功能分析 短信验证登录实现 1.创建交互对象 用户短信登录/注册DTO 创建用户登录VO…

harmonyOS的客户端存贮

什么是客户端存贮 在harmonyOS中,客户端存贮是指将数据存贮在本地设备以供应用程序使用; 注: 和feaureAblity搭配使用,content上下文的获取依赖该API如下: // 引入: import featureAbility from ohos.ability.featureAbility;// 使用: let content featureAbility.getConten…

Git Fork后的仓库内容和原仓库保持一致

Git Fork后的仓库内容和原仓库保持一致 ①Fork原仓库内容到自己仓库 ②将项目内容下载到本地 ③使用git命令获取原仓库内容,将原仓库的最新内容合并到自己的分支上并推送 下面从第三步开始演示~ 这里以码云上的若依项目为演示项目 ③使用git命令获取原仓库内容 …

NLP重要知识点:预训练模型【核心且详细】

本资料是NLP核心知识点的ppt!!!【文章较长,建议收藏】 本节课我们学习预训练模型。 前言 我们在学习词向量的时候,应该知道了多个产生词向量的方法,包括基于矩阵(词-词共现矩阵)分解的方法、基于语言模型(word2vec)的方法、以及结合二者优点的Glove模型等其他产生词…

10kV配电室在线监控改造技术方案

摘要:目前,我国经济高速发展,社会在不断进步,国家加大了农村低压配电网络改造升级投入,低压配电网供电可靠性及供电质量得到明显提升,但低压配电网络自动化运维水平及农村电网用电安全尚处于较低水平。低压…

opejdk11 java 启动流程 java main方法怎么被jvm执行

java启动过程 java main方法怎么被jvm执行 java main方法是怎么被jvm调用的 1、jvm main入口 2、执行JLI_Launch方法 3、执行JVMInit方法 4、执行ContinueInNewThread方法 5、执行CallJavaMainInNewThread方法 6、创建线程执行ThreadJavaMain方法 7、执行ThreadJavaMain方法…

【算法刷题day14】二叉树理论基础、递归遍历、迭代遍历、统一迭代

二叉树理论基础 题目分类 二叉树的种类 无数值两种:满二叉树 和 完全二叉树 有数值:二叉搜索树 1.若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2.若它的右子树不空,则右子树上所有结点的值均大于它的根结点…

14.Python网络通信

本章讲解如何通过Python访问互联网上的资源,这也是网络爬虫技 术的基础。 1 基本的网络知识 程序员在进行网络编程前,需要掌握基本的网络知识,本节会介绍 这些内容。 1.1 TCP/IP 在网络通信中会用到一些相关协议,其中&#xf…