小白从零开始勇闯人工智能:机器学习初级篇(PCA数据降维)

引言

当我们尝试向朋友描述一朵花时,若逐一列举其萼片长度5.7厘米、宽度2.8厘米、花瓣长度4.5厘米及宽度1.3厘米等繁琐的细节,对方可能难以理解我们索要表达的重点。那么我们能否找到一种更简洁的方式,在保留花朵核心特征的同时简化描述。这就是数据降维所要解决的实际问题。在机器学习中,面对成百上千个特征的高维数据,过多的维度会拖慢计算效率,并可能导致"维度灾难"------即数据在高维空间中过于稀疏,使模型难以学习有效模式。所以我们可以使用PCA方法,它能够从众多特征中提取关键信息,实现数据的简化与压缩。

一、PCA是什么?数据世界的"精华提取器"

1、降维:从复杂到简单的艺术

降维简单来说就是一种将复杂数据转化为简洁形式的方法,其本质是在削减数据特征数量的过程中,最大限度地保留原始信息的关键部分。这个过程的核心目标是在大幅压缩篇幅的同时,依然能准确传达出核心的思想与内容。

2 、PCA的核心思想

PCA的核心原理是:识别数据中方差最大的方向。这就好比当我们希望用一条直线来概括一个数据点云的分布时,最理想的直线应沿着数据点最舒展、差异最明显的方向延伸。因为只有这样,该直线才能最大限度地捕捉和保留数据内部原有的差异性信息。

二、PCA中的数学

1、从向量和基说起

简单来说,我们可以从向量和基的角度理解PCA。基就像我们描述位置时所需的参考系,描述数据也需要一个坐标系。例如,二维空间最常用的基是 (1,0) 和 (0,1)。PCA本质上进行了一次基变换,它为数据找到并换上了一套更适合的新坐标系。在这个新坐标系里:第一个坐标轴被设定为沿着数据变化(方差)最大的方向,第二个坐标轴则与第一个轴正交(垂直),并指向剩余变化中最大的方向,后续的轴也依此规则类推,从而用更少的维度有效地重新表述数据。

2、方差与协方差:PCA的"指南针"

在PCA的过程中,方差用于衡量单个特征自身的波动大小,方差越大通常意味着该特征携带的信息越丰富。协方差则用于刻画两个不同特征之间的联动关系,协方差为零表明两者统计独立、没有线性关联。PCA通过数学变换寻找一套全新的坐标系,使得新坐标轴两两之间的协方差均为零(即完全解耦、相互独立),同时确保每个新坐标轴方向上的数据方差被尽可能最大化,来保证在降维后最有效地浓缩原始数据的差异性信息。

3、PCA的计算步骤(简单了解即可)

1、数据标准化

第一步是数据标准化,即将每个特征列的数据都减去该列自身的平均值。这一操作的目的是使所有特征的数据分布都以零值为中心,从而消除不同特征在原始量纲和尺度上的差异,为后续计算协方差矩阵并准确衡量各维度间的相关性打下基础。

2、计算协方差矩阵

在完成数据标准化后,下一个关键的步骤是计算协方差矩阵。该矩阵用于量化不同特征两两之间的线性关联程度,就是一个特征的变化如何与另一个特征的变化相关联。通过这个矩阵,我们可以系统地了解数据集内所有特征之间的协同变化关系,其对角线元素是各特征自身的方差,而非对角线元素则代表了特征对之间的协方差。

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

紧接着,PCA通过对协方差矩阵进行特征分解来计算其特征值和对应的特征向量。特征向量指明了数据在空间中变化最显著的主要方向(即主成分轴),而每个特征值则量化了其对应方向上数据方差的大小------特征值越大,代表该方向承载的原数据信息量越多。

4、选择主成分

