数据处理方法—— 7 种数据降维操作 !!

文章目录

数据降维

1. 主成分分析(PCA)

2. 线性判别分析(LDA)

3. t-分布随机邻域嵌入(t-SNE)

4. 局部线性嵌入(LLE)

5. 多维缩放(MDS)

6. 奇异值分解(SVD)

7. 自动编码器(Autoencoders)

总结


数据降维

数据降维是一种将高维数据转换为低纬数据的技术,同时尽量保留原始数据的重要信息。这对于处理大规模数据集非常有用,因为它有助于减少计算资源的需要,并提高算法的效率。以下是一些常用的数据降维方法,以及它们的原理和应用。

1. 主成分分析(PCA)

原理:PCA通过正交变换将原始数据转换到一组线性不相关的成份上,通常称为主成分。它识别数据中的模式,以找出数据的最大方差方向,并将数据投影到这些方向上。

应用:PCA通常用于减少数据集的维度,同时尽可能保留数据中的变异性。它也常用于可视化高维数据。

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

# 加载数据集
data = load_iris()
X = data.data

# 应用PCA
pca = PCA(n_components=2)  # 降到2维
X_pca = pca.fit_transform(X)

# 可视化结果
plt.scatter(X_pca[:, 0], X_pca[:, 1])
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA of Iris Dataset')
plt.show()

2. 线性判别分析(LDA)

原理:LDA是一种监督学习算法,旨在找到能够最大化类间差异和最小化类内差异的特征子空间。LDA特别关注数据的类别标签,使得数据投影后,同类数据点尽可能接近,不同类数据点尽可能远离。

应用:LDA常用于增强分类模型的性能。通过最大化类间差异和最小化类内差异,LDA能够提高分类算法的准确度。它还常用于模式识别任务,如人脸识别,其中可以利用LDA来提取面部特征。(LDA用于展示不同类别的数据在降维后的分布情况)。

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

# LDA也是一种监督学习算法,需要类别标签
y = data.target

# 应用LDA
lda = LDA(n_components=2)  # 降到2维
X_lda = lda.fit_transform(X, y)

# 可视化结果
plt.scatter(X_lda[:, 0], X_lda[:, 1], c=y)
plt.xlabel('LD1')
plt.ylabel('LD2')
plt.title('LDA of Iris Dataset')
plt.show()

3. t-分布随机邻域嵌入(t-SNE)

原理:t-SNE是一种非线性降维技术,特别适合于将高维数据嵌入到二维或三维空间中进行可视化。它通过概率分布转换到相似性来保留局部结构,使得相似的对象在低维空间中更接近。

应用:t-SNE常用于高维数据的可视化。由于它在降维过程中保持了数据点间的局部关系,因此它特别适合于探索性数据分析,以识别高维数据集中的模式和群体。在生物信息学和社交网络分析中尤为常见。

from sklearn.manifold import TSNE

# 应用t-SNE
tsne = TSNE(n_components=2, random_state=0)
X_tsne = tsne.fit_transform(X)

# 可视化结果
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y)
plt.xlabel('t-SNE feature 1')
plt.ylabel('t-SNE feature 2')
plt.title('t-SNE of Iris Dataset')
plt.show()

4. 局部线性嵌入(LLE)

原理:LLE是一种非线性降维技术。它的核心思想是保持数据点的局部特性。LLE首先在每个点的邻域中找到最佳的线性表示,然后在低维空间中重建这些线性关系。这种方法尤其适用于那些局部区域结构重要的数据。

应用:LLE通常用于数据可视化和探索数据分析,尤其是当数据具有非线性结构时。它在图像处理、语音识别和生物信息学中被广泛应用,用于发现数据中的内在结构和模式。

from sklearn.manifold import LocallyLinearEmbedding

# 应用LLE降维
lle = LocallyLinearEmbedding(n_components=2)
X_lle = lle.fit_transform(X)

# 可视化结果
plt.scatter(X_lle[:, 0], X_lle[:, 1], c=digits.target, cmap='Spectral', alpha=0.5)
plt.colorbar()
plt.title("LLE on the Digits Dataset")
plt.show()

5. 多维缩放(MDS)

原理:MDS是一种用于降维的技术,旨在数据点在低维空间中的相对位置尽可能地反映它们在原始高维空间中的距离。MDS通过优化过程寻找一个低维表示,使得这个表示中的点间距离尽可能地接近原始数据中的距离。

应用:MDS常用于数据可视化,尤其是当我们关心数据点之间的距离或相似性时。它在心理学、市场研究和社会学中特别有用,用于分析和可视化距离或相似性数据,如在语义分析或用户偏好研究中。

from sklearn.manifold import MDS
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt

# 加载数据集
digits = load_digits()
X = digits.data

# 应用MDS降维
mds = MDS(n_components=2)
X_mds = mds.fit_transform(X)

# 可视化结果
plt.scatter(X_mds[:, 0], X_mds[:, 1], c=digits.target, cmap='Spectral', alpha=0.5)
plt.colorbar()
plt.title("MDS on the Digits Dataset")
plt.show()

