机器学习----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 PCA

pca = 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.​​数据标准化​​:将每个特征减去其均值

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

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

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

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. ​降维效果​​:PCA可以有效减少特征维度,同时保留大部分信息
  2. 模型性能​​:对于不同数据集,PCA可能提高或降低模型性能

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

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

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

本文章已经生成可运行项目
### 关于机器学习 PCA 的相关歌曲或教学资源 尽管 PCA 是一种技术性很强的数学工具,在学术界和工业界有广泛应用,但它本身并不是音乐创作的主题。然而,有一些创作者会将复杂的科学概念转化为易于理解的艺术形式,例如歌曲、动画或其他多媒体资源。以下是关于 PCA 和其他相关内容的教学资源推荐: #### 教学视频资源 1. **StatQuest with Josh Starmer** 这是一个非常受欢迎的数据科学 YouTube 频道,其中有一期专门讲解 PCA 的工作原理及其应用场景[^3]。该频道以其清晰易懂的语言风格著称,适合初学者快速掌握核心概念。 2. **Andrew Ng 的 Coursera 课程** 在 Andrew Ng 提供的《Machine Learning》课程中,PCA 被作为章节的一部分进行了深入讨论[^4]。虽然这门课主要以理论为主,但其配套练习可以帮助学生更好地实践所学知识。 3. **Kaggle 学习平台上的微课程** Kaggle 提供了一系列免费在线教程,其中包括有关度缩减的技术介绍[^5]。这些材料通常配有互动式编码环境 Jupyter Notebook,允许用户边看边练。 #### 图书资料建议 - *Pattern Recognition and Machine Learning* by Christopher M. Bishop 这本书详细介绍了概率论视角下的模式识别方法,并涵盖了多种经典的算法,包括标准版及改进型 PCA (如 Kernel PCA)[^6]。 - *Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow* by Aurélien Géron 此书中不仅讲述了如何实现基本版本的主成分分析法,还探讨了几何直觉背后的逻辑推理过程[^7]。 #### 可能存在的“趣味化”表达方式 目前尚未发现直接针对 PCA 主题谱写的正式出版物级别的乐曲作品;不过某些科普博主可能会尝试制作轻松愉快的小调旋律来辅助记忆复杂术语——这类产物往往存在于社交媒体分享链接里而非传统唱片公司发行列表之中! ```python import numpy as np from sklearn.decomposition import PCA # 创建随机矩阵用于演示目的 X = np.random.rand(100, 5) pca_model = PCA(n_components=2) reduced_X = pca_model.fit_transform(X) print(reduced_X.shape) # 输出应显示为 (100, 2),表示已至二空间 ``` 以上代码片段展示了利用 Python 中 scikit-learn 库执行简单 PCA 操作的方法[^8]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值