SciKit FastICA返回什么,FastICA和fastica之间有什么区别(两者都返回不同的值)?

时间:2016-06-22 09:40:09

标签: python machine-learning scikit-learn

我正在尝试将scikit学习模块用于学校的机器学习练习。我正在尝试重建的练习已经作为示例在sklearn ICA文档,使用ICA的盲源分离[http://scikit-learn.org/stable/auto_examples/decomposition/plot_ica_blind_source_separation.html#example-decomposition-plot-ica-blind-source-separation-py]。该示例基本上生成3个信号(或声音源),然后合并增加的噪声,然后尝试使用ICA重建原始源。很简单吧?但是,我有以下困惑:

  1. FastICA究竟回归了什么?对于以下代码:

    ica = FastICA(n_components=3)
    S_rec = ica.fit_transform(X)
    

    在这种情况下'ica'是什么?我试图打印该值,但没有返回任何内容。我试图找出'ica'是什么,以便准确理解ica.fit_transform(X)正在做什么。这里对'X'应用了什么转换?

  2. 'FastICA'和'fastica'有什么区别?这两个函数也有不同的文档页面:

    我的问题是,它们都为相同的输入数据返回不同的混合矩阵。我认为我的理解并没有做错任何事。

  3. 如果有人可以解释这一点或指出我做错了什么,那将是一个很大的帮助。 谢谢!

1 个答案:

答案 0 :(得分:3)

  

FastICA究竟回归了什么?对于以下代码:    [...]在这种情况下,'ica'是什么?

FastICA是一个类,因此调用它会在.fastica函数上返回一个OOP包装器。换句话说,您将获得对FastICA类实例的引用,该实例存储您的初始配置(例如组件数),并可用于对任何数据执行ica(通过fit / transform)。

  

我试图打印该值,但没有返回任何内容。我试图找出'ica'是什么,以便准确理解ica.fit_transform(X)正在做什么。这里对'X'应用了什么转换?

ICA找到 unmixing 矩阵W,然后将其应用于X,从而fit_transform(X)== X.dot(W)(如果您在构造函数中请求它,则会有一些白化等) )

  

'FastICA'和'fastica'有什么区别?这两个函数也有不同的文档页面:

没有区别。 FastICA是围绕fastica的面向对象的包装器,仅此而已。它实际上是calls fastica during fit

  

我的问题是,它们都为相同的输入数据返回不同的混合矩阵。我认为我的理解并没有做错任何事。

FastICA不是一种确定性算法,因此每次都可以获得不同的解决方案。