6. 奇异值分解(SVD)

原理:SVD是一种将矩阵分解为三个矩阵的乘积的方法。它将原始数据矩阵分解为特征值和特征向量,能够揭示数据的本质结构。

应用:SVD在推荐系统中非常有用,尤其是处理大型稀疏矩阵时。通过提取矩阵中最重要的特征,SVD有助于预测用户对项目的评分或偏好。此外,它也用于数字信号处理和图像压缩领域。

import numpy as np
from scipy.linalg import svd
import matplotlib.pyplot as plt

# 假设 A 是一个矩阵
U, s, VT = svd(A)

# 选择前k个奇异值来近似原始矩阵
k = 2
A_approx = np.dot(U[:, :k], np.dot(np.diag(s[:k]), VT[:k, :]))

# 可以将 A_approx 可视化或用于进一步分析

7. 自动编码器(Autoencoders)

原理:Autoencoders是一种基于神经网络的非线性降维技术。它通过训练网络学习一个低维表示(编码),然后重构输出,以尽可能接近输入数据。

应用:Autoencoders广泛应用于无监督学习的特征提取和数据压缩。在深度学习领域,它们用于学习数据的有效表示,有助于改善图像重构和去噪任务。也可以生成新的数据实例,如在生成对抗网络(GAN)中的应用。

from keras.layers import Input, Dense
from keras.models import Model

# 设定输入维度
input_dim = 784  # 例如,对于 28x28 的图像,这将是 784
encoding_dim = 32  # 编码空间的维度

# 定义编码器层
input_layer = Input(shape=(input_dim,))
encoded = Dense(encoding_dim, activation='relu')(input_layer)

# 定义解码器层
decoded = Dense(input_dim, activation='sigmoid')(encoded)

# 构建自动编码器模型
autoencoder = Model(input_layer, decoded)

# 构建编码器模型
encoder = Model(input_layer, encoded)

# 构建解码器模型
encoded_input = Input(shape=(encoding_dim,))
decoder_layer = autoencoder.layers[-1]  # 最后一层作为解码器
decoder = Model(encoded_input, decoder_layer(encoded_input))

# 编译自动编码器
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')

# 训练自动编码器
# 假设 x_train 是输入数据
# autoencoder.fit(x_train, x_train, epochs=50, batch_size=256, shuffle=True)

# 用编码器和解码器生成编码和解码后的数据
# encoded_imgs = encoder.predict(x_test)
# decoded_imgs = decoder.predict(encoded_imgs)

总结

数据降维技术广泛被划分为两类:线性降维方法与非线性降维方法。线性方法,例如主成分分析(PCA)和线性判别分析(LDA),通常适用于数据具有线性分布的场景。相对地,非线性方法如t-分布随机邻域嵌入(t-SNE)、多维缩放(MDS)和局部线性嵌入(LLE),则更适合处理具有复杂分布特征的数据集。

选择合适的降维技术取决于数据的固有属性及分析目标的具体需求。在适当的情境中应用恰当的降维策略,能够显著提升数据处理流程的效率以及算法的整体性能表现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/353879.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端实现弹小球功能

这篇文章将会做弹小球游戏,弹小球游戏大家小时候都玩过,玩家需要在小球到达游戏区域底部时候控制砖块去承接小球,并不断的将小球弹出去。 首先看一下实现的效果。 效果演示 玩家需要通过控制鼠标来实现砖块的移动,保证在小球下落…

Linux操作系统运维-用户与用户组管理

Linux操作系统运维-用户与用户组管理 用户种类与标识查看 超级用户(root):可以不受限制地执行所有操作,拥有系统最高权限,修改系统设置与管理用户均需要root权限系统用户(system):…

Flutter App 生命周期观察监听

前言 本文主要讲解两种 Flutter生命周期观察监听 方式一:Flutter SDK 3.13 之前的方式,WidgetsBindingObserver; 方式二:Flutter SDK 3.13 开始的新方式,AppLifecycleListener; 测试平台:IO…

《HelloGitHub》第 94 期

兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 …

宏景-eHR-frcodeaddtreeservlet接口存在SQL注入

指纹特征 FOFA&#xff1a;icon_hash"947874108" || body<div class"hj-hy-all-one-logo" || app"HJSOFT-HCM" 漏洞复现 POST /templates/attestation/../../servlet/FrCodeAddTreeServlet HTTP/1.1 Host: User-Agent: Mozilla/5.0 (Windo…

精品基于Uniapp+ssm宠物时光管理系统App

《[含文档PPT源码等]精品基于Uniappssm宠物时光管理系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;ssm 安卓框架&#xff1a…

游戏开发丨基于Pygame的贪吃蛇小游戏

文章目录 写在前面需求分析程序设计程序分析运行结果系列文章写在后面 写在前面 本期内容 基于pygame的贪吃蛇小游戏 所需环境 pythonpycharm或anacondapygame 下载地址 https://download.csdn.net/download/m0_68111267/88789657 需求分析 本游戏使用Pygame模块开发&a…

Go 知识chan

