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

news2025/1/11 20:30:24

一、数据集回顾

前面我们已经基本了解了WM-811K Wafermap 数据集,并通过几段代码,熟悉了这个数据集的数据结构,这里为了方便各位连续理解,让我们再回顾一下:

WM-811K Wafermap 数据集是一个在半导体制造领域广泛使用的公开数据集,主要用于晶圆缺陷模式识别和分析。该数据集包含了大量晶圆图(wafer maps),这些图展示了半导体制造过程中晶圆上的缺陷分布情况。以下是该数据集的一些关键信息:

数据集概述

  • 数据量:WM-811K 数据集包含约 811,457 张晶圆图。

  • 缺陷类型:数据集中标注了多种常见的缺陷模式,如中心缺陷、边缘缺陷、局部缺陷、环形缺陷等。

  • 应用场景:该数据集常用于机器学习、深度学习和模式识别任务,特别是在半导体制造中的缺陷检测和分类。

数据集结构

  • 晶圆图:每张晶圆图是一个二维矩阵,表示晶圆上的缺陷分布。

  • 标签:每张图都有对应的标签,标明缺陷的类型或模式。

  • 元数据:可能包含制造过程中的其他相关信息,如工艺参数、设备状态等。

应用

  • 缺陷分类:通过训练模型,自动识别和分类晶圆上的缺陷模式。

  • 质量控制:帮助制造商优化工艺,减少缺陷率,提高良品率。

  • 研究:用于学术研究和工业应用中的算法开发和验证。

以下是上次我们演示过的,数据集的最后5条记录:

如果你没有看过我之前的文章,建议先看一下:

半导体数据分析: 玩转WM-811K Wafermap 数据集(一) AI 机器学习_wafer dataset-CSDN博客 我们接着上一篇文章来继续深入了解这个数据的结构和内容

二、基本统计

如果按照前面我们介绍的数据来计算,这个数据集收集自实际工厂的47,543个批次。但是,47,543个批次× 25个晶圆/批次=1,157,325张晶圆图比811,457张晶圆图要多出许多。为什么这个数据集实际只有811,457片wafer呢?

频次统计

从上面的图片看,每个批次(LOT)最多有25片Wafer(waferIndex <=25),so, 我们清楚地看到,最后两个批次分别是1片和2片。所以并不是每个Lot都有完整的25片wafer的!

我们通过下面的代码,来统计每个Lot中waferIndex的出现频率:

import pandas as pd  # 导入 Pandas 库,用于数据处理和分析
import numpy as np   # 导入 NumPy 库,用于科学计算和数组操作
import matplotlib.pyplot as plt  # 导入 Matplotlib 的 pyplot 模块,用于绘图
%matplotlib inline  # Jupyter Notebook 的魔法命令,使图形直接显示在 Notebook 中

# 定义数据文件的路径 -- 这是我自己的路径,每个人都不会相同,请注意
mp_file = "/data_disk/public_lib/wm811k_wafer_map/in/LSWMD.pkl"

# 使用 Pandas 读取 pickle 格式的数据文件,并将其加载到 DataFrame 中
df = pd.read_pickle(mp_file)

# 使用 NumPy 的 unique 函数统计 df.waferIndex 列中的唯一值及其出现次数
# uni_Index 是一个包含两个数组的元组:唯一值数组和对应的计数数组
uni_Index = np.unique(df.waferIndex, return_counts=True)

# 使用 Matplotlib 绘制柱状图
# uni_Index[0] 是 x 轴数据(唯一值),uni_Index[1] 是 y 轴数据(出现次数)
# color='gold' 设置柱状图颜色为金色,align='center' 使柱状图居中,alpha=0.5 设置透明度
plt.bar(uni_Index[0], uni_Index[1], color='gold', align='center', alpha=0.5)

# 设置图表的标题
plt.title("wafer Index distribution")

# 设置 x 轴的标签
plt.xlabel("index #")

# 设置 y 轴的标签
plt.ylabel("frequency")

# 设置 x 轴的范围为 0 到 26
plt.xlim(0, 26)

