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

常见降维算法分析

一、常见的降维算法

  1. LDA线性判别
  2. PCA主成分分析
  3. t-sne降维

二、降维算法原理

2.1 LDA 线性判别
  • 原理 :LDA(Linear Discriminant Analysis)线性判别分析是一种有监督的降维方法。它的目标是找到一个投影方向,使得不同类别的数据在投影后尽可能分开,同一类别的数据尽可能聚集。通过最大化类间散度与类内散度的比值,来确定最优的投影方向。
  • 数学公式 :设 S b S_b Sb 为类间散度矩阵, S w S_w Sw 为类内散度矩阵,LDA 就是求解广义特征值问题 S b w = λ S w w S_bw = \lambda S_ww Sbw=λSww,其中 w w w 为投影方向, λ \lambda λ 为特征值。
2.2 PCA 主成分分析
  • 原理 :PCA(Principal Component Analysis)主成分分析是一种无监督的降维方法。它通过对数据进行线性变换,将原始数据投影到一组新的正交坐标轴上,这些坐标轴称为主成分。主成分按照方差大小排序,方差越大表示该主成分包含的信息越多。PCA 选择前 k k k 个方差最大的主成分作为新的特征,从而实现降维。
  • 数学公式 :首先计算数据的协方差矩阵 Σ \Sigma Σ,然后对 Σ \Sigma Σ 进行特征值分解 Σ = U Λ U T \Sigma = U\Lambda U^T Σ=UΛUT,其中 U U U 是特征向量矩阵, Λ \Lambda Λ 是特征值对角矩阵。选择前 k k k 个特征向量组成投影矩阵 W W W,将原始数据 X X X 投影到新的空间 Y = X W Y = XW Y=XW
2.3 t - SNE 降维
  • 原理 :t - SNE(t - Distributed Stochastic Neighbor Embedding)是一种非线性降维方法,主要用于高维数据的可视化。它通过构建高维数据点和低维数据点之间的概率分布,使得高维空间中相似的数据点在低维空间中也尽可能相似。t - SNE 使用 t 分布来计算低维空间中的相似度,从而解决了传统降维方法在处理局部结构时的不足。
  • 数学公式 :t - SNE 定义了高维空间中数据点之间的相似度 p i j p_{ij} pij 和低维空间中数据点之间的相似度 q i j q_{ij} qij,通过最小化这两个分布之间的 KL 散度 C = K L ( P ∣ ∣ Q ) = ∑ i ∑ j p i j log ⁡ p i j q i j C = KL(P||Q) = \sum_{i}\sum_{j}p_{ij}\log\frac{p_{ij}}{q_{ij}} C=KL(P∣∣Q)=ijpijlogqijpij 来找到最优的低维表示。

三、实验过程

3.1 数据预处理
  • 读取 heart.csv 数据集,将特征数据和目标变量分离。
  • 对特征数据进行标准化处理,使得每个特征的均值为 0,方差为 1,以避免特征尺度对降维结果的影响。
import pandas as pd
from sklearn.preprocessing import StandardScaler# 读取数据
data = pd.read_csv('./csv/heart.csv')
X = data.drop('target', axis=1)  # 特征数据
y = data['target']  # 目标变量# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
3.2 降维实验
  • LDA 线性判别 :使用 sklearn 库中的 LinearDiscriminantAnalysis 类进行降维,将数据降维到 1 维(因为目标变量是二分类,LDA 最多可将数据降维到 C − 1 C - 1 C1 维, C C C 为类别数)。
from sklearn.discriminant_analysis import LinearDiscriminantAnalysislda = LinearDiscriminantAnalysis(n_components=1)
X_lda = lda.fit_transform(X_scaled, y)
  • PCA 主成分分析 :使用 sklearn 库中的 PCA 类进行降维,将数据降维到 2 维,以便可视化。
from sklearn.decomposition import PCApca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
  • t - SNE 降维 :使用 sklearn 库中的 TSNE 类进行降维,将数据降维到 2 维,以便可视化。
