0x25 numpy实战,PCA降维

Posted liu247

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0x25 numpy实战,PCA降维相关的知识,希望对你有一定的参考价值。

00 个人总结

  PCA(主成分分析法)目的:

     1.降低特征间个数,减少的计算量

     2.降低特征之间的相关性,使特征之间更加的独立

     3.减少噪声对数据的影响,使模型更加的稳定

     4.方便数据的可视化

  简单步骤:

    1.对数据进行零均值化处理

    2.计算协方差矩阵

    3.计算特征值和特征向量

    4.找到n个特征值和对应的特征向量

    5.将数据映射到n个特征向量的空间中实现降维

  注意:

    降维后的2维不是从原来的4维中选择了2维,而是在原来的4维中映射到了2维空间n中,数据会有一定的误差,至于丢多少这个以后在讨论吧

01numpy实现方法

import numpy as np
from sklearn.datasets import load_iris

# 加载数据集
iris = load_iris()
data = iris.data
#将数据0标准化
print(data[:5,:])
mean_val = np.mean(data,axis=0)
print(mean_val)
meaned_data = data - mean_val
# 几乎都是0 十分的近似于0
print(Feature mean:,np.mean(meaned_data,axis=0))
print(\n,meaned_data[:5,:])

# [[4.1 3.5 1.4 0.2]
#  [4.9 3.  1.4 0.2]
#  [4.7 3.2 1.3 0.2]
#  [4.6 3.1 1.5 0.2]
#  [5.  3.6 1.4 0.2]]
# [5.84333333 3.05733333 3.758      1.19933333]
# Feature mean: [-1.12502600e-15 -7.60872846e-16 -2.55203266e-15 -4.48530102e-16]
# 0,0,0,0,
#  [[-0.74333333  0.44266667 -2.358      -0.99933333]
#  [-0.94333333 -0.05733333 -2.358      -0.99933333]
#  [-1.14333333  0.14266667 -2.458      -0.99933333]
#  [-1.24333333  0.04266667 -2.258      -0.99933333]
#  [-0.84333333  0.54266667 -2.358      -0.99933333]]
# 计算协方差矩阵
cov_mat = np.cov(meaned_data,rowvar=False)
print(Shape:,cov_mat.shape)
print(cov_mat)

#Shape: (4, 4)
#[[ 0.68569351 -0.042434    1.27431544  0.51627069]
# [-0.042434    0.18997942 -0.32965638 -0.12163937]
# [ 1.27431544 -0.32965638  3.11627785  1.2956094 ]
# [ 0.51627069 -0.12163937  1.2956094   0.58100626]]
# 计算特征值和特征向量
eig_vals,eig_vects = np.linalg.eig(np.mat(cov_mat))

print(特征值,eig_vals)
print(特征向量,eig_vects)

sorted_index = np.argsort(-eig_vals) # 对特征值从大到小排序
print(排序的索引,sorted_index)

# 取最大的2个特征索引
topn_index = sorted_index[:2]
print(最大的2个特征索引,topn_index)

topn_vects = eig_vects[:,topn_index] # 最大的n个特征值对应的特征向量
print(最大的2个特征,对应的维特征向量\n,topn_vects) 
# 特征值 [4.22824171 0.24267075 0.0782095  0.02383509]
# 特征向量 [[ 0.36138659 -0.65658877 -0.58202985  0.31548719]
#  [-0.08452251 -0.73016143  0.59791083 -0.3197231 ]
#  [ 0.85667061  0.17337266  0.07623608 -0.47983899]
#  [ 0.3582892   0.07548102  0.54583143  0.75365743]]
# 排序的索引 [0 1 2 3]
# 最大的2个特征索引 [0 1]
# 最大的2个特征,对应的维特征向量
#  [[ 0.36138659 -0.65658877]
#  [-0.08452251 -0.73016143]
#  [ 0.85667061  0.17337266]
#  [ 0.3582892   0.07548102]]
# 将数据映射降维
pca_data = meaned_data * topn_vects # 投影到低维空间
print(降低维度后的数据\n,pca_data[:5,:])

recon_data = (pca_data * topn_vects.T)+mean_val # 重构数据
print(还原后的数据\n,recon_data)

02 sklean 实现

# 使用sklean实现
from sklearn.decomposition import PCA
# 压缩为2维数据
pca = PCA(n_components=2)
print(模型:,pca)
feature2 =pca.fit_transform(data)
print(特征值的比例:,pca.explained_variance_ratio_)
print(降维后的占比:,sum(pca.explained_variance_ratio_))

print(降维后的数据:\n,feature2[:5,:])
# 模型: PCA(copy=True, iterated_power=‘auto‘, n_components=2, random_state=None,
#   svd_solver=‘auto‘, tol=0.0, whiten=False)
# 特征值的比例: [0.92461872 0.05306648]
# 降维后的占比: 0.9776852063187949
# 降维后的数据:
#  [[-2.68412563  0.31939725]
#  [-2.71414169 -0.17700123]
#  [-2.88899057 -0.14494943]
#  [-2.74534286 -0.31829898]
#  [-2.72871654  0.32675451]]

 

以上是关于0x25 numpy实战,PCA降维的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实战—降维

PCA图像数据降维及重构误差分析实战并使用TSNE进行异常数据可视化分析

机器学习实战基础(二十七):sklearn中的降维算法PCA和SVDPCA对手写数字数据集的降维

机器学习实战基础(二十七):sklearn中的降维算法PCA和SVDPCA对手写数字数据集的降维

机器学习实战之PCA

机器学习Sklearn库主成分分析PCA降维的运用实战