欢迎光临散文网 会员登陆 & 注册

北太天元学习41-主成分分析(PCA)

2023-08-30 21:30 作者:卢朓  | 我要投稿

说到主成分,没有学过统计的同志也会觉得是明白的,就是主要 成分,也就是某个东西有很多种成分组成,主要的成分就是主 成分。 例如, 常见的感冒药的主要成分是对乙酰氨基酚。 说到主成分分析,不由得让我想到防制药,是不是指的是把一个 药品的主成分给分析清楚再仿制。不管日常生活中如何使用,我们下面 所说的主成分分析PCA(principal component analysis)是统计学的一个术语,是机器学习的一种非常重要的方法。

机器学习方法按照有无标注(或者有无标签)可以分成监督学习和无监督学习。 下面图中的监督学习,对输入的数据标注了是美女,然后选用某种模型,然后学习特征,对其它的图片就可以预测是不是一个美女。


监督学习


而无监督学习,输入的数据是图片,没有任何的标注(或者标签),然后寻用某种模型,对输入的数据自动的进行分类。

无监督学习



主成分分析PCA是一种流行的无监督算法,已在数据分析、数据压缩、去噪、降维等多个应用中使用。主成分分析可以帮助您减少或消除数据中的线性相关的部分,也就是说它是一种在数据分析中常用的降维技术。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,能够揭示出数据的主要特征。 有时候,主成分分析甚至可以在没有任何数据丢失的情况下降低维度。 主成分分析可以降维,从而有助于我们实现高维数据的可视化(可以在二维或三维维度上可视化)。

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

PCA的主要步骤如下:

   1. 将原始数据标准化,即减去均值并除以标准差,以消除不同特征的量纲影响。

   2. 计算样本的协方差矩阵。
    3. 计算协方差矩阵的特征值和特征向量。
    4. 将特征值从大到小排序,选择前k个最大的特征值对应的特征向量。
    5. 用这k个特征向量张成的子空间即为降维后的空间。

以下是一个简单的例子,说明如何使用PCA对数据进行处理,并给出相应的北太天元代码。

假设我们有一个包含多个变量的数据集,每个变量代表一个特征。我们的目标是减少数据集的维度,同时尽可能保留原始数据的主要特征。

    数据准备

首先,我们创建一个包含多个变量(特征)的数据集。为了简化示例,我们只使用二维数据集。

北太天元代码
% 创建二维数据集
data = rand(100, 2);

    数据标准化

在进行PCA之前,我们需要对数据进行标准化。标准化的目的是将所有特征的平均值调整为0,并将标准偏差调整为1。这在PCA中非常重要,因为PCA对特征的尺度敏感。

%北太天元代码
% 数据标准化
m均值 = mean(data);
std_标准差 = std(data);
data_std = (data - m均值) ./ std_标准差;

    计算协方差矩阵

PCA通过计算数据协方差矩阵来找到数据的主要特征。协方差矩阵衡量了各个特征之间的相关性。

北太天元代码
% 计算协方差矩阵
cov_matrix = cov(data_std);

    计算协方差矩阵的特征向量和特征值

PCA通过将协方差矩阵分解为特征向量和特征值来找到数据的主要特征。特征向量代表了数据的主要方向(即主成分),而特征值代表了这些方向的重要性。

北太天元代码
% 计算协方差矩阵的特征向量和特征值
[V, D] = eig(cov_matrix);

    选择主成分

根据特征值的大小,选择前k个最大的特征值对应的特征向量作为主成分。这里,k是我们要保留的维度数。

北太天元代码
% 选择前k个主成分
k = 1; % 保留一个维度
V_k = V(:, 1:k);

    将数据投影到主成分上

最后,我们将数据投影到选定的主成分(即新的特征向量)上,得到降维后的数据。

北太天元代码
% 将数据投影到主成分上
projected_data = data_std * V_k;

完整的北太天元代码如下:

%北太天元代码
% 创建二维数据集
data = rand(100, 2);

% 数据标准化
m均值 = mean(data);
std_标准差 = std(data);
data_std = (data - m均值) ./ std_标准差;

% 计算协方差矩阵
cov_matrix = cov(data_std);

% 计算协方差矩阵的特征向量和特征值
[V, D] = eig(cov_matrix);

% 选择前k个主成分
k = 1; % 保留一个维度
V_k = V(:, 1:k);

% 将数据投影到主成分上
projected_data = data_std * V_k;

        


北太天元学习41-主成分分析(PCA)的评论 (共 条)

分享到微博请遵守国家法律