当前位置: 首页 > news >正文

半导体数据分析: 玩转WM-811K Wafermap 数据集(三) AI 机器学习

前面我们已经通过两篇文章,一起熟悉了WM-811K Wafermap 数据集,并对其中的一些数据进行了调用,生成了一些统计信息和图片。今天我们接着继续往前走。

半导体数据分析: 玩转WM-811K Wafermap 数据集(二) AI 机器学习_wm811k数据集-CSDN博客

半导体数据分析: 玩转WM-811K Wafermap 数据集(一) AI 机器学习_wafer dataset-CSDN博客

当我们在处理大规模的数据集的时候,很多人都会有一种束手无策的感觉,尤其是面对海量的数据和复杂的结构时,可能会感到无从下手。我的经验就是抽丝剥茧,一步步来。实际上,通过系统化的步骤和合理的策略,我们可以有效地应对这些挑战。

搞过数据分析的都知道,缺失值的检查是数据处理过程中不可忽视的一环。当我们浏览数据集时,可能会发现相当一部分数据由于缺失值而变得无用。这些缺失值可能源于数据采集过程中的误差、设备故障或其他原因。为了确保后续分析的准确性,我们需要识别并处理这些缺失值。

当然,明确分析目标也非常重要。例如,如果我们只对具有特定故障类型标签的晶圆感兴趣,那么可以删除那些没有故障类型标签的数据。这样做不仅能够减少数据集的规模,还能提高数据的质量,使分析结果更加聚焦和可靠。

下面我我们就将整个数据做一些初步的处理,我们先来处理失效形式和训练类型。

之前我们从数据集中取出过一些数据  显示如下:

其中有两项  trianTestLabel和failureType,分别代表了训练测试标签,和失效标签。

我们对这两项通过下面的代码来进行处理:

import pandas as pdmp_file = "/data_disk/public_lib/wm811k_wafer_map/in/LSWMD.pkl"
df = pd.read_pickle(mp_file)df['failureNum']=df.failureType
df['trainTestNum']=df.trianTestLabel
mapping_type={'Center':0,'Donut':1,'Edge-Loc':2,'Edge-Ring':3,'Loc':4,'Random':5,'Scratch':6,'Near-full':7,'none':8}
mapping_traintest={'Training':0,'Test':1}
df=df.replace({'failureNum':mapping_type, 'trainTestNum':mapping_traintest})
tol_wafers = df.shape[0]
tol_wafers

在上面的代码中,我们抽取了  trianTestLabel 和failureNum 两列,分别重新命名为两列failureNum和trainTestNum,并通过两个字典mapping_type 和mapping_traintest进行了映射。在df.shape[0]中 返回 df 数据框的行数,即数据集中的总晶圆数量。该值存储在变量 tol_wafers 中。

811457

总数的晶圆是811457张。

然后我们来统计一下,失效的形式:

df_withlabel = df[(df['failureNum']>=0) & (df['failureNum']<=8)]
df_withlabel =df_withlabel.reset_index()
df_withpattern = df[(df['failureNum']>=0) & (df['failureNum']<=7)]
df_withpattern = df_withpattern.reset_index()
df_nonpattern = df[(df['failureNum']==8)]
df_withlabel.shape[0], df_withpattern.shape[0], df_nonpattern.shape[0]

上面的代码列出了三种标签 全部标签(0-8),有标记的标签(0-7),和 无标记的标签(8)。

并且每次取出标签的时候,都进行了重新索引:reset_index()。 这里对这个重新索引稍微解释一下:

重置索引通常是数据处理中的一个重要步骤,特别是在筛选数据或进行某些操作后。下面是重置索引的几个常见原因:

1. 确保索引连续

当你对 DataFrame 进行筛选或过滤后,原始数据的索引可能会变得不连续。例如,假设你从一个 DataFrame 中删除了一些行,结果就是剩余的行的索引会留下“空隙”。重置索引可以让你重新生成连续的索引,通常是从 0 开始递增的整数。

