总方差公式(方差分解公式)证明

验证总方差公式 v a r ( X ) = E [ v a r ( X ∣ Y ) ] + v a r ( E [ X ∣ Y ] ) var(X) = E[var(X|Y)] + var(E[X|Y]) var(X)=E[var(XY)]+var(E[XY]).

主要要知道基本的公式 v a r ( X ) = E [ X 2 ] − ( E [ X ] ) 2 var(X) = E[X^2]-(E[X])^2 var(X)=E[X2](E[X])2 以及 E [ E [ X ∣ Y ] ] = E [ X ] E[E[X|Y]] = E[X] E[E[XY]]=E[X]. 然后可以完成证明.

证明: 先看等号右边第一项, 因为 v a r ( X ∣ Y ) = E [ X 2 ∣ Y ] − ( E [ X ∣ Y ] ) 2 var(X|Y) = E[X^2|Y] - (E[X|Y])^2 var(XY)=E[X2Y](E[XY])2,
所以 E [ v a r ( X ∣ Y ) ] = E [ X 2 ] − E [ ( E [ X ∣ Y ] ) 2 ] E[var(X|Y)] = E[X^2] - E[(E[X|Y])^2] E[var(XY)]=E[X2]E[(E[XY])2]

之后看等号右边第二项, 因为
v a r ( E [ X ∣ Y ] ) = E [ ( E [ X ∣ Y ] ) 2 ] − ( E [ E [ X ∣ Y ] ] ) 2 = E [ ( E [ X ∣ Y ] ) 2 ] − ( E [ X ] ) 2 \begin{aligned} var(E[X|Y]) &= E[(E[X|Y])^2] - (E[E[X|Y]])^2 \\ &=E[(E[X|Y])^2] - (E[X])^2 \end{aligned} var(E[XY])=E[(E[XY])2](E[E[XY]])2=E[(E[XY])2](E[X])2
所以,
E [ v a r ( X ∣ Y ) ] + v a r ( E [ X ∣ Y ] ) = E [ X 2 ] − ( E [ X ] ) 2 = v a r ( X ) \begin{aligned} &E[var(X|Y)] + var(E[X|Y])\\ =&E[X^2]-(E[X])^2 \\ =&var(X) \end{aligned} ==E[var(XY)]+var(E[XY])E[X2](E[X])2var(X)

### Kernel PCA 方差计算 在Kernel PCA中,方差的计算方式与标准PCA有所不同。由于Kernel PCA通过核函数映射数据到高维空间,在这个过程中并不显式执行特征值分解来获取协方差矩阵的特征向量和特征值。因此,直接应用传统PCA中的方差解释比例方法变得不可行。 然而,为了评估每个主成分的重要性,仍然可以利用重构误差作为衡量指标之一。对于给定的数据点\( \mathbf{x}_i \),其经过Kernel PCA变换后的低维表示为\( \mathbf{z}_i \),再由该低维表示重建回原始输入空间得到近似值\( \hat{\mathbf{x}}_i \)[^3]。此时,可以通过比较原数据与其重建版本之间的差异来间接反映各主成分所携带的信息量: \[ \text{Reconstruction Error} = ||\mathbf{x}_i - \hat{\mathbf{x}}_i||^2 \] 尽管如此,当提到具体如何量化各个主成分对方差的贡献度时,通常还是依赖于`explained_variance_ratio_`属性提供的信息。这表明即使是在Kernel PCA的情况下,也可以获得类似于线性PCA中方差解释比率的结果[^2]。 值得注意的是,实际操作层面,scikit-learn库并没有直接提供针对Kernel PCA的方差解释率接口。这是因为内核技巧使得我们无法像在线性情况下那样简单地访问这些统计特性。不过,用户依然能够基于模型对象调用`.eigenvalues_`(如果可用的话),并通过它们手动推导出相应的方差占比。 ```python import numpy as np from sklearn.decomposition import KernelPCA # 假设df_z_components已经定义好并标准化处理过 kernel_pca = KernelPCA(n_components=5, fit_inverse_transform=True).fit(df_z_components) # 获取特征值 eigenvalues = kernel_pca.eigenvalues_ # 计算方差以及单个主成分对应的方差百分比 total_variance = sum(eigenvalues) variance_ratios = eigenvalues / total_variance * 100 print(f"Individual Component Variance Ratios (%): {np.round(variance_ratios, decimals=2)}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值