我在学校的机器学习练习中尝试使用 scikit learn 模块。我正在尝试重建的练习已经在 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’ 有什么区别?这两个函数也有不同的文档页面:
- FastICA: http: //scikit-learn.org/stable/modules/generated/sklearn.decomposition.FastICA.html#sklearn.decomposition.FastICA
- fastica: http://ogrisel.github.io/scikit-learn.org/sklearn-tutorial/modules/generated/sklearn.decomposition.fastica.html
我的问题是,对于相同的数据输入,它们返回不同的混合矩阵。我认为我没有做错什么,至少在我理解的范围内是这样。
如果有人能解释这些,或者指出我是否做错了什么,将会对我有很大帮助。谢谢!
回答:
FastICA 到底返回什么?对于以下代码片段:[…] 在这种情况下,’ica’ 是什么?
FastICA 是一个类,因此调用它会返回一个对 .fastica 函数的 OOP 封装。换句话说,你得到的是 FastICA 类的一个实例的引用,它存储了你的初始配置(如组件数量),并可以通过 fit/transform 在任何数据上执行 ICA。
我尝试打印其值,但什么也没返回。我正在尝试找出 ‘ica’ 是什么,以便理解 ica.fit_transform(X) 到底在做什么。这里对 ‘X’ 应用了什么变换?
ICA 找到解混矩阵 W,然后将其应用于 X,因此 fit_transform(X) == X.dot(W)(+ 一些白化等,如果你在构造函数中请求了的话)。
‘FastICA’ 和 ‘fastica’ 有什么区别?这两个函数也有不同的文档页面:
没有区别。FastICA 是对 fastica 的面向对象封装,仅此而已。它实际上在 fit 期间调用 fastica。
我的问题是,对于相同的数据输入,它们返回不同的混合矩阵。我认为我没有做错什么,至少在我理解的范围内是这样。
FastICA 不是一个确定性算法,因此每次你可能会得到不同的解。