当前位置: 首页 > news >正文

机器学习----PCA降维

一、PCA是什么?

主成分分析(Principal Component Analysis,PCA)是机器学习中最常用的降维技术之一,它通过线性变换将高维数据投影到低维空间,同时保留数据的最重要特征。PCA由卡尔·皮尔逊于1901年发明,如今广泛应用于数据可视化、特征提取和噪声过滤等领域。

二、PCA的数学原理

1.1 向量与内积

PCA的核心建立在向量运算基础上。给定两个n维向量:

它们的​​内积​​定义为:

A⋅B=a1​b1​+a2​b2​+⋯+an​bn​=∣A∣∣B∣cos(θ)

其中θ是两向量夹角,|A|表示向量模长:

几何意义​​:当|B|=1时,A·B表示A在B方向上的投影长度。

1.2 基与基变换

在n维空间中,​​基​​是一组线性无关的向量,任何向量都可表示为基的线性组合。标准正交基满足:

  • 每个基向量模长为1
  • 任意两个不同基向量正交(内积为0)

​基变换公式​​:设旧基为e1​,e2​,...,en​,新基为p1​,p2​,...,pn​,向量v在新基下的坐标为:

其中P的行向量由新基向量组成。

2.1 优化目标

给定m个n维数据点X=[x1​,x2​,...,xm​],PCA寻找k维(k<n)子空间,使得:

1.​最大方差准则​​:投影后数据方差最大化

              

2.最小重构误差​​:重构数据与原数据误差最小化

                        

这两个目标实际上是等价的。

2.2 协方差矩阵

数据经过中心化处理后(均值为0),协方差矩阵为:

                                                       

其元素Cij​表示第i维和第j维特征的协方差:

                                            

2.3 特征值分解

PCA的关键是对协方差矩阵C进行特征值分解:

                                                      

其中:

  •  

    Λ是对角矩阵,对角元素λ₁ ≥ λ₂ ≥ ... ≥ λₙ为特征值

  •  

    P的列向量是对应的特征向量,构成新的正交基

​方差解释​​:第i个主成分的方差等于λᵢ,总方差为∑i=1n​λi​

2.4 降维过程

选择前k个最大特征值对应的特征向量组成投影矩阵Pk​,降维数据:

                                                             

重构数据:

                                                            

3. PCA算法步骤

3.1 理论步骤

  1. 数据标准化​​:每维特征减去均值

                                      

2.计算协方差矩阵​​:

                                         

3.特征值分解​​:

                                                    

4.​​选择主成分​​:按特征值从大到小排序,选择前k个

5.​​数据投影​​:

                                                          

3.2 数值稳定性考虑

实际计算中,常使用​​奇异值分解(SVD)​​代替特征值分解:

                                                          

此时:

右奇异矩阵V的列向量即为主成分方向

奇异值σᵢ与特征值关系:λi​=σi2​/m

三、PCA代码

1. PCA的Python实现

1.1 数据准备

import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target# 数据标准化
X_centered = X - X.mean(axis=0)

1.2 使用scikit-learn实现PCA

from sklearn.decomposition import PCApca = PCA(n_components=2)
X_pca = pca.fit_transform(X)print("解释方差比:", pca.explained_variance_ratio_)
print("累计解释方差:", np.cumsum(pca.explained_variance_ratio_))

2.项目实战

. 项目概述

本项目使用PCA(主成分分析)对鸢尾花数据集进行降维处理,然后使用逻辑回归进行分类,并比较降维前后的分类效果。

2. 代码实现与分析

2.1 数据准备与PCA降维

from sklearn.decomposition import PCA
import pandas as pd# 数据读取
data = pd.read_excel(".\hua.xlsx")# 数据划分
X = data.iloc[:,:-1]  # 特征
y = data.iloc[:,-1]   # 标签# PCA实例化与训练
pca = PCA(n_components=0.90)  # 保留90%的方差
pca.fit(X)  # 训练PCA模型# 输出PCA结果
print('特征所占百分比:{}'.format(sum(pca.explained_variance_ratio_)))
print(pca.explained_variance_ratio_) # 数据降维
new_x = pca.transform(X)
print('PCA降维后数据:')
print(new_x)

2.2 数据分割与模型训练

from sklearn.model_selection import train_test_split# 数据分割
x_train, x_test, y_train, y_test = train_test_split(new_x, y, test_size=0.2, random_state=0)# 逻辑回归模型
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(x_train, y_train)# 预测
train_pred = classifier.predict(x_train)
test_pred = classifier.predict(x_test)print("训练集预测结果:", train_pred)
print("测试集预测结果:", test_pred)