接下来,在选择主成分的阶段,我们需要将所有计算得到的特征值从大到小进行排序。每个特征值对应一个特征向量(即一个可能的新方向),其大小直接反映了该方向所包含的原始数据信息量(方差)的多少。我们通常会选取前k个最大特征值所对应的特征向量,作为最终的"主成分"。这样,我们就了解了数据中最重要的变化趋势,从而实现了用更少的维度来概括大部分原始信息的目标。

5、转换数据

最后,PCA通过将标准化后的原始数据(在原始特征空间中)与选定的前k个主成分(特征向量)进行线性组合,实现数据投影。这本质上是一次坐标变换,它将每个数据样本从其原有的特征坐标系,转换到以主成分为新基底构成的新坐标系中,从而得到一个保留了最重要的信息并且维度降低(k维)的新数据集。

从数学本质上看,PCA实质上等同于对协方差矩阵进行对角化的过程。将原始协方差矩阵转化为一个对角矩阵,对角线上从大到小排列的特征值即对应各主成分方向的方差,而变换矩阵则由对应的特征向量组成,从而实现了数据解耦和主要方向的提取。

三、实战解析

1、参数详解

复制代码
from sklearn.decomposition import PCA

# PCA的关键参数
pca = PCA(
    n_components=0.90,    # 保留90%的原始信息(方差)
    copy=True,            # 不破坏原始数据
    whiten=False,         # 不进行白化(通常不需要)
    svd_solver='auto'     # 自动选择最优的SVD算法
)

其中,n_components 是其最核心的参数:当设为整数(如n_components=2)时,直接指定降维后的目标维度数,当设为小数(如n_components=0.9)时,则表示要求保留指定比例(如90%)的原始数据方差信息。此外,explained_variance_ratio_ 可以查看每个主成分所贡献的方差百分比(即"贡献率"),而 components_ 则是一个系数矩阵,它清晰地揭示了每一个主成分(新特征)是由原始特征以何种线性权重组合而成的。

2、简单案例

复制代码
import numpy as np
from sklearn.decomposition import PCA

# 简单二维数据
X = np.array([[1,1],[1,3],[2,3],[4,4],[2,4]])
print("原始数据:")
print(X)

# 创建PCA对象,保留50%的信息
pca = PCA(n_components=0.5)
pca.fit(X)

# 查看降维结果
new_X = pca.transform(X)
print("\n降维后数据:")
print(new_X)

print("\n各个主成分的贡献率:", pca.explained_variance_ratio_)
print("总保留信息比例:", sum(pca.explained_variance_ratio_))

到这里我们就学完了机器学习中的基础内容了,现在可以尝试处理一些复杂的项目来巩固我们所学的知识并加深映像。

相关推荐
geneculture2 小时前
融智学形式本体论:一种基于子全域与超子域的统一认知架构
大数据·人工智能·哲学与科学统一性·信息融智学·融智时代(杂志)
笔墨新城2 小时前
Agent Spring Ai 开发之 (一) 基础配置
人工智能·spring·agent
微软技术栈2 小时前
Microsoft AI Genius | 解锁多模态智能体构建,从 0 到 1 极速上手!
人工智能
laplace01232 小时前
# 第六章 agent框架开发实践 - 学习笔记
人工智能·笔记·学习·语言模型·agent
空中楼阁,梦幻泡影2 小时前
LoRA 详细解析,使用LoRA 方式对模型进行微调详细操作指南
运维·服务器·人工智能·机器学习·语言模型
AI即插即用2 小时前
即插即用系列(代码实践)专栏介绍
开发语言·人工智能·深度学习·计算机视觉
Keep__Fighting2 小时前
【神经网络的训练策略选取】
人工智能·深度学习·神经网络·算法
抠头专注python环境配置3 小时前
解决Windows安装PythonOCC报错:从“No module named ‘OCC’ ”到一键成功
人工智能·windows·python·3d·cad·pythonocc
2501_941322033 小时前
计算机视觉实现火灾与烟雾实时监测系统
人工智能·计算机视觉