因子分析#
- class sklearn.decomposition.FactorAnalysis(n_components=None, *, tol=0.01, copy=True, max_iter=1000, noise_variance_init=None, svd_method='randomized', iterated_power=3, rotation=None, random_state=0)[source]#
因子分析 (FA)。
一个简单的带有高斯潜在变量的线性生成模型。
观测数据被认为是较低维度潜在因子经线性变换和附加高斯噪声生成。不失一般性,这些因子服从零均值和单位协方差的高斯分布。噪声也服从零均值分布,并具有任意对角协方差矩阵。
如果我们进一步限制模型,假设高斯噪声甚至是各向同性的(所有对角线元素都相同),我们将得到
PCA
。因子分析使用基于 SVD 的方法,对所谓的
载荷
矩阵(将潜在变量转换为观测变量的变换)进行最大似然估计。在用户指南中阅读更多内容。
0.13 版本新增。
- 参数:
- n_components整型, 默认值=None
潜在空间的维度,即
transform
后获得的X
的分量数量。如果为 None,则n_components
设置为特征数量。- tol浮点型, 默认值=1e-2
对数似然增加的停止容差。
- copy布尔型, 默认值=True
是否创建
X
的副本。如果为False
,则在拟合期间输入X
将被覆盖。- max_iter整型, 默认值=1000
最大迭代次数。
- noise_variance_init形状为 (n_features,) 的类数组, 默认值=None
每个特征的噪声方差的初始猜测。如果为 None,则默认设置为
np.ones(n_features)
。- svd_method{'lapack', 'randomized'}, 默认值='randomized'
要使用的 SVD 方法。如果为 ‘lapack’,则使用
scipy.linalg
中的标准 SVD;如果为 ‘randomized’,则使用快速randomized_svd
函数。默认为 ‘randomized’。对于大多数应用来说,‘randomized’ 将足够精确,同时提供显著的速度增益。通过为iterated_power
设置更高的值也可以提高精度。如果这还不够,为了获得最大精度,应选择 ‘lapack’。- iterated_power整型, 默认值=3
幂方法的迭代次数。默认为 3。仅在
svd_method
等于 ‘randomized’ 时使用。- rotation{'varimax', 'quartimax'}, 默认值=None
如果不为 None,则应用指示的旋转。目前已实现 varimax 和 quartimax。参见 H. F. Kaiser, 1958 年的“因子分析中解析旋转的 varimax 准则”。
0.24 版本新增。
- random_state整型或 RandomState 实例, 默认值=0
仅在
svd_method
等于 ‘randomized’ 时使用。传入一个整型值可确保在多次函数调用中结果可复现。参见术语表。
- 属性:
- components_形状为 (n_components, n_features) 的
ndarray
具有最大方差的分量。
- loglike_形状为 (n_iterations,) 的列表
每次迭代的对数似然。
- noise_variance_形状为 (n_features,) 的
ndarray
每个特征的估计噪声方差。
- n_iter_整型
运行的迭代次数。
- mean_形状为 (n_features,) 的
ndarray
从训练集估计的每个特征的经验均值。
- n_features_in_整型
在拟合期间见到的特征数量。
0.24 版本新增。
- feature_names_in_形状为 (
n_features_in_
,) 的ndarray
在拟合期间见到的特征名称。仅当
X
的所有特征名称均为字符串时定义。1.0 版本新增。
- components_形状为 (n_components, n_features) 的
另请参见
参考文献
David Barber,《贝叶斯推理与机器学习》,算法 21.1。
Christopher M. Bishop:《模式识别与机器学习》,第 12.2.4 章。
示例
>>> from sklearn.datasets import load_digits >>> from sklearn.decomposition import FactorAnalysis >>> X, _ = load_digits(return_X_y=True) >>> transformer = FactorAnalysis(n_components=7, random_state=0) >>> X_transformed = transformer.fit_transform(X) >>> X_transformed.shape (1797, 7)
- fit(X, y=None)[source]#
使用基于 SVD 的方法将 FactorAnalysis 模型拟合到
X
。- 参数:
- X形状为 (n_samples, n_features) 的类数组
训练数据。
- y已忽略
已忽略参数。
- 返回:
- self对象
FactorAnalysis 类实例。
- fit_transform(X, y=None, **fit_params)[source]#
拟合数据,然后进行转换。
使用可选参数
fit_params
将转换器拟合到X
和y
,并返回X
的转换版本。- 参数:
- X形状为 (n_samples, n_features) 的类数组
输入样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组, 默认值=None
目标值(无监督转换时为 None)。
- **fit_params字典
额外拟合参数。
- 返回:
- X_new形状为 (n_samples, n_features_new) 的
ndarray
数组 转换后的数组。
- X_new形状为 (n_samples, n_features_new) 的
- get_covariance()[source]#
使用 FactorAnalysis 模型计算数据协方差。
cov = components_.T * components_ + diag(noise_variance)
- 返回:
- cov形状为 (n_features, n_features) 的
ndarray
数据的估计协方差。
- cov形状为 (n_features, n_features) 的
- get_feature_names_out(input_features=None)[source]#
获取转换的输出特征名称。
输出特征名称将以小写类名作为前缀。例如,如果转换器输出 3 个特征,则输出特征名称为:
["class_name0", "class_name1", "class_name2"]
。- 参数:
- input_features字符串类数组或 None, 默认值=None
仅用于根据
fit
中看到的名称验证特征名称。
- 返回:
- feature_names_out字符串对象的
ndarray
转换后的特征名称。
- feature_names_out字符串对象的
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查阅用户指南,了解路由机制的工作原理。
- 返回:
- routingMetadataRequest
一个封装路由信息的
MetadataRequest
。
- get_params(deep=True)[source]#
获取此估计器的参数。
- 参数:
- deep布尔型, 默认值=True
如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。
- 返回:
- params字典
参数名称映射到其值。
- get_precision()[source]#
使用 FactorAnalysis 模型计算数据精度矩阵。
- 返回:
- precision形状为 (n_features, n_features) 的
ndarray
数据的估计精度。
- precision形状为 (n_features, n_features) 的
- score(X, y=None)[source]#
计算样本的平均对数似然。
- 参数:
- X形状为 (n_samples, n_features) 的
ndarray
数据。
- y已忽略
已忽略参数。
- X形状为 (n_samples, n_features) 的
- 返回:
- ll浮点型
当前模型下样本的平均对数似然。
- score_samples(X)[source]#
计算每个样本的对数似然。
- 参数:
- X形状为 (n_samples, n_features) 的
ndarray
数据。
- X形状为 (n_samples, n_features) 的
- 返回:
- ll形状为 (n_samples,) 的
ndarray
当前模型下每个样本的对数似然。
- ll形状为 (n_samples,) 的
- set_output(*, transform=None)[source]#
设置输出容器。
有关如何使用此 API 的示例,请参阅set_output API 简介。
- 参数:
- transform{"default", "pandas", "polars"}, 默认值=None
配置
transform
和fit_transform
的输出。"default"
: 转换器的默认输出格式"pandas"
: DataFrame 输出"polars"
: Polars 输出None
: 转换配置未更改
1.4 版本新增: 增加了
"polars"
选项。
- 返回:
- self估计器实例
估计器实例。