# 设置 y 轴的范围为 30000 到 34000
plt.ylim(30000, 34000)

# 显示绘制的图表
plt.show()

运行代码,显示如下:

从图中可以看出,并非所有批次都有完美的25片晶圆,这可能是由于传感器故障或其他未知问题造成的。换句话说,waferIndex 列的值可能不完整或不一致,这可能会影响后续的数据分析或建模。


所幸我们在分类中不需要索引特性,因此我们可以删除这个字段。

df = df.drop(['waferIndex'], axis = 1)

 所以你看到,我们这样就删除了这个字段:

新增字段

从上面的数据中,虽然从 wafer map 列中无法直接提取出很多有用的信息,但我们可以观察到每个晶圆图(wafer map)的尺寸(die size)是不同的。因此,让我们创建一个新的量 waferMapDim 来记录每个晶圆图的尺寸信息,以便后续分析或处理。

运行以下的代码:

import pandas as pd  # 导入 Pandas 库,用于数据处理和分析
import numpy as np   # 导入 NumPy 库,用于科学计算和数组操作

# 定义数据文件的路径
mp_file = "/data_disk/public_lib/wm811k_wafer_map/in/LSWMD.pkl"

# 使用 Pandas 读取 pickle 格式的数据文件,并将其加载到 DataFrame 中
df = pd.read_pickle(mp_file)

# 移除 DataFrame 中的 'waferIndex' 列,因为该列在当前任务中不需要
#这行代码删除了 df 中的 waferIndex 列。axis=1 表示删除的是列(axis=0 是删除行)。

df = df.drop(['waferIndex'], axis=1)

# 定义一个函数 find_dim,用于计算二维数组的尺寸
def find_dim(x):
    """
    计算二维数组的尺寸(行数和列数)。
    
    参数:
    x (np.array): 输入的二维数组。
    
    返回:
    tuple: 包含行数和列数的元组。
    """
    dim0 = np.size(x, axis=0)  # 计算数组的行数
    dim1 = np.size(x, axis=1)  # 计算数组的列数
    return dim0, dim1  # 返回行数和列数

# 对 DataFrame 中的 'waferMap' 列应用 find_dim 函数,计算每个晶圆图的尺寸,并将结果存储在新列 'waferMapDim' 中
df['waferMapDim'] = df.waferMap.apply(find_dim)

# 随机抽取 DataFrame 中的 5 行数据,用于查看结果 
df.sample(5)

代码释义:

这段代码的功能是读取数据集文件,处理其中的数据,并计算出每个“waferMap”列的维度信息。

1. 导入必要的库

import pandas as pd
import numpy as np
  • pandas 是一个强大的数据处理库,常用于数据清洗和分析。通过 pd 引用。
  • numpy 是一个用于科学计算的库,尤其擅长数组操作和数学计算。通过 np 引用。

2. 读取 .pkl 文件

mp_file = "/data_disk/public_lib/wm811k_wafer_map/in/LSWMD.pkl"
df = pd.read_pickle(mp_file)
  • mp_file 定义了文件的路径,LSWMD.pkl 是一个 pickle 文件,这个文件保存了数据。
  • pd.read_pickle(mp_file) 用于从 .pkl 文件中读取数据,并将其加载为一个 DataFramedf 是这个数据框。

3. 删除指定列

df = df.drop(['waferIndex'], axis=1)
  • 这行代码删除了 df 中的 waferIndex 列。axis=1 表示删除的是列(axis=0 是删除行)。

4. 定义函数 find_dim

def find_dim(x):
    dim0 = np.size(x, axis=0)
    dim1 = np.size(x, axis=1)
    return dim0, dim1
  • find_dim 是一个函数,用来计算输入对象 x 的维度。这个函数接受一个二维对象(如矩阵或数组)并返回其两个维度:
    • np.size(x, axis=0) 获取 x 的第一个维度(行数)。
    • np.size(x, axis=1) 获取 x 的第二个维度(列数)。

5. 应用 find_dim 函数到 waferMap

