Gui*_*ido 6 python pca feature-selection scikit-learn
我正在做PCA,我对哪些原始功能最重要感兴趣.让我用一个例子来说明这一点:
import numpy as np
from sklearn.decomposition import PCA
X = np.array([[1,-1, -1,-1], [1,-2, -1,-1], [1,-3, -2,-1], [1,1, 1,-1], [1,2,1,-1], [1,3, 2,-0.5]])
print(X)
Run Code Online (Sandbox Code Playgroud)
哪个输出:
[[ 1. -1. -1. -1. ]
[ 1. -2. -1. -1. ]
[ 1. -3. -2. -1. ]
[ 1. 1. 1. -1. ]
[ 1. 2. 1. -1. ]
[ 1. 3. 2. -0.5]]
Run Code Online (Sandbox Code Playgroud)
直观地,人们已经可以说特征1和特征4由于它们的低方差而不是非常重要.让我们在这个集合上应用pca:
pca = PCA(n_components=2)
pca.fit_transform(X)
comps = pca.components_
Run Code Online (Sandbox Code Playgroud)
输出:
array([[ 0. , 0.8376103 , 0.54436943, 0.04550712],
[-0. , 0.54564656, -0.8297757 , -0.11722679]])
Run Code Online (Sandbox Code Playgroud)
此输出表示每个原始特征对于两个主要组件中的每一个的重要性(请参阅此参考).换句话说,对于第一主成分,特征2是最重要的,然后是特征3.对于第二主成分,特征3看起来最重要.
问题是,哪个功能最重要,哪一个最常见?我可以使用这个component_属性吗?或者我错了,PCA不是进行此类分析的正确方法(我应该使用特征选择方法)吗?
该component_属性不是查找要素重要性的正确位置.两个阵列(即两个组件PC1和PC2)中的载荷告诉您原始矩阵如何被每个特征转换(合在一起,它们形成一个旋转矩阵).但是他们没有告诉你每个组件对描述转换的特征空间有多大贡献,所以你还不知道如何比较两个组件的负载.
但是,您链接的答案实际上会告诉您要使用的内容:explained_variance_ratio_属性.此属性告诉您每个主要组件解释了您的要素空间中有多少差异:
In [5]: pca.explained_variance_ratio_
Out[5]: array([ 0.98934303, 0.00757996])
Run Code Online (Sandbox Code Playgroud)
这意味着第一个原则组件解释了几乎99%的方差.你知道components_PC1的第二个功能负载最高.因此,功能2是数据空间中最重要的功能.功能3是下一个最重要的功能,因为它在PC1中具有第二高的负载.
在PC2中,绝对载荷几乎在特征2和特征3之间交换.但是,由于PC2几乎没有解释整体方差,这可以忽略不计.
| 归档时间: |
|
| 查看次数: |
2339 次 |
| 最近记录: |