PCA-Principal Components Analysis数学原理

PCA(主成分分析)用于处理高维数据,通过线性变换减少特征冗余。本文深入探讨PCA的动机、定义、相关知识、处理流程及特征值的重要性,揭示PCA如何增强数据的表征能力并进行有效的降维。
转载请注明出处:blog.csdn.net/yobobobo

最近自学的重点是特征工程,首当其冲的当然是PCA,可是看了好几篇国内搜索靠前的博客大部分都是做法而不是原理,为什么协方差矩阵的特征值最大就说明投影到这个特征向量上比其他的好呢?对于机器学习大部分时间都是调用别人写好的库就像是个用着黑盒子的感觉,特来一发原理,附上完整的数学推导。

Motivation———PCA的作用是什么,我们为什么要用PCA

  • 你手上有一批数据,但是特征太多,你感觉数据太稀疏了

  • 你选了一堆特征,但是感觉某些特征之间的相关性太高了,比如用户月消费预测的时候,你选了用户身高以及用户性别这两个特征,一般男生的身高比较高,你觉得特征有点冗余

  • 你的小霸王内存不够,内存只有4个G,装不下太大的矩阵,但是你又不想减少训练数据,N*M的数据集,你不想减少N,下一步只有减少M了

  • 你想减少M了,可是你又不知道哪些特征该扔掉,就算你选出了一些看起来不是那么好的特征扔掉你又怕这些特征扔掉后对模型的影响很大


Definition———PCA是啥?

  • wiki翻译----PCA是一门数据统计方案,通过一个正交转换把可能线性相关的变量转换为几乎线型无关的变量(这些变量称作主成分)。主成分的数量比原来的变量数量更少或者一致。
  • 通俗地讲,PCA就是把N维的向量经过线型变换转化为K维的向量(K<=N),需要注意的是,并不是把N-K维的特征扔掉了。

  • 向量点积的几何意义
    • ab=abcosθ
    • Drawing
    • acosθ 相当于把a投影到b向量上的长度 当 b 为1的时候,a*b就相当于把a投影到向量b上的长度
  • 协方差矩阵
    • 方差足够了吗?
    • 以前上小学的时候,老师经常把某个学生的成绩记录作为讲解方差的经典例子,A的成绩均值和B的成绩均值一样,这时候怎么区分谁更好呢?
    • 答日:A的方差比B的方差更小,说明A的成绩更加稳定。
    • 然而这是小学,处理一维的数据已经足够了。
    • 现实中的数据都是远远超过一维的,现在广告推荐的大规模LR训练特征可达上亿维度,方差已经不能再像以前一样:“较均值,取方差”。
    • 协方差登场
    • 定义: cov(a,b)=ni=1(XiX)(YiY)n1
    • 意义:表示两个数据的线型相关性,当 cov(a,b) > 0的时候,说明 a b 的是正相关的, a 越大 b 越大,反之时负相关的,为0则说明两者线型无关。
    • 协方差矩阵
      顾名思义,就是不同变量之间的协方差组成的矩阵
      cov(a,a)cov(b,a)cov(c,a)cov(a,b)cov(b,b)cov(c,b)cov(a,c)cov(b,c)cov(c,c)


Main Process———处理流程

  • 均值置0,把每一维度的特征都减去该维特征的均值,为了接下来的运算以及解释方便点
  • 求出数据集X的协方差矩阵M
  • 求解M的特征值对角阵以及特征向量矩阵
  • 选取前K大的特征值,将其对应的特征向量作为列向量,组成一个矩阵T
  • X*T,得到降维之后的矩阵,完毕。

Why———为什么特征值这么神奇

  • 核心:方差越大,数据的表征能力越强
    • 给你两组数据,一组数据基本集中于某个点,另一组数据零零散散的,你认为哪个数据更好?一般都认为后者更好,因为前者可能是数据太少了,数据都集中于某一个点,这样的数据训练出来的模型泛化能力很差,后者的数据可以认为比较样本空间覆盖度高,训练出来的模型泛化能力更强。
    • 从上一个例子,我们可以认为:方差越大,数据的表征能力越强

详细———线型变换

  • 我认为当前数据的方差还不够大,可以把数据投影到另一个向量空间后以增大数据的方差,提升数据的表征能力
  • 根据第3节,数据投影可以表示为乘以一个模为1的向量,根据方差最大的思想,可以得到这样的目标函数
    • w(1)=