df['waferMapDim'] = df.waferMap.apply(find_dim)
  • df.waferMapDataFrame 中的 waferMap 列,假设它包含二维数组或类似的数据结构。
  • .apply(find_dim)find_dim 函数应用到 waferMap 列的每个元素上,计算每个元素的维度,并将结果存储在新的列 waferMapDim 中。

find_dim 函数被应用于 df.waferMap 列的每个元素。这里的关键是理解 .apply() 函数的工作原理。

详细解释:

  • df.waferMapDataFrame 中的一个列,假设它包含的是一系列二维数组或者列表(在你的数据中表现为嵌套的列表,如 [[0, 0, 0, 0, 0, 0, ...]])。每个元素对应一个 waferMap,即一个二维的矩阵或者数组。
  • df.waferMap.apply(find_dim) 会对 df.waferMap 列中的每个元素应用 find_dim 函数。

find_dim 函数的输入:

find_dim 函数的输入是 df.waferMap 列中的每个元素,也就是每个 waferMap。根据这些数据,这些 waferMap 看起来是二维的列表或数组。

举个例子:

  • 假设某个 waferMap 的值是:[[0, 0, 0], [1, 1, 1], [2, 2, 2]]
    • 这是一个 3 行 3 列的二维列表。
  • find_dim 函数会接收到这个二维列表,并计算它的维度:
    • np.size(x, axis=0) 会返回 3(行数)。
    • np.size(x, axis=1) 会返回 3(列数)。
    • 所以,find_dim 的返回值是 (3, 3)

6. 查看 df 的随机样本

df.sample(5)
  • df.sample(5) 随机选择 df 中的 5 行,并显示它们。这通常用于快速查看数据的样本。

这段代码的核心功能是处理二维数组(waferMap)并计算它们的维度信息。

 解释了这么多,上面的代码运行的结果如下图:

请注意最后的括号内的数值,也就是说代表了行和列的矩阵,表明了这片wafer的规模。

max(df.waferMapDim), min(df.waferMapDim)

最大和最小就出来了:

加上下面这段代码:

uni_waferDim=np.unique(df.waferMapDim, return_counts=True)
uni_waferDim[0].shape[0]

这行代码涉及到对 df.waferMapDim 列进行去重和计数操作,并访问其结果的一部分。

1. np.unique(df.waferMapDim, return_counts=True)

uni_waferDim = np.unique(df.waferMapDim, return_counts=True)
  • df.waferMapDimDataFrame 中的列,存储了每个 waferMap 的维度信息,例如 (88, 81)(35, 36) 等。
  • np.unique 是 NumPy 的一个函数,返回输入数组中唯一的元素,并可以计算每个唯一元素的出现次数。
    • df.waferMapDim 是要处理的输入数据。
    • return_counts=True 表示除了返回唯一元素本身,还会返回每个唯一元素的出现次数。

因此,uni_waferDim 会是一个元组,包含两个数组:

  • 第一个数组是所有 唯一的维度元组(如 (88, 81)(35, 36) 等)。
  • 第二个数组是每个唯一维度元组在 df.waferMapDim 中出现的次数。

例如,假设 df.waferMapDim 中有以下维度数据:

[(88, 81), (35, 36), (88, 81), (35, 36), (25, 27)]

np.unique 会返回:

uni_waferDim[0] = [(88, 81), (35, 36), (25, 27)]   # 唯一的维度元组
uni_waferDim[1] = [2, 2, 1]  # 每个维度元组出现的次数

2. uni_waferDim[0].shape[0]

uni_waferDim[0].shape[0]
  • uni_waferDim[0] 是返回的唯一维度元组的数组(例如 [(88, 81), (35, 36), (25, 27)])。
  • uni_waferDim[0].shape 返回的是这个数组的形状。在这个例子中,uni_waferDim[0] 是一个长度为 3 的数组,因此 uni_waferDim[0].shape 会返回 (3,)
  • .shape[0] 访问的是数组的第一个维度的大小,也就是数组的长度。在这个例子中,uni_waferDim[0].shape[0] 会返回 3,表示有 3 个唯一的维度元组。