2. 方便后续操作

使用连续的整数索引使得后续的操作更简单。例如,在进一步分析或可视化数据时,连续的索引能避免因为跳跃的索引导致的潜在错误。它还可以帮助在合并(merge)或连接(concat)时避免索引冲突。

3. 删除旧的索引列

在使用 reset_index() 时,如果你不指定参数,原来的索引会被添加为一个新列。例如,如果你过滤掉了 DataFrame 的一些行,原索引列可能仍然包含那些被删除行的索引。重置索引不仅让索引连续,而且会去掉原始的索引列(除非你选择保留它)。

4. 避免潜在的错误

如果后续的操作需要基于索引进行一些处理(比如索引与行数的关联),不连续的索引可能会导致逻辑错误或不一致。重置索引确保了数据的索引一致性,减少了潜在的错误发生。

5. 保持代码整洁

有时,重置索引是为了保证代码简洁和易于阅读。尤其是当数据已经过多次筛选、过滤、分组等操作后,重新整洁的索引可以让分析过程更加清晰,避免在后续处理中迷失。

6. 去除层次索引(如果有)

如果在处理过程中曾经使用过多级索引(MultiIndex),可以通过 reset_index() 来降级到简单的单级索引,使得数据的访问和管理更为直观。

pandas 中,重新索引(reset index) 的主要目的是为数据框的索引(下标)重新分配连续的整数值,同时可以选择是否保留旧索引作为新列。

上面代码的最终运行结果是:

(172950, 25519, 147431)

这意味着172950片晶圆有标签,其中25519片晶圆被标记了失效形式,147431片晶圆没有标记失效形式。这个统计数据对我们后面用ai进行数据分析有参考作用。

然后我们来做一个统计图:

#创建图形和子图:
fig = plt.figure(figsize=(20, 4.5)) 
gs = gridspec.GridSpec(1, 2, width_ratios=[1, 2.5]) 
ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])#饼图:展示晶圆的标签分类
no_wafers = [tol_wafers - df_withlabel.shape[0], df_withpattern.shape[0], df_nonpattern.shape[0]]colors = ['silver', 'orange', 'gold']
explode = (0.1, 0, 0) 
labels = ['no-label', 'label&pattern', 'label&non-pattern']
ax1.pie(no_wafers, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=140)#条形图:显示不同故障类型的分布
uni_pattern = np.unique(df_withpattern.failureNum, return_counts=True)
labels2 = ['', 'Center', 'Donut', 'Edge-Loc', 'Edge-Ring', 'Loc', 'Random', 'Scratch', 'Near-full']ax2.bar(uni_pattern[0], uni_pattern[1] / df_withpattern.shape[0], color='gold', align='center', alpha=0.9)
ax2.set_title("Failure Type Frequency")
ax2.set_ylabel("% of Pattern Wafers")plt.show()

 运行结果如下:

根据failureType变量过滤,172950片晶圆有标签,而78.7%的晶圆没有标签。在贴有标签的晶圆片中,只有3.1%(25,519片)的晶圆片存在真正的失效模式,而147,431片晶圆片仍贴有“无”标签。因此,我们只关注这25,519个实例,这大大减少了我们工作的计算量。从上面的第二张图中,数据集显示出,失效形式呈现出了高度的不平衡分布。

图片展示数据是一种最佳数据展示的方式之一,因此观察原始数据的最好方法是进行数据可视化。接下来我们用数据集中标记的模式显示前100个样本。 

fig, ax = plt.subplots(nrows = 10, ncols = 10, figsize=(20, 20))
ax = ax.ravel(order='C')
for i in range(100):img = df_withpattern.waferMap[i]ax[i].imshow(img)ax[i].set_title(df_withpattern.failureType[i][0][0], fontsize=10)ax[i].set_xlabel(df_withpattern.index[i], fontsize=8)ax[i].set_xticks([])ax[i].set_yticks([])
plt.tight_layout()
plt.show() 

 

