北太天元学习41-主成分分析(PCA)
说到主成分,没有学过统计的同志也会觉得是明白的,就是主要 成分,也就是某个东西有很多种成分组成,主要的成分就是主 成分。 例如, 常见的感冒药的主要成分是对乙酰氨基酚。 说到主成分分析,不由得让我想到防制药,是不是指的是把一个 药品的主成分给分析清楚再仿制。不管日常生活中如何使用,我们下面 所说的主成分分析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;