uni_waferDim[0].shape[0] 的含义是 返回 waferMapDim 中唯一维度元组的数量。也就是说,统计 df.waferMapDim 列中有多少种不同的维度元组。例如,如果有 3 种不同的维度元组,结果就是 3

本例中结果是 632

就是说 唯一维度的元组的数量是 632种。

圆图的尺寸(或者说图像大小)并不总是相同的。我们注意到,数据集中有 632 种不同的尺寸。因此,为了统一输入的尺寸,必须进行数据转换(特征提取),这种方法将在后续章节中介绍。

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

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

相关文章

协同过滤算法私人诊所系统|Java|SpringBoot|VUE|

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SpringBoot、Mybatis-Plus、VUE、jquery,html 5⃣️…

Python基于YOLOv8和OpenCV实现车道线和车辆检测

使用YOLOv8&#xff08;You Only Look Once&#xff09;和OpenCV实现车道线和车辆检测&#xff0c;目标是创建一个可以检测道路上的车道并识别车辆的系统&#xff0c;并估计它们与摄像头的距离。该项目结合了计算机视觉技术和深度学习物体检测。 1、系统主要功能 车道检测&am…

nexus搭建maven私服

说到maven私服每个公司都有&#xff0c;比如我上一篇文章介绍的自定义日志starter&#xff0c;就可以上传到maven私服供大家使用&#xff0c;每次更新只需deploy一下就行&#xff0c;以下就是本人搭建私服的步骤 使用docker安装nexus #拉取镜像 docker pull sonatype/nexus3:…

MiniMind - 从0训练语言模型

文章目录 一、关于 MiniMind &#x1f4cc;项目包含 二、&#x1f4cc; Environment三、&#x1f4cc; Quick Start Test四、&#x1f4cc; Quick Start Train0、克隆项目代码1、环境安装2、如果你需要自己训练3、测试模型推理效果 五、&#x1f4cc; Data sources1、分词器&am…

Postman接口测试基本操作

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Postman-获取验证码 需求&#xff1a;使用Postman访问验证码接口&#xff0c;并查看响应结果。 地址&#xff1a;http://kdtx-test.itheima.net/api/captchaIm…

基于Python实现的通用小规模搜索引擎

基于Python实现的通用小规模搜索引擎 1.项目简介 1.1背景 《信息内容安全》网络信息内容获取技术课程项目设计 一个至少能支持10个以上网站的爬虫程序&#xff0c;且支持增量式数据采集;并至少采集10000个实际网页;针对采集回来的网页内容&#xff0c; 能够实现网页文本的分…

查找路由器的管理后台ip【通用找IP】

需求&#xff1a; 刚刚搞了个【小米】路由器&#xff0c;我想进路由的管理后台&#xff0c;提示&#xff1a;安装xx的路由管家&#xff0c;我不想安装 但是无法找到这个管理后台。 而且我是用这个路由作为中继&#xff0c;那么这个路由的ip就会经常更换 尝试通过网上搜索引擎来…

混合专家模型 (MoE)笔记摘要

ref&#xff1a; https://huggingface.co/blog/zh/moe#%E4%BB%80%E4%B9%88%E6%98%AF%E6%B7%B7%E5%90%88%E4%B8%93%E5%AE%B6%E6%A8%A1%E5%9E%8B 简短总结 混合专家模型 (MoEs): 与稠密模型相比&#xff0c; 预训练速度更快 与具有相同参数数量的模型相比&#xff0c;具有更快的…

01 Oracle自学环境搭建

1 Oracle12C安装 1.1 下载 官网地址&#xff1a;https://www.oracle.com/ 解压安装包 运行安装程序 1.2 安装 配置安全更新 软件更新 安装选项 系统类 Oracle主目录用户选择 使用现有windows用户&#xff1a;如果选择该项&#xff0c;则需要指定没有管理权限的用户。 创建新Wi…

【Python】Python与C的区别