我们同样也可以通过失效形式分别来绘制晶圆图:

x = [0,1,2,3,4,5,6,7]
labels2 = ['Center','Donut','Edge-Loc','Edge-Ring','Loc','Random','Scratch','Near-full']for k in x:fig, ax = plt.subplots(nrows = 1, ncols = 10, figsize=(18, 12))ax = ax.ravel(order='C')for j in [k]:img = df_withpattern.waferMap[df_withpattern.failureType==labels2[j]]for i in range(10):ax[i].imshow(img[img.index[i]])ax[i].set_title(df_withpattern.failureType[img.index[i]][0][0], fontsize=10)ax[i].set_xlabel(df_withpattern.index[img.index[i]], fontsize=10)ax[i].set_xticks([])ax[i].set_yticks([])plt.tight_layout()plt.show() 

然后我们从上面选取几种来进行放大可视:

根据上面的编号选取: [12,340, 8, 14, 13, 66, 15, 189] 
x = [12, 340, 8, 14, 13, 66, 15, 189]
labels2 = ['Center','Donut','Edge-Loc','Edge-Ring','Loc','Random','Scratch','Near-full']#ind_def = {'Center': 9, 'Donut': 340, 'Edge-Loc': 3, 'Edge-Ring': 16, 'Loc': 0, 'Random': 25,  'Scratch': 84, 'Near-full': 37}
fig, ax = plt.subplots(nrows = 2, ncols = 4, figsize=(20, 10))
ax = ax.ravel(order='C')
for i in range(8):img = df_withpattern.waferMap[x[i]]ax[i].imshow(img)ax[i].set_title(df_withpattern.failureType[x[i]][0][0],fontsize=24)ax[i].set_xticks([])ax[i].set_yticks([])
plt.tight_layout()
plt.show() 

 经过上面的可视化,我们进一步加深了对这个数据集的了解,后面我们将对数据进行转换:通过使用缩放、属性分解和属性聚合的工程特征,转换为机器学习准备的预处理数据。

相关文章:

半导体数据分析: 玩转WM-811K Wafermap 数据集(三) AI 机器学习

前面我们已经通过两篇文章&#xff0c;一起熟悉了WM-811K Wafermap 数据集&#xff0c;并对其中的一些数据进行了调用&#xff0c;生成了一些统计信息和图片。今天我们接着继续往前走。 半导体数据分析&#xff1a; 玩转WM-811K Wafermap 数据集&#xff08;二&#xff09; AI…...

【.net core】【sqlsugar】时间查询示例

1、时间包含查询示例 //model.TimeInterval为时间区间参数&#xff0c;参数格式为2024-01-01~2025-01-01 //query为当前查询的语句内容 //为当前查询语句增加创建时间模糊搜索查询条件 query query.Where(a > ((DateTime)a.F_CreatorTime).ToString("yyyy-MM-dd HH:m…...

Kotlin 协程基础十 —— 协作、互斥锁与共享变量

Kotlin 协程基础系列&#xff1a; Kotlin 协程基础一 —— 总体知识概述 Kotlin 协程基础二 —— 结构化并发&#xff08;一&#xff09; Kotlin 协程基础三 —— 结构化并发&#xff08;二&#xff09; Kotlin 协程基础四 —— CoroutineScope 与 CoroutineContext Kotlin 协程…...

Java中网络编程的学习

目录 网络编程概述 网络模型 网络通信三要素: IP 端口号 通信协议 IP地址&#xff08;Internet Protocol Address&#xff09; 端口号 网络通信协议 TCP 三次握手 四次挥手 UDP TCP编程 客户端Socket的工作过程包含以下四个基本的步骤&#xff1a; 服务器程序…...

[计算机网络]一. 计算机网络概论第一部分

