基于机器学习的工业制造缺陷分析预测系统

news2024/12/26 19:53:11

B站视频及代码下载:基于机器学习的工业制造缺陷分析预测系统-视频-代码

1. 项目简介

        制造缺陷是工业生产过程中面临的重大挑战之一,对产品质量和生产效率产生直接影响。准确预测和分析制造缺陷的发生,可以帮助企业提高生产质量、降低成本,并优化供应链管理。通过机器学习模型分析影响制造缺陷的主要因素,能够为制造业提供有效的改进策略和预防措施,从而提升整体生产效能。本项目,我们提出了一种数据科学方法,使用包括各种生产指标、供应链因素、质量控制评估、维护计划、劳动力生产率指标、能耗模式和增材制造细节的综合数据集,利用 Xgboost建模训练,测试集预测 AUC 达到99.7%,并搭建交互式分析系统来预测制造缺陷。

基于机器学习的工业制造缺陷分析预测系统

2. 数据探索式可视化分析 

        为了更好地理解数据分布和特征之间的关系,我们首先进行了数据探索式的可视化分析。这一步骤对于发现异常值、理解数据分布以及发现潜在的模式至关重要。

        关键技术点:

  • Pandas: 用于数据处理和清洗。
  • Matplotlib: 绘制基本图表。
  • Seaborn: 进行更复杂的统计图形绘制。

2.1 数据集读取与预处理

        本数据集包含了多个与制造缺陷相关的生产参数,数据来自不同的生产批次,旨在通过机器学习模型预测制造缺陷的发生,并分析主要的影响因素。数据集包括了生产量、生产成本、供应商质量、交货延迟、缺陷率、质量评分、维护时间、停机时间百分比、库存周转率等多个变量。

df = pd.read_csv("./manufacturing_defect_dataset.csv")
## 列名汉化
df.rename(columns={
    "ProductionVolume":"生产量",
    "ProductionCost":"生产成本",
    "SupplierQuality":"供应商质量评分",
    "DeliveryDelay":"交货延迟",
    "DefectRate":"缺陷率",
    "QualityScore":"质量评分",
    "MaintenanceHours":"维护时间",
    "DowntimePercentage":"停机时间百分比",
    "InventoryTurnover":"库存周转率",
    "StockoutRate":"缺货率",
    "WorkerProductivity":"工人生产力",\
    "SafetyIncidents":"安全事故数",
    "EnergyConsumption":"能源消耗",
    "EnergyEfficiency": "能源效率",
    "AdditiveProcessTime": "附加加工时间",
    "AdditiveMaterialCost": "附加材料成本",
    "DefectStatus": "缺陷状态"
},inplace=True)
    
df.sample(10)

2.2 类别标签数量分布

tmp = df["缺陷状态"].value_counts().to_frame().reset_index().rename(columns={"count":"数量"})

tmp["缺陷状态"] = tmp["缺陷状态"].map(lambda x:"是" if x == 1 else "否")
tmp["百分比"] = tmp["数量"].map(lambda x:round(x/tmp["数量"].sum()*100,2))

labels,values,percent = tmp["缺陷状态"].tolist(),tmp["数量"].tolist(),tmp["百分比"].tolist()

        可以看出,不存在缺陷的占 15.96%,这是一个类别非常不均衡的二分类问题,需要采用采样算法去平衡数据集的占比。

2.3 特征与目标的相关性分析

fig,ax = plt.subplots(1,1,figsize=(20, 16))
cmap = sns.diverging_palette(230, 20, as_cmap=True)
sns.heatmap(df.corr(), annot= True, cmap=cmap, vmax=.5, center=0,
            square=True, linewidths=.5, cbar_kws={"shrink": .5})
ax.set_xticklabels(labels=df.columns, rotation=90, fontsize=12)
ax.set_yticklabels(labels=df.columns, rotation=00, fontsize=12)
plt.show()

       可以看出:与观测值(工业制造缺陷)的相关性较高的特征有:生产量、缺陷率、质量评分、维护时间,其中质量评分呈现较强负相关,另外3个呈现较强的正相关,此外,其他特征与观测值的相关性不明显.

2.4 直方图和密度图上的数据分布

2.5 缺陷影响因素分析

num_columns = ['生产量', '缺陷率', '质量评分', '维护时间', '缺货率', '供应商质量评分']
plt.figure(figsize=(15, 10))
for i, column in enumerate(num_columns, 1):
    plt.subplot(3, 3, i)
    sns.boxplot(data=df, x='缺陷状态', y=column)
    plt.title(f'{column} by 缺陷')
    plt.ylabel(column if i % 3 != 1 else '') 

plt.tight_layout()
plt.show()

 

