PCA底层简单版本,容易学习

PCA底层学习

前面是PCA的简单知识,不感兴趣可以直接看代码部分
PCA降维是线性降维有损失的,我们降维的目的是简化机器模型的训练和预测,对高维数据进行可视化,实现数据的压缩

  • PCA优缺点:

优点:

  1. 保留绝大部分数据
  2. 消除评价指标之间的相关影响
  3. 计算方法简单,易于实现

缺点:

  1. 主成分解释其含义往往具有一定的模糊性,不如原始变量的含义那么清楚,确切

代码思路:
降维简单来说就是将一个旧数据(old_data)经过降维变成了新数据(new_data)

  1. x_new=x_old.dot(U) #旧数据=新数据*U
  2. 2.U 和 选择的维度k,lmd(特征值)的大小,u(特征向量) 有关, k,lmd是会被提供的,所以只需要找u
  3. lmd,u=np.linalg.eig(协方差)
  4. 协方差=np.dot((x_old-mean)的转置,x_old-mean)

import numpy as np
#降维前数据x
x=np.array([
    [1,3,6],
    [5,7,9],
    [4,5,9]
])

# 1.协方差=np.dot((x_old-mean)的转置,x_old-mean)
def pca(x,k):
    
    s_d=np.dot((x-np.mean(x,axis=0)).T,x-np.mean(x,axis=0))

    # 2.特征值,特征向量 = np.linalg.eig(协方差)
    lmd,u=np.linalg.eig(s_d)
    m,n=x.shape

    # 3.将特征值,特征向量放到一起,排序找出lmd最大时候的U
    all_g = []
    for i in range(n):
        one_g=(lmd[i],u[i])
        all_g.append(one_g)
    all_g.sort(reverse=True)

    # 4.初始化U为第一个U,将k个U拼接起来,然后旧数据和U相乘
    #将U初始化为第一个U,第一个U不在循环内,保证K=1时有对应的U
    U=np.array(all_g[0][1])
    for i in range(1,k):
        U=np.c_[U,all_g[i][1]]
    #x_new=x_old.dot(U)    
    new_=x.dot(U)
    print(new_)

pca(x,2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值