特征值分解与奇异值分解
PCA
PCA的作用主要是分析数据主成分,降低数据维度,方便计算。数据降到1、2、3维之后还可以可视化。在对数据执行PCA处理之前要对数据进行预处理,使每个特征维度上的数据具有相同均值并归一化到同一范围内。
#feature scaling
scaler = StandardScaler()
train_norm = scaler.fit_transform(train_data[0::,1::])
test_norm = scaler.fit_transform(test_data)
主成分个数的选择
一般来说,我们根据方差百分比来选择要保留的主成分个数。如我们要保留99%的方差(以下示例为matlab代码):
[u,s,v] = svd(x);
k = 0; % Set k accordingly
eigenvalues = diag(s);
current_var = 0;
total_var = sum(eigenvalues);
while current_var < 0.99 * total_var
k = k+1;
current_var = current_var + eigenvalues(k);
end
白化(whiten)
白化操作是要减少数据之间的相关性,具体操作是对降维之后的每一维特征除以其标准差,这样每一维特征的方差就相等了。
python
以下代码将训练集和测试集降至12维,并进行了白化处理。
from sklearn import decomposition
def decomposition_pca(train, test):
""" Linear dimensionality reduction """
pca = decomposition.PCA(n_components=12, whiten=True)
train_pca = pca.fit_transform(train)
test_pca = pca.transform(test)
return train_pca, test_pca
参考
http://blog.chinaunix.net/uid-24517893-id-3261160.html
http://deeplearning.stanford.edu/wiki/index.php/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90