from sklearn.manifold import TSNEtsne = TSNE(n_components=2)
X_tsne = tsne.fit_transform(X_scaled)
3.3 结果可视化
  • 分别绘制 LDA、PCA 和 t - SNE 降维后的数据散点图,不同类别的数据用不同颜色表示,以便直观观察降维效果。
import matplotlib.pyplot as plt# LDA 可视化
plt.figure(figsize=(15, 5))
plt.subplot(131)
plt.scatter(X_lda, [0] * len(X_lda), c=y, cmap='viridis')
plt.title('LDA')# PCA 可视化
plt.subplot(132)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.title('PCA')# t - SNE 可视化
plt.subplot(133)
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='viridis')
plt.title('t - SNE')plt.show()

在这里插入图片描述

四、实验结果分析

4.1 可视化结果分析
  • 观察 LDA 降维后的散点图,分析不同类别数据在 1 维空间中的分离情况,判断 LDA 是否能够有效区分不同类别的数据。
  • 观察 PCA 降维后的散点图,分析数据在 2 维空间中的分布情况,判断 PCA 是否能够保留数据的主要信息。
  • 观察 t - SNE 降维后的散点图,分析数据在 2 维空间中的局部结构和聚类情况,判断 t - SNE 是否能够揭示数据的潜在分布。
4.2 降维效果评估
  • 可以使用一些评估指标来量化降维效果,如保留的方差比例(PCA)、分类准确率(使用降维后的数据进行分类任务)等。
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 使用 PCA 降维后的数据进行分类
X_train_pca, X_test_pca, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42)
model_pca = LogisticRegression()
model_pca.fit(X_train_pca, y_train)
y_pred_pca = model_pca.predict(X_test_pca)
accuracy_pca = accuracy_score(y_test, y_pred_pca)# 同理可对 LDA 和 t - SNE 降维后的数据进行分类评估print(f"PCA 降维后分类准确率: {accuracy_pca}")

五、结论

总结三种降维算法在 heart.csv 数据集上的优缺点和适用场景。例如,LDA 作为有监督的降维方法,在分类任务中可能更能突出类别间的差异;PCA 是无监督的线性降维方法,计算效率高,适合处理大规模数据;t - SNE 作为非线性降维方法,在可视化方面表现较好,但计算复杂度较高。根据实验结果,为不同的数据分析需求推荐合适的降维算法。

相关文章:

  • Java游戏服务器开发流水账(3)游戏数据的缓存简介
  • spark缓存-persist
  • 算法与数据结构 - 二叉树结构入门
  • 【HarmonyOS NEXT+AI】问答05:ArkTS和仓颉编程语言怎么选?
  • 使用 React Native实现鸿蒙开发的详细方案
  • 双端口ram与真双端口ram的区别
  • 解决 MySQL 数据库无法远程连接的问题
  • BLURRR剪辑软件免费版:创意剪辑,轻松上手,打造个性视频
  • Kubernetes Gateway API 部署详解:从入门到实战
  • Django ORM: values() 和 annotate() 方法详解
  • 排序算法-归并排序
  • istio in action之Gateway流量入口与安全
  • OpenHarmony平台驱动开发(十一),PIN
  • 01.three官方示例+编辑器+AI快速学习webgl_animation_keyframes
  • 解密火星文:LeetCode 269 题详解与 Swift 实现
  • 前端指南——项目代码结构解析(React为例)
  • 在 Ubuntu 上安装并运行 ddns-go 教程
  • 前端面试每日三题 - Day 29
  • 45.传导发射整改摸底测试方法
  • 37-智慧医疗服务平台(在线接诊/问诊)
  • 欧洲理事会前主席米歇尔受聘中欧国际工商学院特聘教授,上海市市长龚正会见
  • 三星“七天机”质保期内屏幕漏液被要求自费维修,商家:系人为损坏
  • 读图|展现城市品格,上海城市影像走进南美
  • 九部门:对机动车特别是货车排放问题的监管将更加严格
  • 刘诚宇、杨皓宇进球背后,是申花本土球员带着外援踢的无奈
  • 深圳一购房者交首付后迟迟无法签合同,澎湃介入后开发商承诺退款