3. 样本采样均衡与扩充处理

        在处理不平衡的数据集时,数据集扩充技术显得尤为重要。不平衡数据集是指目标变量的各类别之间存在显著数量差异的数据集,在这种情况下,模型可能会偏向于多数类,导致少数类别的预测性能较差。为了解决这个问题,我们可以使用imbalanced-learn库中的两种常用方法:过采样和欠采样。

        (1)过采样 (RandomOverSampler)

        过采样是指增加少数类样本的数量,通常通过复制现有的样本或合成新的样本实现。RandomOverSampler是一种简单直接的方法,它随机重复少数类样本以平衡数据集。

        (2)欠采样 (RandomUnderSampler)

        欠采样是指减少多数类样本的数量,以平衡各类别之间的比例。RandomUnderSampler同样是一个简单直接的方法,它随机选择多数类样本的一部分,使多数类与少数类的数量相同。

        (3)结合使用过采样和欠采样

        在某些情况下,同时使用过采样和欠采样的方法可以达到更好的效果。例如,先使用RandomUnderSampler减少多数类样本的数量,然后再使用RandomOverSampler增加少数类样本的数量。

# Separate features and target variable
X = df.drop(columns=['缺陷状态'])
y = df['缺陷状态']

# Count the occurrences of each class
class_counts = y.value_counts()

# Calculate the target count for each class
target_count = min(class_counts)

#########
# 省略部分代码
#########

# Apply resampling
print('X:', X.shape)
X_over, y_over = over_sampler.fit_resample(X, y)
print('X_over:', X_over.shape)
X_resampled, y_resampled = under_sampler.fit_resample(X_over, y_over)
print('X_resampled:', X_resampled.shape)

# Concat
df_resampled = pd.concat([pd.DataFrame(X_resampled, columns=X.columns), pd.DataFrame(y_resampled, columns=['缺陷状态'])], axis=1)
df_resampled.shape

4. 基于机器学习的工业制造缺陷建模

4.1 切分出训练集、验证集和测试集

y_train_all = df_resampled['缺陷状态']
X_train_all = df_resampled.drop(columns=['缺陷状态'])

X_train, X_valid, y_train, y_valid = train_test_split(X_train_all, y_train_all, test_size=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X_train, y_train, test_size=0.1, random_state=42)

print('train: {}, valid: {}, test: {}'.format(X_train.shape[0], X_valid.shape[0], X_test.shape[0]))
train: 4410, valid: 545, test: 491

4.2 多模型预测性能对比初探

        初步选择 AdaBoost、GBT、LR、SVC、Xgboost这五类模型集成初步试验,选择性能最好的模型,以后续针对性的优化:

abc = AdaBoostClassifier()
gbc = GradientBoostingClassifier()
lgr = LogisticRegression()
svc = SVC()
xgb_clf = XGBClassifier()

models = [abc, gbc, lgr, svc, xgb_clf]

names = ["Ada Boost", "Gradient Boosting",
        "Logistic Regression", "Support Vector Machine", "XGBoost"]

def training(model):
    # 省略部分关键代码
    cm = confusion_matrix(pred, y_test)
    
    return score*100, report, cm

scores, reports, cms = [], dict(), dict()
for i, j in zip(models, names):
    score, report, cm = training(i)
    scores += [score]
    reports[j] = report
    cms[j] = cm

        可以看出,在默认参数下, XGBoost 的性能最好,达到99.39%.

4.3 XGBoost 模型优化

        通过调优XGBoost模型参数,通过验证集的预测性能进行参数调优:

df_columns = X_train.columns.values
print('===> feature count: {}'.format(len(df_columns)))

xgb_params = {
    'eta': 0.5,
    'colsample_bytree': 0.4,
    'max_depth': 8,
    # 'lambda': 2.0,
    'eval_metric': 'auc',
    'objective': 'binary:logistic',
    'nthread': -1,
    'silent': 1,
    'booster': 'gbtree'
}

dtrain = xgb.DMatrix(X_train, y_train, feature_names=df_columns)
dvalid = xgb.DMatrix(X_valid, y_valid, feature_names=df_columns)

watchlist = [(dtrain, 'train'), (dvalid, 'valid')]

model = xgb.train(dict(xgb_params),
                      dtrain,
                      evals=watchlist,
                      verbose_eval=10,
                      early_stopping_rounds=100,
                      num_boost_round=4000)