<think>好的,我现在需要回答用户关于基于PCA的智能运维异常检测算法的基本原理的问题。首先,我得回顾一下PCA的基础知识,以及它在异常检测中的应用。 主成分分析(PCA)是一种常用的降维技术,通过线性变换将高维数据投影到低维空间,保留主要特征。在智能运维中,异常检测通常涉及处理高维时序数据,比如服务器指标、日志数据等。用户提到智能运维,可能涉及引用[4]中的归因分析和根因分析,以及引用[5]中提到的处理高维数据的方法。 首先,PCA的基本原理是将数据投影到方差最大的几个主成分上,减少维度同时保留大部分信息。在异常检测中,正常数据通常在主成分上有较高的投影,而异常可能分布在较低方差的方向上。所以,重建误差(原始数据与重建数据之间的差异)可能作为异常评分。 接下来,我需要结合引用中的内容。引用[3]提到基于正常数据的特征进行异常检测,这与PCA的思路类似,即利用正常数据的主成分特征来判断异常。引用[5]也提到使用PCA等降维技术减少计算开销,这可能与处理高维运维数据相关。 然后,需要具体说明PCA在异常检测中的步骤:数据标准化、计算协方差矩阵、特征分解得到主成分、选择k个主成分、计算重建误差作为异常分数。这里可能需要数学公式,比如重建误差的计算,用LaTeX表示,如$$ \text{Reconstruction Error} = ||\mathbf{x} - \mathbf{U}_k\mathbf{U}_k^T\mathbf{x}||^2 $$,其中$\mathbf{U}_k$是前k个特征向量组成的矩阵。 还要考虑引用[1]中提到的降维技术的工程目标,如处理高维数据痛点,PCA在这里的作用是降低维度,同时保留主要结构,便于后续异常检测。引用[2]提到的算法模型注册和预处理算法可能涉及PCA作为预处理步骤,比如在特征提取阶段使用。 需要确保回答结构清晰,分步骤解释,并引用相关引用内容。例如,在解释重建误差时,可以提到引用[3]中的基于正常数据特征的方法,或引用[5]中处理高维数据的建议。此外,用户的问题可能关注智能运维的具体应用,所以需要结合运维场景,如监控指标中的异常点检测,减少误报(如引用[4]中的归因分析)。 最后,生成相关问题时要围绕PCA在异常检测中的扩展,比如参数选择、与其他方法对比、实际案例等,参考引用中的降维方法对比(引用[1])和根因分析(引用[4]、[5])。</think>基于主成分分析(PCA)的智能运维异常检测算法原理可分为以下核心步骤: ### 一、数据标准化预处理 对多维运维指标(CPU、内存、网络流量等)进行标准化处理: $$ \tilde{x}_i = \frac{x_i - \mu_i}{\sigma_i} $$ 确保各维度数据具有可比性,避免量纲差异导致主成分偏移[^1] ### 二、主成分空间构建 1. 计算协方差矩阵: $$ \Sigma = \frac{1}{n-1}X^TX $$ 2. 特征值分解获取主成分方向: $$ \Sigma = U\Lambda U^T $$ 3. 选择前k个最大特征值对应特征向量构建投影矩阵$U_k$,保留85%-95%方差贡献率[^5] ### 三、异常检测机制 1. **重建误差计算**: $$ \text{Error} = ||x - U_kU_k^Tx||_2^2 $$ 异常点在低方差方向上的投影会导致较大重建误差[^3] 2. **统计量构建**: - Hotelling's T²统计量监测主成分空间异常: $$ T^2 = x^TU_k\Lambda_k^{-1}U_k^Tx $$ - SPE(Squared Prediction Error)统计量捕获残差空间异常[^1] ### 四、阈值判定 采用核密度估计或极值理论设定动态阈值,超过阈值的样本判定为异常。该方法特别适合检测多维指标间的关联异常,如服务器多个性能指标的协同偏离[^4] ```python from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler def pca_anomaly_detect(data, explained_variance=0.95): # 标准化 scaler = StandardScaler() scaled_data = scaler.fit_transform(data) # 自适应选择主成分 pca = PCA(n_components=explained_variance) pca.fit(scaled_data) # 计算重建误差 transformed = pca.transform(scaled_data) reconstructed = pca.inverse_transform(transformed) errors = np.linalg.norm(scaled_data - reconstructed, axis=1)**2 return errors ```
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值