1.案例介绍
半导体是在一些极为先进的工厂中制造出来的。工厂或制造设备不仅需要花费上亿美元,而且还需要大量的工人。制造设备仅能在几年内保持其先进性,随 后就必须更换了。单个集成电路的加工时间会超过一个月。在设备生命期有限,花费又极其巨大的情况下,制造过程中的每一秒钟都价值巨大。如果制造过程中存在瑕疵,我们就必须尽早发现,从而确保宝贵的时间不会花费在缺陷产品的生产上。一些工程上的通用解决方案是通过早期测试和频繁测试来发现有缺陷的产品,但仍然有一些存在瑕疵的产品通过了测试。如果机器学习技术能够用于进一步减少错误,那么它就会为制造商节省大量的资金。 接下来我们将考察面向上述任务中的数据集,而它也比前面使用的数据集更大,并且包含了许多特征。具体地讲,它拥有 590个特征。我们看看能否对这些特征进行降维处理。(数据集 secom.data)
2.数据预处理
本数据集存在缺失数据, 将每列的缺失值补全为该列的所有非缺失值的均值。
3.利用 sklearn模块相关方法进行主成分分析
(1)画出崖底碎石图,观察此图看是否个主成分的贡献率的差异情况;
(2)选择不同的阈值 0.7,0.8,0.9,筛选出不同个数的主成分;
(3)计算在不同阈值条件下属性的压缩比,即主成分个数/所有原始数据的属性个数
代码实现
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 6 08:33:32 2023
@author: Yaxuan Shen
"""
import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# 1. 读取数据集
data = pd.read_csv('C:/Users/Administrator/Desktop/secom.data', sep=' ', header=None)
# 2. 数据预处理:将缺失值用列均值填充
data = data.fillna(data.mean())
# 3. 主成分分析
pca = PCA()
pca.fit(data)
# (1) 画出崖底碎石图
plt.plot(np.cumsum(pca.explained_variance_ratio_))
plt.xlabel('Number of Components')
plt.ylabel('Cumulative Explained Variance')
plt.show()
# (2) 选择不同的阈值0.7,0.8,0.9,筛选出不同个数的主成分
pca_07 = PCA(0.7)
pca_08 = PCA(0.8)
pca_09 = PCA(0.9)
pca_07.fit(data)
pca_08.fit(data)
pca_09.fit(data)
print("Number of components with 70% variance:", pca_07.n_components_)
print("Number of components with 80% variance:", pca_08.n_components_)
print("Number of components with 90% variance:", pca_09.n_components_)
# (3) 计算在不同阈值条件下属性的压缩比
total_features = data.shape[1]
print("Compression ratio with 70% variance:", pca_07.n_components_ / total_features)
print("Compression ratio with 80% variance:", pca_08.n_components_ / total_features)
print("Compression ratio with 90% variance:", pca_09.n_components_ / total_features)