[0]	train-auc:0.87004	valid-auc:0.85053
[10]	train-auc:0.99983	valid-auc:0.99744
[20]	train-auc:1.00000	valid-auc:0.99973
[30]	train-auc:1.00000	valid-auc:0.99993
[40]	train-auc:1.00000	valid-auc:0.99997
[50]	train-auc:1.00000	valid-auc:0.99993
[60]	train-auc:1.00000	valid-auc:0.99995
[70]	train-auc:1.00000	valid-auc:0.99993
[80]	train-auc:1.00000	valid-auc:0.99992
[90]	train-auc:1.00000	valid-auc:0.99995
[100]	train-auc:1.00000	valid-auc:0.99995
[110]	train-auc:1.00000	valid-auc:0.99995
[120]	train-auc:1.00000	valid-auc:0.99995
[130]	train-auc:1.00000	valid-auc:0.99995
[138]	train-auc:1.00000	valid-auc:0.99996

4.4 特征重要程度分布

4.5 模型性能评估

4.5.1 AUC 指标评估
# predict train
predict_train = model.predict(dtrain)
train_auc = evaluate_score(predict_train, y_train)

# predict validate
predict_valid = model.predict(dvalid)
valid_auc = evaluate_score(predict_valid, y_valid)

# predict test
dtest = xgb.DMatrix(X_test, feature_names=df_columns)
predict_test = model.predict(dtest)
test_auc = evaluate_score(predict_test, y_test)

print('训练集 auc = {:.7f} , 验证集 auc = {:.7f} , 测试集 auc = {:.7f}\n'.format(train_auc, valid_auc, test_auc))
训练集 auc = 1.0000000 , 验证集 auc = 0.9999596 , 测试集 auc = 0.9971614

4.5.2 测试集预测 ROC 曲线

4.5.3 测试集预测结果混淆矩阵计算 

5. 基于机器学习的工业制造缺陷预测系统

5.1 系统首页

5.2 特征与目标的相关性分析

5.3 缺陷影响因素分析

5.4 工业制造缺陷预测

6. 结论

        本项目,我们提出了一种数据科学方法,使用包括各种生产指标、供应链因素、质量控制评估、维护计划、劳动力生产率指标、能耗模式和增材制造细节的综合数据集,利用 Xgboost建模训练,测试集预测 AUC 达到99.7%,并搭建交互式分析系统来预测制造缺陷。

  B站视频及代码下载:基于机器学习的工业制造缺陷分析预测系统-视频-代码

 欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的师姐 QQ 名片 :)

精彩专栏推荐订阅:

1. Python数据挖掘精品实战案例

2. 计算机视觉 CV 精品实战案例

3. 自然语言处理 NLP 精品实战案例

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

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

相关文章

DNS 服务器的搭建(正向区域配置)

一、Windows DNS 正向区域配置 1.实验目标 2.拓扑结构 3.实验需求 4.配置要点 5.配置步骤 1.配置各主机 IP 地址及网关 2.DNS 服务器服务部署 3.验证实验 一、Windows DNS 正向区域配置 1.实验目标 掌握 DNS 的功能和基本操作 熟悉公网 DNS 架构 掌握 DNS …

豆瓣同城活动采集

可采集豆瓣同城活动,来辅助分析一个城市的文商旅体活跃繁荣程度。 示例数据: 活动网址:已屏蔽不显示 封图网址:已屏蔽不显示 标题:【百年老号-本地观众力捧】谦祥益相声茶馆-陆家嘴店 开始日期:2024-0…

tomcat在idea中 乱码(service ,catalina log)

我试了很多方法,把idea中的所有配置都改成了utf-8,(包括修改vm配置,fileEndcoding,外部文件endcodeing ...等等)都没有改好, 最后在修改了tomcat的配置文件,就好了 在tomcat的安装…

【C++ 第十六章】哈希

1. unordered系列关联式容器 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 ,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好 的查询是,进行…

Modern C++——函数参数类型的分类和使用

大纲 基本定义值类型左值引用非常量左值引用常量左值引用 右值引用总结 在C中,函数参数主要有两种方式:值类型和引用类型。其中引用类型又分为:左值引用和C11引入的右值引用。下面我们分别对其进行介绍。 基本定义 要弄清楚这些概念&#x…

三级_网络技术_51_应用题

一、 请根据下图所示网络结构回答下列问题。 1.填写路由器RG的路由表项。 目的网络/掩码长度输出端口__________S0(直接连接)__________S1(直接连接)__________S0__________S1__________S0__________S1 2.如果需要监听路由器RE…

mysql理论学习上

