您的位置: 首页 > 生活常识 >

pca是什么意思呢(主成分分析PCA)

100次浏览     发布时间:2024-08-04 09:01:04    

00、背景

比如,要考核一个研发人员,存在多个维度的评价指标,如:交付效率(需求交付周期、开发交付周期、交付吞吐量)、交付质量(线上缺陷密度 、故障恢复时间、首次提测通过率、单元测试覆盖率、代码评审通过率)、交付能力360度反馈等多个维度。那么多维度的数据,该如何计算呢?

降维技术提供了一种方法,它捕获数据中的基本信息,同时丢弃冗余或信息较少的特征。

数据降维,至少有以下几点好处:

  • 使数据集易使用
  • 降低算法计算开销
  • 去除噪声
  • 结果易懂
  • 发现隐性相关变量

降维主要实现技术有很多,比如主成分分析(PCA)线性判别分析(LDA)奇异值分解(SVD)因子分析(FA)独立成分分析(ICA)

其中,PCA 的应用目前最为广泛。

01、什么是PCA?

PCA = 主成分分析(Principal Component Analysis)

PCA是一种数学降维方法, 利用正交变换 (orthogonal transformation)把一系列可能线性相关的变量转换为一组线性不相关的新变量,也称为主成分,从而利用新变量在更小的维度下展示数据的特征。

简单来说,就是找出一个或几个最主要的特征,然后进行分析。

注意:

降维是通过减少数据中的指标以化简数据的过程

这里的减少指标,并不是随意加减,而是用复杂的数理知识,得到几个"综合指标"来代表整个数据。

而这里的综合指标就是所谓的主成分

它不是原来的指标中的任何一个,而是由所有原有指标数据线性组合而来。

02、实现步骤

将数据转换为N个主成分的步骤:

  1. 去除平均值
  2. 计算协方差矩阵
  3. 计算协方差矩阵的特征值和特征向量
  4. 将特征值从小到大排序,保留前N个
  5. 5. 将数据转换到这N个特征向量构建的新空间中

03、优缺点及适用场景

优点降低数据复杂性,识别多个特征缺点可能损失有用信息适用场景数值型数据

04、举例

1、一个简单的测试数据集

1.1 原始数据文件testSet.txt,19K

1.2 打印矩阵长度

1.3 效果图

2、另一个半导体制造数据集

2.1 原始数据:共1567行数据,有590列维度

2.2 打印矩阵长度、数据及均值

2.3 画出方差变化与特征个数的关系图

2.4 得出结论

从方差百分比与主成分个数之间的关系可以看出,大概只需要6个特征,就可以包括大部分的方差,后面的成分并不会损失太多信息。如果保留前6个主成分,则数据集就实现了从590个特征简化到6个特征,实现了近100:1的压缩。

3、完整代码

'''
Author: wujianming
Date: 2023-10-18
'''
import numpy as np 
import matplotlib.pyplot as plt 
from pylab import *
mpl.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

def loadData(filename,delim='\t'):
    fr=open(filename)
    stringArr=[line.strip().split(delim) for line in fr.readlines()]
    dataArr=[list(map(float,line)) for line in stringArr]
    return np.array(dataArr)

# 主成分分析
def pca(dataArr,topN=9999999):
    """
    dataArr为数据集
    topN参数可选,表示应用的N个特征,
    或原数据中全部特征
    """
    meanVal=np.mean(dataArr,axis=0)
    newArr=dataArr-meanVal
    # 协方差矩阵
    covMat=np.cov(np.mat(newArr),rowvar=0)
    eigVal,eigVec=np.linalg.eig(np.mat(covMat))
    index=np.argsort(eigVal)
    index=index[:-(topN+1):-1]
    vecArr=eigVec[:,index]
    lowDataMat=np.mat(newArr)*vecArr
    retDataArr=(lowDataMat*vecArr.T)+meanVal
    return lowDataMat,retDataArr

def load_clear_Data():
    import pandas as pd
    data=pd.read_csv('./secom.data',sep=' ',header=None,index_col=None)
    for i in range(data.shape[1]):
        data[i]=data[i].fillna(data[i].mean(),)    
    dataArr=np.array(data)
    return dataArr

def plot_var(dataMat):
    meanVals = np.mean(dataMat, axis=0)
    meanRemoved = dataMat - meanVals 
    covMat = np.cov(meanRemoved, rowvar=0)
    eigVals,eigVects = np.linalg.eig(np.mat(covMat))
    eigValInd = np.argsort(eigVals)
    eigValInd = eigValInd[::-1]
    sortedEigVals = eigVals[eigValInd]
    total = np.sum(sortedEigVals)
    varPercentage = sortedEigVals/total*100
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.plot(range(1, 21), varPercentage[:20], marker='^')
    plt.xlabel('主成分个数')
    plt.ylabel('方差百分比')
    plt.show()