2.3 评估指标

from sklearn.metrics import classification_report# 训练集评估
print("训练集分类报告:")
print(classification_report(y_train, train_pred))# 测试集评估
print("测试集分类报告:")
print(classification_report(y_test, test_pred))

3. PCA原理回顾

PCA(主成分分析)是一种常用的降维方法,其核心思想是通过线性变换将高维数据投影到低维空间,同时保留尽可能多的原始数据信息。

3.1 PCA关键步骤

  1. 1.

    ​数据标准化​​:将每个特征减去其均值

  2. 2.

    ​计算协方差矩阵​​:反映特征间的相关性

  3. 3.

    ​特征值分解​​:获取特征值和特征向量

  4. 4.

    ​选择主成分​​:按特征值大小排序,选择前k个

  5. 5.

    ​数据转换​​:将原始数据投影到主成分空间

3.2 数学原理

PCA的核心数学操作是协方差矩阵的特征分解:

通过找到矩阵P使得:

是一个对角矩阵,且对角元素按从大到小排列。

4. 结果分析与比较

4.1 降维前后模型性能比较

我们可以比较使用PCA降维前后模型的性能差异:

# 不降维的模型
x_train_raw, x_test_raw, y_train_raw, y_test_raw = train_test_split(X, y, test_size=0.2, random_state=0)classifier_raw = LogisticRegression()
classifier_raw.fit(x_train_raw, y_train_raw)raw_train_pred = classifier_raw.predict(x_train_raw)
raw_test_pred = classifier_raw.predict(x_test_raw)print("原始数据训练集分类报告:")
print(classification_report(y_train_raw, raw_train_pred))
print("原始数据测试集分类报告:")
print(classification_report(y_test_raw, raw_test_pred))

4.2 分析结论

  1. 1.

    ​降维效果​​:PCA可以有效减少特征维度,同时保留大部分信息

  2. 2.

    ​模型性能​​:对于不同数据集,PCA可能提高或降低模型性能

    • 大数据集:PCA可以提高计算效率,可能提升性能

    • 小数据集:PCA可能丢失重要信息,降低性能

  3. 3.

    ​实际应用​​:需要根据具体数据集和任务需求决定是否使用PCA

http://www.dtcms.com/a/336271.html

相关文章:

  • RocketMQ面试题-未完
  • 芋道RBAC实现介绍
  • python+flask后端开发~项目实战 | 博客问答项目--模块化文件架构的基础搭建
  • Valgrind 并发调试 ·:用 Helgrind 抓住线程里的“看不见的错”
  • 数据结构:在二叉搜索树中插入元素(Insert in a BST)
  • linux-高级IO(上)
  • 猫头虎AI分享|一款Coze、Dify类开源AI应用超级智能体Agent快速构建工具:FastbuildAI
  • #买硬盘欲安装k8s记
  • Flutter 3.35 更新要点解析
  • ICCV 2025 | Reverse Convolution and Its Applications to Image Restoration
  • 如何运用好DeepSeek为自己服务:智能增强的范式革命 1.2 DeepSeek认知增强模型
  • 计算机基础速通--数据结构·图的基础应用三(基础图算法进阶)
  • Tauri 框架介绍
  • 《Nursing Research》(护理SCI)LaTeX模板详细教程:从入门到投稿(一)
  • 炒股术语:“洗盘”
  • LLM入门学习
  • 【165页PPT】锂电池行业SAP解决方案(附下载方式)
  • 【C++】Windows 下 TCP接口超详介绍,如何实现一个TCP服务端和客户端
  • 又一家茑屋书店即将歇业,精品书店的未来在哪里?
  • ruoyi-vue(十一)——代码生成
  • Python爬虫实战:研究optimesh库,构建Github网格数据采集系统
  • AntSK-PyAPI技术深度解析:打造企业级文本嵌入向量服务的完整指南
  • C语言(12)——进阶函数
  • 【Linux】文件基础IO
  • 软件需求High-Level(高层级)需求和Low-Level(低层级)需求
  • rt-thread audio框架移植stm32 adc+dac,用wavplayer录音和播放
  • 测试Windows10IoT系统是否可以正常运行KingSCSDA3.8软件
  • python的软件工程与项目管理课程组学习系统
  • 算法第四十八天:单调栈part01(第十章)
  • C++ 力扣 904.水果成篮 题解 优选算法 滑动窗口 每日一题