Go 知识chan 1. 基本知识1.1 定义1.2 操作1.3 操作限定1.4 chan 读写 2. 原理2.1 数据结构2.2 环形队列2.3 等待队列2.4 类型消息2.5 读写数据2.6 关闭chan 3. 使用3.1 操作符使用3.2 select3.3 for-range https://a18792721831.github.io/ 1. 基本知识 chan是go里面里面提供…

ssh异常报错:Did not receive identification string from

一、问题描述 某次外出在异地工作场所xshell炼乳远程服务器时&#xff0c;报错&#xff1a;Connection closed by foreign host. D&#xff0c;服务器查看secure日志或sshd服务状态会显示&#xff1a;id not receive identification string from client_ip; 二、分析处理 1&a…

综合案例 - 商品列表

文章目录 需求说明1.my-tag组件封装&#xff08;完成初始化&#xff09;2.may-tag封装&#xff08;控制显示隐藏&#xff09;3.my-tag组件封装&#xff08;v-model处理&#xff1a;信息修改&#xff09;4.my-table组件封装&#xff08;整个表格&#xff09;①数据不能写死&…

修复idea,eclipse ,clion控制台中文乱码

控制台乱码问题主要原因并不在编译器IDE身上&#xff0c;还主要是Windows的控制台默认编码问题。。。 Powershell&#xff0c;cmd等默认编码可能不是UTF-8&#xff0c;无需改动IDE的settings或者properties&#xff08;这治标不治本&#xff09;&#xff0c;直接让Windows系统…

编写nginx脚本,安装失败

这是我写的nginx脚本-&#xff08;正确的&#xff0c;已经修改过的&#xff09; 这是我在运行脚本是出现的问题 这是我在nginx官网上粘贴的内容&#xff0c;请注意我用红笔画的地方&#xff0c;与第一张我写的脚本图片作对比&#xff0c;会发现多出现两个转义符号\。第二幅图就…

Axolotl:一款极简的大模型微调(Finetune)开源框架

今天给大家分享一款工具&#xff0c;Axolotl[1] 是一个旨在简化各种AI模型的微调过程的工具&#xff0c;支持多种配置和架构。 特点&#xff1a; 可训练各种 Huggingface 模型&#xff0c;如 llama、pythia、falcon、mpt支持 fullfinetune、lora、qlora、relora 和 gptq使用简…

Linux GPIO模拟SPI接口介绍

一. 前言 上次通过GPIO模拟IIC的驱动一块0.98英寸的OLED后&#xff0c;想着下次用下GPIO模拟SPI接口试下。本文会介绍怎么用GPIO模拟SPI接口的方式为设备添加一块spi nor flash&#xff0c;flash模块如下图所示&#xff1a; 上图是一个spi nor模块&#xff0c;上面焊接了W25Q32…

acwing周赛140 b题

思路&#xff1a;我们按照从小到大的顺序将数组逆转好&#xff0c;然后枚举数组首项&#xff0c;分别让其1&#xff0c;-1&#xff0c;0&#xff0c;然后求出公差&#xff0c;从前往后遍历即可。 代码&#xff1a; int ans1(){//不动int cha (a[n] - a[1] 1) / (n - 1);int…

原创改进 | 融合蝠鲼觅食与联想学习的量子多目标灰狼优化算法(Matlab)

​前面的文章里作者介绍了多目标灰狼优化算法(Multi-Objective Grey Wolf Optimizer&#xff0c;MOGWO)&#xff0c;该算法是由Mirjalili等(灰狼算法的提出者)于2016年提出[1]&#xff0c;发表在中科院一区期刊《expert systems with applications》。 MOGWO保留了灰狼算法的种…

无际线复选框

效果演示 实现了一个网格布局&#xff0c;其中每个网格是一个复选框&#xff0c;可以选择是否显示。每个复选框都有一个漂浮的天花板&#xff0c;表示它是一个房间的天花板。每个房间的天花板都有一个不同的形状和颜色&#xff0c;分别对应不同的房间。整个页面的背景是一个由两…

小米13utltra激活冰箱

安装adb驱动https://www.jianshu.com/p/6c41d34d9202 直接下载使用 连接上小米手机,退出账号,关闭锁屏密码,打开usb调试,usb调试(安全设置) adb shell dpm set-device-owner com.catchingnow.icebox/.receiver.DPMReceiver如果显示Success&#xff0c;则您已成功激活冰箱。 …

【DeepLearning-8】MobileViT模块配置

完整代码&#xff1a; import torch import torch.nn as nn from einops import rearrange def conv_1x1_bn(inp, oup):return nn.Sequential(nn.Conv2d(inp, oup, 1, 1, 0, biasFalse),nn.BatchNorm2d(oup),nn.SiLU()) def conv_nxn_bn(inp, oup, kernal_size3, stride1):re…

PostgreSQL技术大讲堂 - 第43讲:流复制原理

PostgreSQL从小白到专家&#xff0c;是从入门逐渐能力提升的一个系列教程&#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容&#xff0c;希望对热爱PG、学习PG的同学们有帮助&#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第43讲&#…