作者申明&#xff1a;作者所有文章借助了各个渠道的图片视频以及资料&#xff0c;在此致谢。作者所有文章不用于盈利&#xff0c;只是用于个人学习。 1.0推荐动画 【网络】半小时看懂<计算机网络>_哔哩哔哩_bilibili 1.1计算机网络在信息时代的作用 在当今信息时代&…...

【0393】Postgres内核 checkpointer process ③ 构建 WAL records 工作缓存区

1. 初始化 ThisTimeLineID、RedoRecPtr 函数 InitXLOGAccess() 内部会初始化 ThisTimeLineID、wal_segment_size、doPageWrites 和 RedoRecPtr 等全局变量。 下面是这四个变量初始化前的值: (gdb) p ThisTimeLineID $125 = 0 (gdb) p wal_segment_size $126 = 16777216 (gdb…...

正则表达式基础知识及grep、sed、awk常用命令

文章目录 前言一、正则表达式元字符和特性1. 字符匹配2. 量词3. 字符类4. 边界匹配5. 分词和捕获6. 特殊字符7. 位置锚定 二、grep常用参数1. -n额外输出行号2. -v 排除匹配的行3. -E 支持扩展正则匹配4. -e进行多规则匹配搜索5. -R 递归匹配目录中的文件内容6. -r递归地搜索目…...

redhat安装docker 24.0.7

1、下载docker镜像包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz 2、解压 tar -xvf docker-24.0.7.tgz 3、解压的docker文件夹全部移动至/usr/bin目录 cd docker cp -p docker/* /usr/bin 4、注册服务 vi /usr/lib/systemd/syste…...

【excel】VBA简介(Visual Basic for Applications)

文章目录 一、基本概念二、语法2.1 数据类型2.11 基本数据类型2.12 常量2.13 数组 2.2 控制语句2.21 条件语句2.22 循环语句2.23 错误处理&#xff1a;On Error2.24 逻辑运算 2.3 其它语句2.31 注释2.32 with语句 2.4 表达式2.41 常见表达式类型2.42 表达式的优先级 2.5 VBA 的…...

【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍为什么self-attention可以堆叠多层,这有什么作用?

【大厂面试AI算法题中的知识点】方向涉及&#xff1a;ML/DL/CV/NLP/大数据…本篇介绍为什么self-attention可以堆叠多层&#xff0c;这有什么作用&#xff1f; 【大厂面试AI算法题中的知识点】方向涉及&#xff1a;ML/DL/CV/NLP/大数据…本篇介绍为什么self-attention可以堆叠…...

NanoKVM简单开箱测评和拆解,让普通电脑实现BMC/IPMI远程管理功能

Sipeed推出了NanoKVM&#xff0c;简直是没有BMC的台式机和工作站的福音。有了这个就可以轻松实现以往服务器才有的远程管理功能。 NanoKVM 简介 Lichee NanoKVM 是基于 LicheeRV Nano 的 IP-KVM 产品&#xff0c;继承了 LicheeRV Nano 的极致体积 和 强大功能。 NanoKVM 包含…...

【Idea】编译Spring源码 read timeout 问题

Idea现在是大家工作中用的比较多的开发工具&#xff0c;尤其是做java开发的&#xff0c;那么做java开发&#xff0c;了解spring框架源码是提高自己技能水平的一个方式&#xff0c;所以会从spring 官网下载源码&#xff0c;导入到 Idea 工具并编译&#xff0c;但是发现build的时…...

VSCode的配置与使用(C/C++)

从0开始教你在vscode调试一个C文件 一.首先是配置你的编译环境&#xff0c;添加到环境变量&#xff08;默认你是全新的电脑&#xff0c;没有安装vs2019之类的&#xff09; 原因&#xff1a;因为相比于vs2019&#xff0c;vscode只是个代码编辑器&#xff0c;相当于一个彩色的、…...

SpringMVC (1)

目录 1. 什么是Spring Web MVC 1.1 MVC的定义 1.2 什么是Spring MVC 1.3 Spring Boot 1.3.1 创建一个Spring Boot项目 1.3.2 Spring Boot和Spring MVC之间的关系 2. 学习Spring MVC 2.1 SpringBoot 启动类 2.2 建立连接 1. 什么是Spring Web MVC 1.1 MVC的定义 MVC 是…...

本地部署大模型—MiniCPM-V 2.0: 具备领先OCR和理解能力的高效端侧多模态大模型

MiniCPM-V 2.0: 具备领先OCR和理解能力的高效端侧多模态大模型 简介 MiniCPM 系列的最新多模态版本 MiniCPM-V 2.0。该模型基于 [MiniCPM 2.4B和 SigLip-400M 构建,共拥有 2.8B 参数。MiniCPM-V 2.0 具有领先的光学字符识别(OCR)和多模态理解能力。该模型在综合性 OCR 能力…...

国产linux系统(银河麒麟,统信uos)使用 PageOffice 实现后台批量生成PDF文档

PageOffice 国产版 &#xff1a;支持信创系统&#xff0c;支持银河麒麟V10和统信UOS&#xff0c;支持X86&#xff08;intel、兆芯、海光等&#xff09;、ARM&#xff08;飞腾、鲲鹏、麒麟等&#xff09;、龙芯&#xff08;LoogArch&#xff09;芯片架构。 PageOffice 版本&…...

Python 扫描枪读取发票数据导入Excel

财务需要一个扫描枪扫描发票文件&#xff0c;并将主要信息录入Excel 的功能。 文件中sheet表的列名称&#xff0c;依次为&#xff1a;发票编号、发票编码、日期、金额、工号、扫描日期。 扫描的时候&#xff0c;Excel 文件需要关闭&#xff0c;否则会报错。 import openpyxl …...

电源自动测试系统中的ate定制化包含哪些内容?

1. 测试项目和指标 基础测试项目&#xff1a;虽然大多数电源模块的基础测试项目&#xff08;如输入输出电压、电流、效率等&#xff09;已经包含在测试系统中&#xff0c;但针对特殊或小众的测试项目&#xff0c;如VPX电源测试时的通讯验证&#xff0c;可以根据客户需求进行定…...

人工智能-机器学习之多分类分析(项目实战二-鸢尾花的多分类分析)

Softmax回归听名字&#xff0c;依然好像是做回归任务的算法&#xff0c;但其实它是去做多分类任务的算法。 篮球比赛胜负是二分类&#xff0c;足球比赛胜平负就是多分类 识别手写数字0和1是二分类&#xff0c;识别手写数字0-9就是多分类 Softmax回归算法是一种用于多分类问题…...

多包单仓库(monorepo)实现形式

目录 背景 需求和方案 从0开始搭建一个Monorepo项目 创建 配置全局公共样式 配置全局公共组件 方式1:不需要独立发布的组件包,只在当前项目的子项目中使用 方式2:需要独立发布和版本维护的包 子项目的独立构建和部署 总结 Monorepo优势 便于代码维护、管理 支持…...

可视化AI工作流:将UNIT-00接入ComfyUI实现复杂任务编排

可视化AI工作流&#xff1a;将UNIT-00接入ComfyUI实现复杂任务编排 你有没有遇到过这样的场景&#xff1f;想用AI画一张图&#xff0c;但绞尽脑汁也想不出一个足够详细、能激发模型灵感的描述词&#xff08;Prompt&#xff09;。或者&#xff0c;你有一张复杂的图表&#xff0…...

intv_ai_mk11保姆级教学:输入‘你好’→追问第2点→指定表格输出,完整交互链路演示

intv_ai_mk11保姆级教学&#xff1a;输入你好→追问第2点→指定表格输出&#xff0c;完整交互链路演示 1. 快速了解intv_ai_mk11 intv_ai_mk11是一款基于Llama架构的AI对话助手&#xff0c;拥有7B参数规模&#xff0c;运行在GPU服务器上。它能帮助你完成各种任务&#xff0c;…...

python基于Hadoop的就业推荐系统的设计与实现 Spark+Hadoop+Hive 大数据 深度学习 机器学习

前言随着就业市场信息不对称问题日益突出&#xff0c;开发高效的智能就业推荐系统 成为当务之急。本研究基于Hadoop生态系统&#xff0c;设计并实现了一套面向求职者和招聘企业的智能推荐系统。系统采用分布式架构&#xff0c;后端基于Django框架实现业务逻辑处理&#xff0c;前…...

HumanoidVerse深度解析:如何通过多模拟器框架实现人形机器人sim2real高效训练

1. HumanoidVerse框架概览&#xff1a;多模拟器支持与模块化设计 HumanoidVerse是卡耐基梅隆大学(CMU)推出的开源框架&#xff0c;专门针对人形机器人的sim2real训练需求。这个框架最大的特点在于其多模拟器支持架构&#xff0c;能够无缝对接IsaacGym、IsaacSim和Genesis三种主…...

多模态Agent架构实战落地:从需求分析到生产部署

多模态Agent架构实战落地&#xff1a;从需求分析到生产部署 随着大语言模型技术的普及&#xff0c;单一文本交互的智能系统已无法满足复杂业务场景需求——电商平台需要同时理解用户的商品描述文本、实拍图片和售后语音诉求&#xff0c;教育场景需要处理手写作业、视频讲解和文…...

公交客流统计摄像机系统,能替代监控摄像头吗?

公交车内乘客流量大&#xff0c;安全隐患较多&#xff0c;多年来监控摄像头已经成为车内的标配。随着科技技术的进步&#xff0c;如今公交客流统计摄像机系统&#xff0c;也逐渐部署到了各地公交上。那么公交客流统计摄像机系统&#xff0c;能替代监控摄像头吗&#xff1f;如今…...

Qwen2.5-7B入门实战:从Docker到网页服务的全流程解析

Qwen2.5-7B入门实战&#xff1a;从Docker到网页服务的全流程解析 1. 引言&#xff1a;为什么选择Qwen2.5-7B Qwen2.5-7B是阿里最新开源的大语言模型&#xff0c;相比前代版本在知识量、编程能力和数学能力上有显著提升。对于想要快速体验大模型能力的开发者来说&#xff0c;通…...

灵毓秀-牧神-造相Z-Turbo进阶玩法:结合提示词生成不同风格的灵毓秀

灵毓秀-牧神-造相Z-Turbo进阶玩法&#xff1a;结合提示词生成不同风格的灵毓秀 1. 认识灵毓秀-牧神-造相Z-Turbo 1.1 模型特点概述 灵毓秀-牧神-造相Z-Turbo是一款基于Xinference部署的专用文生图模型&#xff0c;专注于生成《牧神记》中灵毓秀这一角色的高质量图像。相比通…...

从原理到代码:深入解析UniFormer的多头关系聚合器(MHRA)设计

从原理到代码&#xff1a;深入解析UniFormer的多头关系聚合器(MHRA)设计 视频理解领域近年来经历了从3D卷积网络到视觉Transformer的范式转变&#xff0c;但两者在时空特征提取上各有限制。3D CNN擅长捕捉局部时空特征却受限于固定感受野&#xff0c;而视觉Transformer虽能建模…...

2026年高压电磁阀制造厂大比拼:哪家更值得信赖?

在工业领域&#xff0c;高压电磁阀是许多关键系统的核心部件&#xff0c;其性能和可靠性直接关系到整个系统的稳定性和安全性。随着技术的不断进步和市场需求的多样化&#xff0c;选择一家值得信赖的高压电磁阀制造厂变得尤为重要。本文将从多个维度对比分析几家主流高压电磁阀…...