PCA的概念
PCA(principal components analysis)即主成分分析技术,是特征降维的常用手段。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面
PCA算法流程
输入:
m
m
m个样本,每个样本
n
n
n维空间
X
i
=
(
x
i
1
,
x
i
2
,
.
.
.
,
x
i
n
)
X_i=(x_{i1}, x_{i2}, ..., x_{in})
Xi=(xi1,xi2,...,xin), 要降到维数
k
k
k
输出:降维后的样本集
Y
Y
Y
- 特征标准化,平衡各个特征尺度:
x i j = x i j − μ j s j x_{ij} = \frac{x_{ij} - \mu_j}{s_j} xij=sjxij−μj, 其中 μ j \mu_j μj为特征 j j j的均值, s j s_j sj为特征 j j j的标准差 - 计算样本协方差矩阵
- 求出协方差矩阵的特征值以及对应的特征向量
- 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 k k k行组成矩阵 P P P
- Y = P X Y=PX Y=PX即为降维后的 k k k维数据
notes:
有时候,我们不能制动降维后
n
′
n'
n′的值,这时候可以换种方式,指定一个降维的主成分比重阈值
t
t
t, 这个阈值在
(
0
,
1
]
(0,1]
(0,1]之间。假如
n
n
n个特征值为
λ
1
>
=
λ
2
>
=
λ
3
>
=
.
.
.
>
=
λ
n
\lambda_1 >= \lambda_2 >= \lambda_3 >=... >= \lambda_n
λ1>=λ2>=λ3>=...>=λn, 可以通过下式得到:
KaTeX parse error: Double superscript at position 15: \frac{\sum_1^n'̲\lambda_i}{\sum…
PCA实践
# coding:utf-8
import numpy as np
from sklearn.decomposition import PCA
X = np.array([[-1, -1, 1], [-2, -1, 2], [-3, -2, 3], [1, 1, 1], [2, 1, 2], [3, 2, 3]])
# select top two component
pca_model_1 = PCA(n_components=2)
# select the number of components such that the amount of variance that needs to be greater than
# the percentage specified by n_components
pca_model_2 = PCA(n_components=0.8, svd_solver='full')
pca_model_1.fit(X)
# Principal axes in feature space,
# representing the directions of maximum variance in the data
print(pca_model_1.components_)
"""
>>> [[-0.83849224 -0.54491354 -0. ]
[ 0. 0. 1. ]]
"""
# The amount of variance explained by each of the selected components.
print(pca_model_1.explained_variance_)
"""
>>> [7.93954312 0.8 ]
"""
# Percentage of variance explained by each of the selected components
print(pca_model_1.explained_variance_ratio_)
"""
>>> [0.90222081 0.09090909]
"""
# he singular values corresponding to each of the selected components
print(pca_model_1.singular_values_)
"""
>>> [6.30061232 2. ]
"""
pca_model_2.fit(X)
print(pca_model_2.components_)
print(pca_model_2.explained_variance_)
print(pca_model_2.explained_variance_ratio_)
print(pca_model_2.singular_values_)
"""
[[-0.83849224 -0.54491354 -0. ]]
[7.93954312]
[0.90222081]
[6.30061232]
"""