fastica#

sklearn.decomposition.fastica(X, n_components=None, *, algorithm='parallel', whiten='unit-variance', fun='logcosh', fun_args=None, max_iter=200, tol=0.0001, w_init=None, whiten_solver='svd', random_state=None, return_X_mean=False, compute_sources=True, return_n_iter=False)[source]#

执行快速独立成分分析。

本实现基于 [1]

用户指南 中了解更多信息。

参数:
Xshape 为 (n_samples, n_features) 的 array-like

训练向量,其中 n_samples 是样本数,n_features 是特征数。

n_componentsint, default=None

使用的成分数量。如果传入 None,则使用所有成分。

algorithm{‘parallel’, ‘deflation’}, 默认=’parallel’

指定 FastICA 使用的算法。

whitenstr 或 bool, 默认=’unit-variance’

指定使用的白化(whitening)策略。

  • 如果为 ‘arbitrary-variance’,则使用方差任意的白化处理。

  • 如果为 ‘unit-variance’,则对白化矩阵进行重缩放,以确保每个恢复出的源具有单位方差。

  • 如果为 False,则认为数据已经过白化,不再执行白化操作。

在 1.3 版本更改: whiten 的默认值在 1.3 版本中更改为 ‘unit-variance’。

fun{‘logcosh’, ‘exp’, ‘cube’} 或可调用对象, 默认=’logcosh’

用于逼近负熵(neg-entropy)的 G 函数的函数形式。可以是 ‘logcosh’、‘exp’ 或 ‘cube’。你也可以提供自己的函数。它应该返回一个元组,包含该点处的函数值及其导数值。导数应沿其最后一个维度取平均值。示例:

def my_g(x):
    return x ** 3, (3 * x ** 2).mean(axis=-1)
fun_argsdict, 默认=None

发送给函数形式的参数。如果为空或 None,且 fun=’logcosh’,则 fun_args 取值为 {‘alpha’ : 1.0}。

max_iter整型, 默认为 200

要执行的最大迭代次数。

tolfloat, default=1e-4

一个正标量,表示解混矩阵(un-mixing matrix)被认为已收敛的容差。

w_init形状为 (n_components, n_components) 的 ndarray, 默认=None

初始解混数组。如果 w_init=None,则使用从正态分布中提取值的数组。

whiten_solver{“eigh”, “svd”}, 默认=”svd”

用于白化的求解器。

  • 如果问题是退化的,“svd” 在数值上更稳定,并且在 n_samples <= n_features 时通常更快。

  • n_samples >= n_features 时,“eigh” 通常更节省内存,且在 n_samples >= 50 * n_features 时可能更快。

1.2 版本新增。

random_stateint, RandomState instance or None, default=None

当未指定时,用于通过正态分布初始化 w_init。传入一个 int,以在多次函数调用中获得可重复的结果。参见 词汇表

return_X_meanbool, 默认=False

如果为 True,则同时返回 X_mean。

compute_sourcesbool, 默认=True

如果为 False,则不计算源,仅计算旋转矩阵。这在处理大数据时可以节省内存。默认为 True。

return_n_iterbool, default=False

是否返回迭代次数。

返回:
K形状为 (n_components, n_features) 的 ndarray 或 None

如果 whiten 为 ‘True’,K 是将数据投影到前 n_components 个主成分上的预白化矩阵。如果 whiten 为 ‘False’,K 为 ‘None’。

W形状为 (n_components, n_components) 的 ndarray

白化后对数据进行解混的方阵。如果 K 不为 None,混合矩阵是矩阵 W K 的伪逆,否则它是 W 的逆。

S形状为 (n_samples, n_components) 的 ndarray 或 None

估计的源矩阵。

X_mean形状为 (n_features,) 的 ndarray

特征上的平均值。仅在 return_X_mean 为 True 时返回。

n_iter整型

如果算法是 “deflation”,n_iter 是跨所有成分运行的最大迭代次数。否则,它们只是收敛所花费的迭代次数。仅当 return_n_iter 设置为 True 时返回。

注意事项

数据矩阵 X 被视为非高斯(独立)成分的线性组合,即 X = AS,其中 S 的列包含独立成分,A 是线性混合矩阵。简而言之,ICA 尝试通过估计解混矩阵 W 来“解混”数据,其中 S = W K X。虽然 FastICA 最初是为估计与特征数量相同数量的源而提出的,但通过设置 n_components < n_features 可以估计更少的源。在这种情况下,K 不是方阵,估计出的 A 是 W K 的伪逆。

此实现最初是针对 [n_features, n_samples] 形状的数据制作的。现在输入会在应用算法之前进行转置。这使得它对于 Fortran 顺序的输入稍微快一些。

References

[1]

A. Hyvarinen 和 E. Oja,“快速独立成分分析”,算法与应用,神经网络,13(4-5), 2000, pp. 411-430。

示例

>>> from sklearn.datasets import load_digits
>>> from sklearn.decomposition import fastica
>>> X, _ = load_digits(return_X_y=True)
>>> K, W, S = fastica(X, n_components=7, random_state=0, whiten='unit-variance')
>>> K.shape
(7, 64)
>>> W.shape
(7, 7)
>>> S.shape
(1797, 7)