我正在尝试将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重建原始源。很简单吧?但是,我有以下困惑:
FastICA究竟回归了什么?对于以下代码:
ica = FastICA(n_components=3)
S_rec = ica.fit_transform(X)
在这种情况下'ica'是什么?我试图打印该值,但没有返回任何内容。我试图找出'ica'是什么,以便准确理解ica.fit_transform(X)正在做什么。这里对'X'应用了什么转换?
'FastICA'和'fastica'有什么区别?这两个函数也有不同的文档页面:
我的问题是,它们都为相同的输入数据返回不同的混合矩阵。我认为我的理解并没有做错任何事。
如果有人可以解释这一点或指出我做错了什么,那将是一个很大的帮助。 谢谢!
答案 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不是一种确定性算法,因此每次都可以获得不同的解决方案。