机器学习实验——主成分分析(PCA)

目录

一、什么是PCA?

 二、如何实现PCA?

(一)数据标准化

(二)计算协方差矩阵 

(1)协方差

(2)协方差矩阵 

(三)特征值分解

 (四)选取主要成分

(五)数据投影

三、实验结果展示

四、实验总结

优点

缺点

五、总体代码展示


一、什么是PCA?

主成分分析(PCA)是一种常用的数据降维技术,它可以将高维数据集转换为低维数据集,同时保留数据集中的主要特征。

 

 二、如何实现PCA?

PCA的核心思想是通过找到数据中的主成分或主要特征,来实现降维。

(一)数据标准化

对原始数据进行标准化处理,使每个特征的均值为0,标准差为1,以消除不同尺度带来的影响。

可参考如下方法实现:

# 标准化数据(均值为0,标准差为1)
data_mean = np.mean(data, axis=0)  # 计算每列的均值
data_std = np.std(data, axis=0)    # 计算每列的标准差
data_standardized = (data - data_mean) / data_std  # 标准化数据

(二)计算协方差矩阵 

(1)协方差

协方差(covariance)是用来衡量两个随机变量之间的关联程度。协方差矩阵将所有变量两两之间的协方差组合成一个矩阵。如果有n个变量,那么协方差矩阵就是一个n×n的矩阵。

(2)协方差矩阵 

协方差矩阵C的第i行第j列的元素表示第i个变量与第j个变量的协方差。

具体地,假设有变量X和Y,它们的样本数量为N,样本数据分别为(x₁, y₁), (x₂, y₂), ..., (xₙ, yₙ)。则协方差矩阵C的第i行第j列的元素可以通过以下公式计算得出:

Cᵢⱼ = cov(X, Y) = (Σ((xₖ - μₓ)(yₖ - μᵧ))) / (N - 1)

其中,μₓ和μᵧ分别为变量X和Y的样本均值。

协方差矩阵的对角线元素是各个变量的方差,非对角线元素是各个变量之间的协方差。

协方差矩阵在数据分析中具有重要的意义,它能够提供关于变量之间关系的信息。例如,在主成分分析(PCA)中,协方差矩阵用于计算特征向量和特征值,从而找到数据的主要成分。

 

# 计算协方差矩阵
cov_matrix = np.cov(data_standardized.T)

(三)特征值分解

特征值分解就是对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。

eig_values, eig_vectors = np.linalg.eig(cov_matrix)

 (四)选取主要成分

按照特征值从大到小的顺序,选择最大的k个特征值对应的特征向量作为主要成分。本次我们在四个特征中选取两个主要成分

# 按特征值从大到小排序特征向量
sorted_index = np.argsort(eig_values)[::-1]  # 对特征值从大到小排序,并获取排序后的索引
sorted_eig_vectors = eig_vectors[:, sorted_index]  # 按排序后的索引重新排列特征向量

# 选择前两个主要成分
n_components = 2  # 要选择的主成分个数
pca_components = sorted_eig_vectors[:, :n_components]  # 获取前两个主成分

(五)数据投影

将原始数据投影到选定的主要成分上,得到降维后的数据集。

ransformed_data = np.dot(data_standardized, pca_components)  # 投影到新的主成分空间

三、实验结果展示

plt.scatter(transformed_data[:, 0], transformed_data[:, 1])  # 绘制散点图

# 为每个点添加标签
for i, txt in enumerate(range(len(data))):
    plt.annotate(txt, (transformed_data[i, 0], transformed_data[i, 1]))

# 添加标题和坐标轴标签
plt.title('PCA of Mammals')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.grid(True)  # 显示网格
plt.show()  # 显示图形

四、实验总结

优点

1.降维:PCA可以有效地将高维数据集转换为低维数据集,从而减少计算复杂度、存储需求和处理时间。

2.去除噪声:通过保留主要成分(即解释数据方差最大的方向),PCA可以帮助去除数据中的噪声,提升模型的性能。

3.提高可视化效果:PCA可以将高维数据投影到二维或三维空间,便于数据的可视化和理解。

4.特征选择:PCA可以识别出数据中最重要的特征,有助于特征选择和特征工程。

5.减少多重共线性:在回归分析中,PCA可以通过生成不相关的主成分来减少变量之间的多重共线性问题。

缺点

1.解释性较差:PCA生成的主成分是线性组合,可能难以解释这些新特征的实际意义,尤其是当原始特征具有明确物理或业务含义时。

2.假设线性关系:PCA假设数据中存在线性关系。因此,对于非线性数据,PCA的效果可能不佳,此时可能需要非线性降维方法如t-SNE或UMAP。

3.方差解释偏好:PCA关注的是最大化方差的方向,但这不一定等同于对任务最有用的特征。例如,在分类任务中,最能区分类别的特征不一定对应于方差最大的方向。

4.敏感性:PCA对数据的缩放很敏感,因此在应用PCA之前,需要标准化数据。如果不同特征有不同的量级,PCA的结果可能会受到较大影响。

5.信息损失:虽然PCA尽可能保留数据的主要信息,但不可避免地会丢失一些信息,特别是在降维幅度较大的情况下。

总的来说,PCA是一种功能强大的工具,但在使用它时必须考虑其局限性和适用条件,以确保其应用效果最佳。

五、总体代码展示

import numpy as np
import matplotlib.pyplot as plt

# 创建哺乳动物数据集
data = np.array([
    [600, 150, 70, 60],
    [20, 30, 5, 20],
    [40, 40, 10, 25],
    [50, 60, 6, 35],
    [70, 80, 8, 40],
    [100, 100, 12, 50],
    [200, 110, 15, 55],
    [300, 120, 18, 45],
    [400, 130, 20, 65],
    [10, 25, 3, 10],
    [5, 15, 2, 5],
    [3, 10, 1, 3]
])

# 标准化数据(均值为0,标准差为1)
data_mean = np.mean(data, axis=0)
data_std = np.std(data, axis=0)
data_standardized = (data - data_mean) / data_std

# 计算协方差矩阵
cov_matrix = np.cov(data_standardized.T)

# 计算特征值和特征向量
eig_values, eig_vectors = np.linalg.eig(cov_matrix)

# 按特征值从大到小排序特征向量
sorted_index = np.argsort(eig_values)[::-1]
sorted_eig_vectors = eig_vectors[:, sorted_index]

# 选择前两个主要成分
n_components = 2
pca_components = sorted_eig_vectors[:, :n_components]

# 将数据转换到新空间
transformed_data = np.dot(data_standardized, pca_components)

# 打印降维后的数据
print("降维后的数据:")
print(transformed_data)

# 将降维后的数据在二维坐标轴中打印出来
plt.scatter(transformed_data[:, 0], transformed_data[:, 1])

for i, txt in enumerate(range(len(data))):
    plt.annotate(txt, (transformed_data[i, 0], transformed_data[i, 1]))

plt.title('PCA of Mammals')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.grid(True)
plt.show()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值