文章目录 语句结束符代码块表示变量声明函数定义注释格式Python的标识符数据输入input()函数数据输出print()函数 语句结束符 C 语言 C 语言中每条语句必须以分号;结束。例如&#xff0c;int a 10;、printf("Hello, World!");。分号是语句的一部分&#xff0c;用于…

安科瑞 Acrel-1000DP 分布式光伏监控系统在工业厂房分布式光伏发电项目中的应用

吕梦怡 18706162527 摘 要&#xff1a;常规能源以煤、石油、天然气为主&#xff0c;不仅资源有限&#xff0c;而且会造成严重的大气污染&#xff0c;开发清洁的可再生能源已经成为当今发展的重要任务&#xff0c;“节能优先&#xff0c;效率为本”的分布式发电能源符合社会发…

逆向 易九批 最新版 爬虫逆向 x-sign ......

声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; # 欢迎交流 wjxch1004

TensorFlow Quantum快速编程(高级篇)

五、实战:量子分类器应用 5.1 数据准备 在实战构建量子分类器时,数据准备是基石环节。选用鸢尾花数据集,这一经典数据集在机器学习领域应用广泛,其涵盖了三种鸢尾花品种的样本,每个样本包含花萼长度、花萼宽度、花瓣长度、花瓣宽度四个特征。鉴于本次构建二分类量子分类…

maven高级(day15)

Maven 是一款构建和管理 Java 项目的工具 分模块设计与开发 所谓分模块设计&#xff0c;顾名思义指的就是我们在设计一个 Java 项目的时候&#xff0c;将一个 Java 项目拆分成多 个模块进行开发。 分模块设计我们在进行项目设计阶段&#xff0c;就可以将一个大的项目拆分成若干…

android studio根据包名获取当前安装包信息

package com.example.myapplication2;import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.util.Log;/**** 获取版本信息*/ public class SystemHelper {/*** 获取本地软件版本号*/public stat…

安卓硬件加速hwui

安卓硬件加速 本文基于安卓11。 从 Android 3.0 (API 级别 11) 开始&#xff0c;Android 2D 渲染管道支持硬件加速&#xff0c;这意味着在 View 的画布上执行的所有绘图操作都使用 GPU。由于启用硬件加速所需的资源增加&#xff0c;你的应用程序将消耗更多内存。 软件绘制&am…

口碑很好的国产LDO芯片,有哪些?

在几乎任何一个电路设计中&#xff0c;都可能会使用LDO&#xff08;低压差线性稳压器&#xff09;这个器件。 虽然LDO不是什么高性能的IC&#xff0c;但LDO芯片市场竞争异常激烈。最近几年&#xff0c;诞生了越来越多的精品国产LDO&#xff0c;让人看得眼花缭乱。 业内人士曾经…

实训云上搭建集群

文章目录 1. 登录实训云1.1 实训云网址1.2 登录实训云 2. 创建网络2.1 网络概述2.2 创建步骤 3. 创建路由器3.1 路由器名称3.1 创建路由器3.3 查看网络拓扑 4. 连接子网5. 创建虚拟网卡5.1 创建原因5.2 查看端口5.3 创建虚拟网卡 6. 管理安全组规则6.1 为什么要管理安全组规则6…

win32汇编环境,怎么进行乘法运算的

;运行效果 ;win32汇编环境,怎么进行乘法运算的 ;基础知识&#xff0c;重新复习一下。 ;首先需明白字节的概念。1个字节是8位&#xff0c;al和ah都是8位的&#xff0c;8位之中每位要么是0&#xff0c;要么是1&#xff0c;假如8位都是1&#xff0c;就是16进制的FF&#xff0c;也就…

opencv的NLM去噪算法

NLM&#xff08;Non-Local Means&#xff09;去噪算法是一种基于图像块&#xff08;patch&#xff09;相似性的去噪方法。其基本原理是&#xff1a; 图像块相似性&#xff1a;算法首先定义了一个搜索窗口&#xff08;search window&#xff09;&#xff0c;然后在该窗口内寻找…