3

我正在遵循Python 中的主成分分析以在 Python下使用 PCA,但我正在努力确定要选择哪些功能(即我的哪些列/功能具有最佳方差)。

当我使用scipy.linalg.svd时,它会自动对我的奇异值进行排序,所以我无法分辨它们属于哪一列。

示例代码:

import numpy as np
from scipy.linalg import svd
M = [
     [1, 1, 1, 1, 1, 1],
     [3, 3, 3, 3, 3, 3],
     [2, 2, 2, 2, 2, 2],
     [9, 9, 9, 9, 9, 9]
]
M = np.transpose(np.array(M))
U,s,Vt = svd(M, full_matrices=False)
print s

如果不对奇异值进行排序,是否有不同的方法来解决这个问题?

更新:看起来这可能是不可能的,至少根据 Matlab 论坛上的这篇文章:http: //www.mathworks.com/matlabcentral/newsreader/view_thread/241607。如果有人知道,请告诉我:)

4

1 回答 1

2

我的错误印象是 PCA 进行了特征选择,而相反它进行了特征提取

相反,PCA 创建了一系列新的特征,每个特征都是输入特征的组合。

从 PCA 中,如果您真的想做特征选择,您可以查看输入特征在 PCA 创建的特征上的权重。例如,matplotlib.mlab.PCA库在属性中提供权重(更多关于库):

from matplotlib.mlab import PCA
res = PCA(data)
print "weights of input vectors: %s" % res.Wt

听起来特征提取路线是使用 PCA 的方式。

于 2013-01-11T20:26:59.870 回答