使用 scikit 学习重构误差分析的快速 ICA

Posted

技术标签:

【中文标题】使用 scikit 学习重构误差分析的快速 ICA【英文标题】:Fast ICA using scikit learn- reconstruction error analysis 【发布时间】:2018-01-27 05:40:36 【问题描述】:

我正在尝试在 scikitLearn 中使用 fastICA 程序。出于验证目的,我试图了解基于PCAICA 的信号重建之间的区别。

观察到的信号的原始数量是 6,我尝试使用 3 个重建独立分量。问题是ICAPCA 无论我使用什么规范都会导致相同的重建错误。有人能解释一下这里发生的事情吗?

代码如下:

 pca = PCA(n_components=3)
 icamodel = FastICA(n_components=3,whiten=True)

 Data = TrainingDataDict[YearSpan][RiskFactorNames]

 PCR_Dict[YearSpan] = pd.DataFrame(pca.fit_transform(Data), 
                                   columns=['PC1','PC2','PC3'],index=Data.index)

 ICR_Dict[YearSpan] = pd.DataFrame(icamodel.fit_transform(Data), 
                                   columns=['IC1','IC2','IC3'],index=Data.index)

'------------------------Inverse Transform of the IC and PCs -----------'

 PCA_New_Data_Df = pd.DataFrame(pca.inverse_transform(PCR_Dict[YearSpan]),
                                   columns =['F1','F2','F3'],index = Data.index)

 ICA_New_Data_Df = pd.DataFrame(icamodel.inverse_transform(ICR_Dict[YearSpan]),
                                   columns =['F1','F2','F3'],index = Data.index)

下面是我测量重构误差的方法

'-----------reconstruction errors------------------'
 print 'PCA reconstruction error L2 norm:',np.sqrt((PCA_New_Data_Df - Data).apply(np.square).mean())

 print 'ICA reconstruction error L2 norm:',np.sqrt((ICA_New_Data_Df - Data).apply(np.square).mean())

 print 'PCA reconstruction error L1 norm:',(PCA_New_Data_Df - Data).apply(np.absolute).mean()

 print 'ICA reconstruction error L1 norm:',(ICA_New_Data_Df - Data).apply(np.absolute).mean()

下面是PCICs的尾部说明

PC Stats :  ('2003', '2005') 
       Kurtosis  Skewness
PCR_1 -0.001075 -0.101006
PCR_2  1.057140  0.316163
PCR_3  1.067471  0.047946 

IC Stats :  ('2003', '2005') 
       Kurtosis  Skewness
ICR_1 -0.221336 -0.204362
ICR_2  1.499278  0.433495
ICR_3  3.654237  0.072480 

以下是重构的结果

PCA reconstruction error L2 norm: 
SPTR        0.000601
SPTRMDCP    0.001503
RU20INTR    0.000788
LBUSTRUU    0.002311
LF98TRUU    0.001811
NDDUEAFE    0.000135
dtype: float64 

ICA reconstruction error L2 norm : 
SPTR        0.000601
SPTRMDCP    0.001503
RU20INTR    0.000788
LBUSTRUU    0.002311
LF98TRUU    0.001811
NDDUEAFE    0.000135

即使L1 规范也是一样的。我有点糊涂了!

【问题讨论】:

【参考方案1】:

抱歉回复晚了,希望这个回答对你还是有帮助的。

fastICA 可以看作是白化(可以通过 PCA 实现)加上正交旋转(正交旋转,使得估计的源尽可能非高斯)。

正交旋转不影响 ICA 解的重构误差,因此 PCA 和 ICA 的重构误差相同。

在心理学中经常使用旋转 PCA 解决方案(例如 Varimax 旋转)。然而,fastICA 中的正交旋转矩阵是通过迭代过程估计的(来自 Aapo Hyvärinen 的定点迭代方案)

【讨论】:

以上是关于使用 scikit 学习重构误差分析的快速 ICA的主要内容,如果未能解决你的问题,请参考以下文章

机器学习 —— 基础整理:特征提取之线性方法——主成分分析PCA独立成分分析ICA线性判别分析LDA

[机器学习与scikit-learn-28]:算法-回归-评估指标详解

Tensorflow 自动编码器 - 如何计算重构误差?

如何获取 Scikit-learn 的 svm 中的训练误差?

Scikit F-score 度量误差

scikit-learn 中的负平均绝对误差是多少?