【Deep-ML系列】Principal Component Analysis (PCA) Implementation(手写主成分分析)

题目链接:Deep-ML

主成分分析(PCA)是一种统计方法,用于将高维数据集映射到一个低维空间,同时保留尽可能多的原始数据方差。PCA的目标是通过找到一组新的未相关的变量(称为主成分),这些变量可以用来解释数据中的大部分变异性。

  • 降维:在数据集中包含许多特征时,PCA可以通过提取主要特征来减少数据的维度,从而简化分析和可视化。
  • 去噪:通过保留具有最大方差的特征,PCA可以去除不重要或噪声的特征。
  • 数据压缩:PCA通过减少数据的维度,可以在不显著损失信息的情况下实现数据压缩。
  • 提高模型性能:在一些情况下,使用PCA降维后的数据可以提高机器学习模型的性能。

PCA的流程

PCA的流程可以分为以下几个步骤:

1. 数据标准化

首先,我们需要标准化数据集以确保所有特征具有相同的量纲。标准化的过程通常包括减去每个特征的均值,然后除以其标准差:

2. 计算协方差矩阵

标准化后,我们计算数据的协方差矩阵,以了解特征之间的相关性:

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

接下来,计算协方差矩阵的特征值和特征向量。特征向量表示新的坐标轴(主成分),而特征值表示每个主成分所解释的方差:

4. 排序特征向量

根据特征值的大小对特征向量进行排序。特征值越大,对应的主成分所解释的方差就越多。我们只选择特征值最大的前k个特征向量作为主成分:

5. 转换数据

最后,我们用选定的主成分矩阵将原始数据集转换到低维空间:

import numpy as np


def pca(data, k):
    '''
    1. standardize the data
    2. compute the covariance matrix
    3. find the eigenvalues and eigenvectors
    4. select the principal components
    :param data:
    :param k:
    :return:
    '''
    # standardize the data
    data_standardized = (data - np.mean(data, axis=0)) / np.std(data, axis=0)
    # compute the covariance matrix
    covariance_matrix = np.cov(data_standardized, rowvar=False)
    # find the eigenvalues and eigenvectors
    eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)
    # select the principal components
    index = np.argsort(eigenvalues)[::-1]  # Sort in descending order
    eigenvalues_sorted = eigenvalues[index]
    eigenvectors_sorted = eigenvectors[:, index]    # 对列按照index数组进行排序
    principal_components = eigenvectors_sorted[:, :k]

    return principal_components



if __name__ == '__main__':
    data = np.array([[1, 2], [3, 4], [5, 6]])
    k = 1
    print(pca(data, k))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值