机器学习——通过PCA技术实现降维

一、PCA算法

1、为什么要使用PCA技术

通常我们在处理数据的过程中会处理到一些巨大的数据,而且这些数据可能会具有巨大的数据冗余度和维度灾难,所以我们需要使用降维技术来更好的处理这些数据。

1、PCA算法的概念

        PCA(principle component analysis),即主成分分析法,是一个非监督的机器学习算法,是一种用于探索高维数据结构的技术,主要用于对数据的降维,通过降维可以发现更便于人理解的特征,加快对样本有价值信息的处理速度,此外还可以应用于可视化(降到二维)和去噪。基本原理是通过线性变换将原始数据投影到新的坐标系,使得投影后的数据方差最大。 PCA算法所要达到的目标是,降维后的数据所损失的信息量应该尽可能的少。

2、PCA算法的原理

      PCA算法的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。

3、PCA算法的实现步骤

  1. 标准化数据:首先,对数据进行标准化处理,使得每个特征的均值为0,方差为1。这是为了确保不同特征在计算过程中具有相同的重要性。

  2. 计算协方差矩阵:接下来,计算标准化后数据的协方差矩阵。协方差矩阵反映了数据中各个特征之间的相关性。

  3. 计算特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征向量代表了数据中的主要方向(即主成分),而特征值则代表了这些方向上的方差大小。

  4. 选择主成分:根据特征值的大小,选择前k个最大的特征值对应的特征向量作为主成分。这些主成分构成了一个新的坐标系,可以用来表示原始数据。

  5. 数据投影:将原始数据投影到选定的主成分上,得到降维后的数据。这个过程实际上是将原始数据从原来的特征空间转换到新的低维空间。

4、PCA算法的降维准则

使投影后的数据尽可能地分散开来

二、PCA算法的代码实现

1、PCA函数

def pca(X, n_components):

    # 数据标准化
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)

    # 计算协方差矩阵
    covariance_matrix = np.cov(X_scaled.T)

    # 计算特征值和特征向量
    eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)

    # 按特征值降序排序
    sorted_indices = np.argsort(eigenvalues)[::-1]
    sorted_eigenvalues = eigenvalues[sorted_indices]
    sorted_eigenvectors = eigenvectors[:, sorted_indices]

    # 选择前n_components个主成分
    selected_eigenvectors = sorted_eigenvectors[:, :n_components]

    # 进行PCA降维
    X_reduced = np.dot(X_scaled, selected_eigenvectors)

    # 计算主成分贡献率
    explained_variance_ratio = sorted_eigenvalues[:n_components] / np.sum(sorted_eigenvalues)

    return X_reduced, explained_variance_ratio

2、实现PCA函数

if __name__ == "__main__":
    # 构建示例数据
    X = np.array([
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
        [10, 11, 12]
    ])

    # 进行PCA降维,保留两个主成分
    X_reduced, explained_variance_ratio = pca(X, n_components=2)

    # 输出降维后的数据
    print("降维后的数据:")
    print(X_reduced)

    # 输出主成分贡献率
    print("主成分贡献率:")
    print(explained_variance_ratio)

3、输出结果以及分析

分析:

  • 数据从原来的维度降低到了2维。
  • 每个样本在新的主成分坐标系下的坐标表示。
  • 第一列表示数据在第一个主成分上的投影,第二列表示数据在第二个主成分上的投影。
  • 注意到第二列的数值非常小(接近于零),这表明第二个主成分对数据的解释几乎没有贡献。
  • 第一个主成分的贡献率为1.00000000e+00,即100%,表示第一个主成分解释了所有的方差。
  • 第二个主成分的贡献率为2.35232981e-17,非常接近于零,表示第二个主成分几乎没有解释任何方差。

结果:这个实验数据表明,数据的主要变化方向是沿着第一个主成分。第二个主成分几乎没有解释任何方差,可能是因为数据在原始特征空间中具有很强的线性相关性,导致第一个主成分已经能够完全解释数据的方差。

3、PCA算法的优缺点

1、优点

降维效果显著: PCA通过找到数据中方差最大的方向,能够在保留大部分信息的同时实现数据的降维,去除冗余信息,提高了计算效率。

去相关性: PCA通过选择特征值较大的特征向量,实现了数据的去相关性,新的特征之间尽可能地不相关,有助于减少多重共线性对模型的影响。

可解释性: PCA的结果是一组相互正交的主成分,这些主成分能够更好地反映数据的主要结构,具有较好的可解释性。

适用性广泛: PCA不仅可以用于降维,还可以用于特征提取、数据可视化等多个领域,是一种通用的数据分析工具。

2、缺点

线性假设:PCA假设数据是线性可分的,对于非线性数据集,PCA的效果可能不佳。

解释性:PCA生成的主成分是原始变量的线性组合,这些组合可能不容易解释,特别是在主成分数量较多的情况下。

对异常值敏感:PCA对数据中的异常值非常敏感,异常值可能会显著影响主成分的方向和解释。

数据分布假设:PCA假设数据是正态分布的,如果数据分布不符合这个假设,PCA的效果可能会受到影响。

信息丢失:尽管PCA试图保留最多的信息,但在降维过程中总是会有一定程度的信息丢失。

3、总结

总的来说,PCA是一种强大且广泛应用的数据降维和特征提取算法,但在实际应用中也需要结合具体问题背景,权衡其优缺点,选择合适的参数和方法。

  • 26
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值