FactorAnalysis#

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

FactorAnalysis 使用基於 SVD 的方法,執行所謂的 loading 矩陣(潛在變數到觀察變數的轉換)的最大似然估計。

請參閱 使用者指南 以瞭解更多資訊。

在 0.13 版本中新增。

參數:
n_componentsint,預設值 = None

潛在空間的維度,即在 transform 後獲得的 X 的成分數量。如果為 None,則 n_components 設定為特徵的數量。

tolfloat,預設值 = 1e-2

對數似然增加的停止容差。

copybool,預設值 = True

是否複製 X。如果為 False,則輸入 X 會在擬合期間被覆寫。

max_iterint,預設值 = 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_powerint,預設值 = 3

冪方法的迭代次數。預設值為 3。僅當 svd_method 等於 ‘randomized’ 時才使用。

rotation{‘varimax’, ‘quartimax’},預設值 = None

如果不是 None,則套用指定的旋轉。目前,已實作 varimax 和 quartimax。請參閱 「因子分析中分析旋轉的 varimax 準則」 H. F. Kaiser,1958 年。

在 0.24 版本中新增。

random_stateint 或 RandomState 執行個體,預設值 = 0

僅當 svd_method 等於 ‘randomized’ 時才使用。傳遞 int 以便在多個函數呼叫中獲得可重現的結果。請參閱 詞彙表

屬性:
components_形狀為 (n_components, n_features) 的 ndarray

具有最大變異數的成分。

loglike_形狀為 (n_iterations,) 的列表

每次迭代時的對數似然。

noise_variance_形狀為 (n_features,) 的 ndarray

每個特徵的估計雜訊變異數。

n_iter_int

執行的迭代次數。

mean_形狀為 (n_features,) 的 ndarray

從訓練集中估計的每個特徵的經驗平均值。

n_features_in_int

fit 期間看到的特徵數量。

在 0.24 版本中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。僅當 X 具有全部為字串的特徵名稱時才定義。

在 1.0 版本中新增。

另請參閱

PCA

主成分分析也是一個潛在的線性變數模型,但它假設每個特徵的雜訊變異數相等。這種額外的假設使機率 PCA 更快,因為它可以用封閉形式計算。

FastICA

獨立成分分析,一個具有非高斯潛在變數的潛在變數模型。

參考資料

  • 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 將轉換器擬合到 Xy,並傳回轉換後的 X 版本。

參數:
X形狀為 (n_samples, n_features) 的類陣列

輸入樣本。

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列,預設值 = None

目標值(對於無監督轉換,則為 None)。

**fit_paramsdict

其他擬合參數。

返回:
X_new形狀為 (n_samples, n_features_new) 的 ndarray 陣列

轉換後的陣列。

get_covariance()[source]#

使用 FactorAnalysis 模型計算資料共變異數。

cov = components_.T * components_ + diag(noise_variance)

返回:
cov形狀為 (n_features, n_features) 的 ndarray

資料的估計共變異數。

get_feature_names_out(input_features=None)[原始碼]#

取得轉換後的輸出特徵名稱。

輸出特徵名稱會以小寫的類別名稱作為前綴。例如,如果轉換器輸出 3 個特徵,則輸出特徵名稱為:["class_name0", "class_name1", "class_name2"]

參數:
input_features字串或 None 的類陣列,預設為 None

僅用於驗證特徵名稱是否與 fit 中看到的名稱一致。

返回:
feature_names_out字串物件的 ndarray

轉換後的特徵名稱。

get_metadata_routing()[原始碼]#

取得此物件的元數據路由。

請查看 使用者指南,了解路由機制如何運作。

返回:
routingMetadataRequest

一個封裝路由資訊的 MetadataRequest

get_params(deep=True)[原始碼]#

取得此估算器的參數。

參數:
deepbool,預設為 True

如果為 True,將返回此估算器及其包含的子物件(也是估算器)的參數。

返回:
paramsdict

參數名稱對應到其值。

get_precision()[原始碼]#

使用 FactorAnalysis 模型計算資料精確度矩陣。

返回:
precision形狀為 (n_features, n_features) 的 ndarray

資料的估計精確度。

score(X, y=None)[原始碼]#

計算樣本的平均對數似然率。

參數:
X形狀為 (n_samples, n_features) 的 ndarray

資料。

y已忽略

已忽略的參數。

返回:
llfloat

當前模型下樣本的平均對數似然率。

score_samples(X)[原始碼]#

計算每個樣本的對數似然率。

參數:
X形狀為 (n_samples, n_features) 的 ndarray

資料。

返回:
ll形狀為 (n_samples,) 的 ndarray

當前模型下每個樣本的對數似然率。

set_output(*, transform=None)[原始碼]#

設定輸出容器。

有關如何使用此 API 的範例,請參閱 介紹 set_output API

參數:
transform{“default”, “pandas”, “polars”},預設為 None

配置 transformfit_transform 的輸出。

  • "default":轉換器的預設輸出格式

  • "pandas":DataFrame 輸出

  • "polars":Polars 輸出

  • None:轉換配置不變

在 1.4 版本中新增:新增了 "polars" 選項。

返回:
self估算器實例

估算器實例。

set_params(**params)[原始碼]#

設定此估算器的參數。

此方法適用於簡單的估算器以及巢狀物件(例如 Pipeline)。後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**paramsdict

估算器參數。

返回:
self估算器實例

估算器實例。

transform(X)[原始碼]#

使用模型對 X 應用降維。

計算潛在變數的預期平均值。請參閱 Barber, 21.2.33 (或 Bishop, 12.66)。

參數:
X形狀為 (n_samples, n_features) 的類陣列

訓練資料。

返回:
X_new形狀為 (n_samples, n_components) 的 ndarray

X 的潛在變數。