PCA主成分分析
介绍
PCA是一种无监督学习的降维技术
思想
1.投影后样本越分散,保留的信息越多
2.PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征
做法
1.将所有的样本点向直线w投影
2.目标函数:让投影后样本的方差极大
PCA的一般执行步骤
第一步:X减去均值
第二步:对协方差矩阵XXT做特征值分解,得到特征值和对应特征向量
第三步:按照特征值降序排序,取得对应的特征向量拼成投影矩阵WT
第四步:对X做转换
代码实现
import numpy as np
from sklearn.decomposition import PCA
def pca(X, n_components):
# 第一步:X减去均值
mean = np.mean(X, axis=1)
normX = X - mean.reshape(-1, 1)
# 第二步:对协方差矩阵XXT做特征值分解,得到特征值和对应特征向量
cov_mat = np.dot(normX, np.transpose(normX))
vals, vecs = np.linalg.eig(cov_mat)
# 第三步:按照特征值降序排序,取得对应的特征向量拼成投影矩阵WT
eig_pairs = [(np.abs(vals[i]), vecs[:, i]) for i in range(X.shape[0])]
eig_pairs.sort(reverse=True)
WT = np.array([ele[1] for ele in eig_pairs[:n_components]])
# 第四步:对X做转换
data = np.dot(WT, normX)
return data
n_components = 2
X = np.transpose(np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]))
data = pca(X, n_components=n_components)
print(data)
X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
p = PCA(n_components=n_components)
a = p.fit_transform(X)
print(a)
结果
[[-0.50917706 -2.40151069 -3.7751606 1.20075534 2.05572155 3.42937146]
[ 1.08866118 -0.10258752 -0.43887001 0.05129376 -0.46738995 -0.13110746]]
[[ 0.50917706 1.08866118]
[ 2.40151069 -0.10258752]
[ 3.7751606 -0.43887001]
[-1.20075534 0.05129376]
[-2.05572155 -0.46738995]
[-3.42937146 -0.13110746]]