1:常⻅的SQL语句 1.1sql介绍 SQL 是⽤于访问和处理数据库的标准的计算机语⾔。 SQL,指结构化查询语⾔,全称是 Structured Query Language。SQL 让您可以访问和处理数据库。 SQL 是⼀种 ANSI(American National Standards Inst…

SSRF漏洞(二)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言: 本文主要讲解依靠phpstudy搭建pikachu靶场。 phpstudy下载使用以及搭建本地SQL labs靶场 SSRF漏洞(一) 一,靶场搭建。 靶场…

用Python实现时间序列模型实战——Day1:时间序列的基本概念

一、学习内容 1. 时间序列数据的定义与特点 定义: 时间序列数据是一组按时间顺序排列的观测值。时间序列的每个观测值都与特定时间点相关联。例如,气温每天的记录、股票每日的收盘价等。 特点: 时间依赖性:时间序列数据的一个…

ssm基于微信小程序的食堂窗口自助点餐系统源码调试讲解

1. 环境搭建 JDK 1.8:确保您的系统已安装JDK 1.8,并配置好环境变量。JDK 1.8 是目前很多Java项目仍在使用的稳定版本,适用于SSM框架。Tomcat 7:安装并配置Tomcat 7作为您的Web服务器。Tomcat 7 支持Servlet 3.0和JSP 2.2&#xf…

黑马JavaWeb开发笔记07——Ajax、Axios请求、前后端分离开发介绍、Yapi详细配置步骤

文章目录 前言一、Ajax1. 概述2. 作用3. 同步异步4. 原生Ajax请求(了解即可)5. Axios(重点)5.1 基本使用5.2 Axios别名(简化书写) 二、前后端分离开发1. 介绍1.1 前后台混合开发1.2 前后台分离开发方式&…

使用 OpenCV 组合和缩放多张图像

在图像处理领域,我们经常需要将多张小图像组合成一张大图。例如,将多张图像按一定布局排列在一起,或者创建一个缩略图画廊。在这篇博客中,我将向你展示如何使用 Python 的 OpenCV 库来完成这一任务。 代码 下面是一段完整的 Pyt…

计算物理精解【2】

文章目录 矢量运动矢量基础定义计算方法示例 矢量的分量二维空间中的矢量分量三维空间中的矢量分量分量的计算示例 参考文献 矢量运动 矢量 基础 矢量的分量是该矢量在相应轴上的投影。 a x a c o o s Q , a y a s i n Q a_xacoosQ,a_yasinQ ax​acoosQ,ay​asinQ求解矢…

【书生大模型实战营(暑假场)】进阶任务三 LMDeploy 量化部署实践闯关任务

进阶任务三 LMDeploy 量化部署实践闯关任务 任务文档视频 1 大模型部署基本知识 1.1 LMDeploy部署模型 定义 在软件工程中,部署通常指的是将开发完毕的软件投入使用的过程。在人工智能领域,模型部署是实现深度学习算法落地应用的关键步骤。简单来说…

智能科技的浪潮:AI、ML、DL和CV的探索之旅

智能科技的浪潮:AI、ML、DL和CV的探索之旅 前言人工智能:智能科技的基石从专用到通用:AI的分类与演进机器学习:数据中的智慧算法的力量:经典与创新深度学习:解锁复杂性之门神经网络的深度:基础与…

Python网络爬虫模拟登录与验证解析

内容导读 使用Selenium模拟登录 使用Cookies登录网站 模拟表单登录网站 爬虫识别简单的验证码 实例解析 一、使用Selenium模拟登录 1、为什么要模拟登录 在互联网上存在大量需要登录才能访问的网站,要爬取这些网站,就需要学习爬虫的模拟登录。对…

Webpack中的自定义 loader 的简单实现

1.loader简单介绍 webpack 中 loader 是用于对模块的源代码进行转换(处理)的插件。例如 webpack 中常见的loader, css-loader、babel-loader。 2.自定义 loader 关于 loader: loader本质上是一个导出为函数的JavaScript模块&am…

故障诊断 | 基于小波时频图与Swin Transformer的轴承故障诊断方法(PyTorch)

文章目录 文章概述程序设计参考资料文章概述 基于小波时频图与Swin Transformer的轴承故障诊断方法 针对用传统的故障诊断方法难以对非线性非平稳的柴油机故障信号进行准确高效诊断的问题, 提出基于小波时频图与Swin Transformer的故障诊断方法。该方法可以有效结合小波时频分…

Qt (11)【Qt窗口 —— 对话框 | Qt内置对话框简介】

阅读导航 引言一、对话框1. 对话框的分类(1)模态对话框(2)非模态对话框 二、Qt内置对话框 引言 在上一篇文章中,我们深入探讨了Qt框架中窗口的基本构建块,它们共同构成了Qt应用程序中用户界面(…

RACL: Adversarially Robust Neural Architectures

RACL: 对抗鲁棒网络架构 论文链接:https://arxiv.org/abs/2009.00902v2 Abstract 深度神经网络(DNN)容易受到对抗性攻击。现有的方法致力于开发各种鲁棒训练策略或正则化来更新神经网络的权值。但除了权重之外,网络中的整体结构和信息流是由网络架构明…