Fork me on GitHub

机器学习笔记--主成分分析(PCA)与奇异值分解

特征值分解与奇异值分解

svd-1

svd-2

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)

白化操作是要减少数据之间的相关性,具体操作是对降维之后的每一维特征除以其标准差,这样每一维特征的方差就相等了。

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

转载请注明出处:BackNode

My zhiFuBao

Buy me a cup of coffee

blogroll

social