【Python机器学习】利用PCA来简化数据——示例:利用PCA对半导体制造数据降维

数据背景:

通过半导体工程上的一些过程数据,对一些产品进行是否有缺陷的验证。

数据样例:

数据中包含了590个特征,且存在很多的缺失值,这些缺失值是以NaN标识的。因为在590个特征下,几乎所有样本都有NaN,因此去除不完整的样本不太现实。尽管我们可以将所有的NaN替换成0,但是由于并不知道这些值的意义,所以这样做是下策。比如如果有特征是温度值,那么这样处理就会出问题。

下面我们用平均值来代替缺失值,平均值根据那些非NaN得到:

python 复制代码
def replaceNanWithMean():
    datMat=loadDataSet('test/secom.data',' ')
    numFeat=shape(datMat)[1]
    for i in range(numFeat):
        #计算所有非NaN的平均值
        meanVal=mean(datMat[nonzero(~isnan(datMat[:,i].A))[0],i])
        #将所有的NaN置为平均值
        datMat[nonzero(isnan(datMat[:,i].A))[0],i]=meanVal
    return datMat

上述代码首先打开了数据集并计算出了其特征的数目,然后再在所有的特征上进行循环。对于每个特征,首先计算出那些非NaN值的平均值。然后,将所有的NaN替换成该平均值。

我们已经去除了所有的NaN,接下来在数据集上应用PCA。首先确认所需特征和可以去除特征的数目。PCA会给出数据中所包含的信息量。需要注意的是,数据和信息之间具有巨大的区别。数据指的是接收的原始材料,其中可能包含噪声和不相关信息。信息是指数据中的相关部分。这些并非只是抽象概念,我们还可以定量的计算数据中所包含的信息并决定保留的比例。

通过已有代码去除均值、计算协方差矩阵:

python 复制代码
dataMat=replaceNanWithMean()
meanVals=mean(dataMat,axis=0)
meanRemoved=dataMat-meanVals
covMat=cov(meanRemoved,rowvar=0)

最后对该矩阵进行特征值分析:

python 复制代码
eigVals,eigVects=linalg.eig(mat(covMat))
print(eigVals)

如上图,有很多数值,其中,有超过20%的特征值都是0,这意味着这些特征都是其他特征的副本,也就是说它们可以通过其他特征来表示,而本身没有提供额外的信息。

从大小排序来看,前15个的数量级大于10^5,这些是重要特征,只占所有特征的一部分。

相关推荐
挖矿大亨5 分钟前
C++中空指针访问成员函数
开发语言·c++
AI Echoes5 分钟前
LangChain Runnable组件重试与回退机制降低程序错误率
人工智能·python·langchain·prompt·agent
Fleshy数模7 分钟前
从欠拟合到正则化:用逻辑回归破解信用卡失信检测的召回率困境
算法·机器学习·逻辑回归
ZCXZ12385296a11 分钟前
【计算机视觉】基于YOLO13-C3k2-ConvAttn的电动汽车充电桩车位线自动检测与定位系统
人工智能·计算机视觉
qwerasda12385215 分钟前
游戏场景中的敌方目标检测与定位实战使用mask-rcnn_regnetx模型实现
人工智能·目标检测·游戏
硅基流动17 分钟前
从云原生到 AI 的跃迁探索之路|开发者说
大数据·人工智能·云原生
jackywine622 分钟前
零样本学习(Zero-Shot Learning)和少样本学习(Few-Shot Learning)有何区别?AI 是怎么“猜“出来的
人工智能·机器学习
AAD5558889922 分钟前
YOLO11-Seg+ContextGuided:智能交通流量估算与拥堵检测实战指南
python
团子的二进制世界24 分钟前
Sentinel-服务保护(限流、熔断降级)
java·开发语言·sentinel·异常处理
犀思云25 分钟前
构建全球化多云网格:FusionWAN NaaS 在高可用基础设施中的工程实践
运维·网络·人工智能·系统架构·机器人