[英]Recovering features names of explained_variance_ratio_ in PCA with sklearn
[英]Sklearn PCA explained variance and explained variance ratio difference
我正在嘗試從特征向量中獲取方差。
PCA
中的explained_variance_ratio_
和explained_variance_
有什么區別?
不幸的是,@seralouk 使用的示例已經只有 2 個組件。 因此,對pca.explained_variance_ratio_
的解釋是不完整的。
分母應該是應用 PCA 之前原始特征集的pca.explained_variance_ratio_
的總和,其中分量的數量可以大於 PCA 中使用的分量的數量。
這是使用 iris 數據集對此數量的解釋。
import numpy as np
from sklearn import datasets
from sklearn.decomposition import PCA
iris=datasets.load_iris()
X = iris.data
#y = iris.target
pca_2c_model=PCA(n_components=2)
x_pca_2c=pca_2c_model.fit_transform(X)
print('Explained variance:\n', pca_2c_model.explained_variance_)
print('Explained variance ratio:\n', pca_2c_model.explained_variance_ratio_)
回報
Explained variance:
[4.22824171 0.24267075]
Explained variance ratio:
[0.92461872 0.05306648]
數量pca_2c_model.explained_variance_
包含兩個主成分協方差的對角線元素。 對於主成分,根據定義,協方差矩陣應該是對角線的。
var=np.cov(x_pca_2c.T)
explained_var=var.diagonal()
print('Explained variance calculated manually is\n',explained_var)
回報
Explained variance calculated manually is
[4.22824171 0.24267075]
要計算比率,必須在 PCA 之前為原始特征集計算分母(即在所有組件上)。 因此,我們可以只使用完整特征集的協方差的跡來找到比率。 在這里,我們使用了矩陣的跡不變性的思想。
all_var=np.cov(X.T)
sum_all_var=np.sum(all_var.diagonal()) # same as np.trace(all_var)
explained_var_ratio=explained_var/sum_all_var
print('Explained variance ratio calculated manually is\n',explained_var_ratio)
回報
Explained variance ratio calculated manually is
[0.92461872 0.05306648]
進一步,
print(sum(explained_var_ratio))
回報
0.9776852063187955
因此, explained_variance_ratio_
的總和不會加到 1.0,這意味着與 1.0 的小偏差包含在原始特征空間的其他分量中。
解釋方差的百分比為:
explained_variance_ratio_
方差,即協方差矩陣的特征值是:
explained_variance_
公式: explained_variance_ratio_ = explained_variance_ / np.sum(explained_variance_)
例:
import numpy as np
from sklearn.decomposition import PCA
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
pca = PCA(n_components=2)
pca.fit(X)
pca.explained_variance_
array([7.93954312, 0.06045688]) # the actual eigenvalues (variance)
pca.explained_variance_ratio_ # the percentage of the variance
array([0.99244289, 0.00755711])
同樣基於以上公式:
7.93954312 / (7.93954312+ 0.06045688) = 0.99244289
從文檔中:
解釋型變量_:數組,形狀(n_components,)由每個選定的分量說明的方差量。
等於X的協方差矩陣的n_components個最大特征值。
版本0.18中的新功能。
解釋的差異變量:數組,形狀(n_components,)每個選定分量解釋的方差百分比。
如果未設置n_components,則將存儲所有分量,並且比率之和等於1.0。
只是標准化,以了解每個主要組成部分的重要性。 您可以說: explained_variance_ratio_ = explained_variance_/np.sum(explained_variance_)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.