def plot_data(dataArr,reconMat):
    fig=plt.figure()
    ax=fig.add_subplot(111)
    ax.scatter(dataArr[:,0],dataArr[:,1],marker='^',s=90,c='b')
    ax.scatter(np.array(reconMat[:,0]),np.array(reconMat[:,1]),marker='o',s=50,c='r')
    plt.show()

if __name__=='__main__':
    dataArr=loadData('./testSet.txt')
    lowData,reconMat=pca(dataArr,1)
    plot_data(dataArr,reconMat)
    
    dataArr2=load_clear_Data()
    plot_var(dataArr2)

05、小结

为什么主成分可以代表原来那么多的指标呢?

其实我们仔细看一下,原来的许多指标是有相关性的,比如线上缺陷密度与单元测试覆盖率、代码评审通过率等有关联性。

通过降维就可以帮助我们去除这些指标中重叠、多余的信息,把数据最本质和关键的信息提取出来。

相关文章

传奇世界:法师玩家的魔法盾和风影盾,到底哪个是“高配技能”?

2003年的夏天,我永远都忘不了第一次登录传奇世界时的场景。站在中州城门口,看着来来往往的玩家,听着悦耳的背景音乐,那种感觉至今难忘。记得刚进游戏时,我就被法师这个职业深深吸引。你们还记得吗?那时候的新手村里,到处都是挥舞着木剑的战士和拿着木弓的道士,而法师们却在那优雅地挥动法杖,随手一个火球术就能
2025-09-15 19:52:30

传奇世界:这件护腕改写沙巴克格局,为何让老玩家又爱又恨?

还记得当年那个让无数玩家又爱又恨的装备吗?不是麻痹戒指,也不是复活神戒,而是一个戴在手腕上的玩意儿——沉默护腕。这玩意儿一出现,整个传奇世界的PK格局都被掀了个底朝天!2009年那个飞升天界的大版本,中州城里突然冒出一棵参天神木,上面挂满了闪着金光的宝物。那时候为了抢穿云箭,行会之间差点没把脑浆子打
2025-09-15 05:36:27

热血传奇:半月是没人要还是神技?老玩家都懂

还记得当年在网吧熬夜刷尸王殿的日子吗?就为了那本泛着蓝光的技能书!说出来你可能不信,传奇里最值钱的玩意儿,名字居然和商店里15级就能买的垃圾装备一模一样。今天咱们就聊聊这个让老玩家又爱又恨的名字——"半月"。新手时期谁没在比奇城里买过那把弯月似的破刀?15级就能戴,攻击力还不如乌木剑,但胜在便宜又常
2025-09-14 18:17:42

《丝路传说》丝路传声:帮派指挥利器,称霸战场的关键

在《丝路传说》中,帮派指挥系统是称霸战场的核心工具,其通过实时战略部署、资源整合与跨阵营协作,将个体战力转化为团队优势。以下从功能设计、战术应用及实战案例三个维度解析其价值一、帮派指挥系统的核心功能动态战场地图与标记系统实时战场监控:指挥官可在大地图上标记敌方据点、资源点或伏击区域,成员通过界面同步
2025-09-13 14:51:58

《巫师》剧集第四季将于10月底播出 叶奈法身姿迷人

近日外媒Redanian Intelligence报道称,《巫师》剧集第四季将于2025年10月底播出,预计是10月30日。据悉,第四季全8集将一次性上线,不会分为上下部分播出。 在《巫师》剧集第四季中,观众将看到利亚姆・海姆斯沃斯接替亨利・卡维尔饰演杰洛特。而第五季将是该剧的最后一季,预计于202
2025-09-13 02:28:28

游戏推荐四:T3多英雄,对战竞技射击手游

一,游戏介绍这是一款尚处在超超超早期的、轻松休闲的英雄射击手游。如果要用几个关键词来形容这款游戏,我们心目中有这些词:射击、多英雄、对战、轻松、年轻、科幻。现阶段,大家可以在现有的3个模式中体验到7位风格不同的英雄。游戏玩家好评:我个人还是很喜欢这个游戏的。目前来看,角色跟皮肤都还挺容易获得的。匹配
2025-09-12 15:05:11

网站内容来自网络,如有侵权请联系我们,立即删除!
Copyright © 蜜柚百科 琼ICP备2023010365号-5