降维算法的简单介绍
降维算法
降维算法: 通过减少数据的维度,如主成分分析和 t-分布邻域嵌入等。
降维通俗的讲,是通过减少数据的维度来处理高维数据的过程。降维算法有助于消除数据中的冗余信息,减少噪声,并提高计算效率。以下是一些常见的降维算法:
1.主成分分析(Principal Component Analysis,PCA):原理: 将数据投影到一个新的坐标系,使得数据在新坐标系中的方差最大。特点: 通过选择主成分(新坐标系的基向量)来达到降维的效果,适用于线性数据。算法流程图:标准化数据: 对原始数据进行标准化,使每个特征的均值为0,方差为1。计算协方差矩阵: 计算标准化后的数据的协方差矩阵。计算特征值和特征向量: 对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。选择主成分: 选择最大的k个特征值对应的特征向量,构成投影矩阵。投影: 将标准化后的数据投影到选定的主成分上,得到降维后的数据。
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt# 生成示例数据
np.random.seed(42)
data = np.random.rand(100, 2) * 10# 使用PCA算法
pca = PCA(n_components=1)
pca_result = pca.fit_transform(data)# 可视化原始数据和主成分
plt.scatter(data[:, 0], data[:, 1], label='Original Data', alpha=0.5)
plt.scatter(pca.components_[0, 0], pca.components_[0, 1], color='red', label='Principal Component', marker='^', s=200)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()
2.t-分布邻域嵌入(t-Distributed Stochastic Neighbor Embedding,t-SNE):原理: 将高维空间中的相似性映射到低维空间中,强调保留相似样本之间的距离。特点: 用于可视化高维数据,并保留局部结构,但不适用于全局结构。算法流程图:计算相似度: 对原始高维数据计算相似度矩阵,使用条件概率来表示数据点之间的相似度。定义t分布相似度: 使用t分布的概率分布来定义相似度的分布。随机初始化低维空间: 在低维空间中随机初始化数据点的位置。优化: 通过最小化高维空间和低维空间之间的相似度差异来优化低维空间的布局。这通常使用梯度下降等优化算法来完成。迭代: 重复步骤3和步骤4,直到达到最大迭代次数或达到收敛条件。t-SNE主要用于可视化高维数据,对于大规模数据集,需要谨慎调整参数以避免计算开销过大。在实际应用中,你可能需要进行参数调整以及对结果进行解释和分析。
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt# 加载示例数据集
digits = load_digits()
data = digits.data
target = digits.target# 使用t-SNE算法进行降维
tsne = TSNE(n_components=2, random_state=42)
tsne_result = tsne.fit_transform(data)# 可视化结果
plt.scatter(tsne_result[:, 0], tsne_result[:, 1], c=target, cmap='viridis', marker='o', s=50)
plt.title('t-SNE Visualization')
plt.show()
3.多维尺度分析(Multidimensional Scaling,MDS):原理: 将高维数据映射到低维空间,保持样本之间的距离。特点: 适用于保留全局结构,但计算复杂度较高。算法流程图:计算相似度矩阵: 对原始高维数据计算相似度矩阵,通常使用欧氏距离或其他相似性度量。构建距离矩阵: 从相似度矩阵计算距离矩阵,用于表示数据点之间的距离。中心化矩阵: 对距离矩阵进行中心化操作,以确保在低维空间中的数据点之间的内积等于原始距离矩阵中的对应元素。特征值分解: 对中心化的距离矩阵进行特征值分解,得到特征值和对应的特征向量。选择维度: 选择要保留的低维度数量,通常是2或3。映射低维空间: 使用前几个特征向量,将原始高维数据映射到低维空间。
from sklearn.manifold import MDS
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt# 加载示例数据集
digits = load_digits()
data = digits.data
target = digits.target# 使用MDS算法进行降维
mds = MDS(n_components=2, random_state=42)
mds_result = mds.fit_transform(data)# 可视化结果
plt.scatter(mds_result[:, 0], mds_result[:, 1], c=target, cmap='viridis', marker='o', s=50)
plt.title('MDS Visualization')
plt.show()
4.自编码器(Autoencoder):原理: 通过神经网络学习数据的紧凑表示,然后将其映射到低维空间。特点: 由编码器和解码器组成,适用于非线性数据降维。算法流程图:构建编码器和解码器: 定义编码器和解码器的结构,通常使用神经网络。定义损失函数: 使用重建误差(如均方差)来定义损失函数,衡量原始输入与重建输出之间的差异。训练自编码器: 通过反向传播算法最小化损失函数,优化编码器和解码器的参数。潜在表示: 使用训练后的编码器将输入数据映射到潜在空间。重建数据: 使用训练后的解码器将潜在表示映射回原始输入空间,重建数据。
from keras.layers import Input, Dense
from keras.models import Model
from keras.datasets import mnist
import matplotlib.pyplot as plt# 加载MNIST数据集
(x_train, _), (x_test, _) = mnist.load_data()# 数据预处理
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
x_train = x_train.reshape((len(x_train), -1))
x_test = x_test.reshape((len(x_test), -1))# 构建自编码器模型
input_layer = Input(shape=(784,))
encoded = Dense(128, activation='relu')(input_layer)
decoded = Dense(784, activation='sigmoid')(encoded)autoencoder = Model(input_layer, decoded)
autoencoder.compile(optimizer='adam', loss='mean_squared_error')# 训练自编码器
autoencoder.fit(x_train, x_train, epochs=10, batch_size=256, shuffle=True, validation_data=(x_test, x_test))# 使用训练后的自编码器进行数据重建
decoded_imgs = autoencoder.predict(x_test)# 可视化原始图像与重建图像
n = 10 # 显示的图像数量
plt.figure(figsize=(20, 4))
for i in range(n):# 原始图像ax = plt.subplot(2, n, i + 1)plt.imshow(x_test[i].reshape(28, 28))plt.gray()ax.get_xaxis().set_visible(False)ax.get_yaxis().set_visible(False)# 重建图像ax = plt.subplot(2, n, i + 1 + n)plt.imshow(decoded_imgs[i].reshape(28, 28))plt.gray()ax.get_xaxis().set_visible(False)ax.get_yaxis().set_visible(False)
plt.show()
5.因子分析(Factor Analysis):原理: 假设观察到的数据是由一些潜在的因子和噪声共同决定的。特点: 用于识别影响数据变异的潜在因子。算法流程图:设定模型: 确定因子分析模型的结构,包括选择因子数量和确定因子负荷矩阵。拟合模型: 使用最大似然估计或其他方法拟合模型参数,包括因子负荷矩阵和误差方差。获取因子负荷矩阵: 得到因子负荷矩阵,该矩阵描述了观测变量与潜在因子之间的关系。因子得分: 计算每个样本的因子得分,表示潜在因子的影响。解释结果: 分析因子负荷矩阵和因子得分,解释观测变量之间的共享变异性。
from factor_analyzer import FactorAnalyzer
import pandas as pd
import matplotlib.pyplot as plt# 生成示例数据
np.random.seed(42)
data = pd.DataFrame(np.random.rand(100, 5), columns=['Var1', 'Var2', 'Var3', 'Var4', 'Var5'])# 使用因子分析算法
factor_analyzer = FactorAnalyzer(n_factors=2, rotation='varimax')
factor_analyzer.fit(data)# 获取因子负荷矩阵
factor_loadings = factor_analyzer.loadings_# 获取因子得分
factor_scores = factor_analyzer.transform(data)# 可视化因子负荷矩阵
plt.imshow(factor_loadings, cmap='viridis', aspect='auto', interpolation='none')
plt.colorbar()
plt.title('Factor Loadings Matrix')
plt.show()# 打印因子得分
print('Factor Scores:')
print(factor_scores)
6.局部线性嵌入(Locally Linear Embedding,LLE):原理: 在局部对数据进行线性嵌入,保持邻近样本之间的线性关系。特点: 对于流形结构的数据具有良好的效果,但对噪声敏感。算法流程图:选择邻域: 对每个数据点选择其近邻数据点。重构权重: 对每个数据点重构其与邻域数据点之间的线性关系,即通过最小化重构误差找到权重。构建权重矩阵: 将所有数据点的权重组合成权重矩阵。嵌入低维空间: 通过最小化嵌入后的数据点在低维空间中的重构误差,找到最终的低维表示。
from sklearn.datasets import make_swiss_roll
from sklearn.manifold import LocallyLinearEmbedding
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 生成示例数据集(三维瑞士卷)
data, color = make_swiss_roll(n_samples=1000, random_state=42)# 使用LLE算法进行降维
lle = LocallyLinearEmbedding(n_neighbors=12, n_components=2, method='standard', random_state=42)
lle_result = lle.fit_transform(data)# 可视化结果
fig = plt.figure(figsize=(10, 5))# 原始三维数据可视化
ax1 = fig.add_subplot(121, projection='3d')
ax1.scatter(data[:, 0], data[:, 1], data[:, 2], c=color, cmap='viridis')
ax1.set_title('Original 3D Data')# LLE降维后的二维数据可视化
ax2 = fig.add_subplot(122)
ax2.scatter(lle_result[:, 0], lle_result[:, 1], c=color, cmap='viridis')
ax2.set_title('LLE Embedding (2D)')
plt.show()
7.随机投影(Random Projection):随机投影(Random Projection)是一种用于降维的快速而有效的技术,它通过随机选择投影矩阵来将高维数据映射到低维空间。原理: 通过将数据投影到一个低维的随机子空间来降维。特点: 计算效率高,对于大规模数据集适用。算法流程图:选择投影矩阵: 随机生成或选择一个投影矩阵。投影: 使用选择的投影矩阵将高维数据映射到低维空间。得到降维后的数据: 得到降维后的数据,完成降维过程。
from sklearn.datasets import load_digits
from sklearn.random_projection import GaussianRandomProjection
import matplotlib.pyplot as plt
import numpy as np# 加载示例数据集
digits = load_digits()
data = digits.data
target = digits.target# 使用随机投影算法进行降维
rp = GaussianRandomProjection(n_components=2, random_state=42)
rp_result = rp.fit_transform(data)# 可视化结果
plt.scatter(rp_result[:, 0], rp_result[:, 1], c=target, cmap='viridis', marker='o', s=50)
plt.title('Random Projection')
plt.show()相关文章:
降维算法的简单介绍
降维算法 降维算法: 通过减少数据的维度,如主成分分析和 t-分布邻域嵌入等。 降维通俗的讲,是通过减少数据的维度来处理高维数据的过程。降维算法有助于消除数据中的冗余信息,减少噪声,并提高计算效率。以下是一些常见…...
k8s的声明式资源管理
在k8s当中支持两种声明资源的方式: 1、 yaml格式:主要用于和管理资源对象 2、 json格式:主要用于在API接口之间进行消息传递 声明式管理方法(yaml)文件 1、 适合对资源的修改操作 2、 声明式管理依赖于yaml文件,所有的内容都…...
Git | tag相关命令
语法命令 git tag -h usage: git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]<tagname> [<head>]or: git tag -d <tagname>...or: git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit&g…...
【Java期末】学生成绩管理系统
诚接计算机专业编程任务(C语言、C、Python、Java、HTML、JavaScript、Vue等)10/15R,如有需要请私信我,或者加我的企鹅号:1404293476 本文资源下载地址:https://download.csdn.net/download/weixin_47040861/88697244 —————…...
顶顶通呼叫中心中间件通过队列外呼拨打另一个sip并且放音(mod_cti基于FreeSWITCH)
介绍 顶顶通呼叫中心中间件通过队列外呼拨打另一个sip并且放音 一、添加acl 打开ccadmin->点击配置文件->点击acl.conf->在</list>后面添加一条图中的信息->muqi是我自己设置的名字你们可以修改为自己需要的名字->添加好了点击提交XML->在运维调试点…...
SQL Server从0到1——报错注入
报错注入分为三类:隐式转换,和显示转换,declare函数 隐式转换: 原理:将不同数据类型的数据进行转换或对比 select * from test.dbo.users where (select user)>0 #对比 select * from test.dbo.users where ((sel…...
【python高级用法】线程
前言 Python通过标准库的 threading 模块来管理线程。这个模块提供了很多不错的特性,让线程变得无比简单。实际上,线程模块提供了几种同时运行的机制,实现起来非常简单。 线程模块 线程对象Lock对象RLock对象信号对象条件对象事件对象 简单…...
分布式高级知识点
分布式一致性算法: Paxos Paxos 是一种分布式一致性算法,用于在分布式系统中达成共识。它可以保证,即使在存在节点故障的情况下,系统也能就某个值达成一致。 Paxos 算法的基本思想是,首先选出一个协调者(leader)。协调者负责向其他节点发送提案(proposal)。其他节点收…...
Linux 命令之 dpkg 的简单使用
查询已安装的软件包及其依赖关系 dpkg -s name...
Ubuntu20.04服务器使用教程(安装教程、常用命令、故障排查)持续更新中.....
安装教程(系统、NVIDIA驱动、CUDA、CUDNN、Pytorch、Timeshift、ToDesk) 制作U盘启动盘,并安装系统 在MSDN i tell you下载Ubuntu20.04 Desktop 版本,并使用Rufus制作UEFI启动盘,参考UEFI安装Ubuntu使用GPTUEFI模式安…...
访问学者J1签证的申请流程
访问学者J1签证是许多人前往美国进行学术研究和文化交流的重要途径之一。申请J1签证需要经过一系列步骤和程序,让知识人网小编带大家来了解一下申请流程吧。 首先,申请者需要确认自己符合J1签证的资格要求。这包括被美国的赞助机构或组织接受,…...
51单片机(STC8)-- GPIO输入输出
文章目录 I/O口相关寄存器端口数据寄存器端口模式配置寄存器(PxM0,PxM1)端口上拉电阻控制寄存器(PxPU)关于I/O的注意事项 配置I/O口I/O设置demoI/O端口模式LED控制(I/O输出)按键检测(I/O输入) S…...
【实用安装教程】在win系统下制作Mac OS镜像启动U盘
第一步:制作Mac OS系统引导镜像启动U盘 准备一个8G(或以上)的U盘插入到win系统的电脑上 去下载TransMac(Mac启动盘制作工具)v10.4按照说明安装好 插入准备好的U盘,U盘数据要转移,打开TransMac,右键U盘选…...
职场唠嗑-国家教学
文章目录 职场晋升潜规则:让上司看到自己工作能力职场生存指南:脆弱无罪,眼泪如何变利器关于具备谋取好职位的资格实习生在职场的基本“规矩”比能力更能决定人生的,是你对工作的态度跳槽:看别人家的“饭”端自家的碗职…...
【温故而知新】JavaScript数据结构详解
一、概念 JavaScript是一种弱类型的编程语言,它提供了一些内置的数据结构来存储和组织数据。 在计算机科学中,数据结构是一种特定的方式来组织和存储数据,以便于有效地访问和修改数据。在JavaScript中,数据结构是指相互之间存在…...
matlab如何标定相机内外参和畸变参数
关于内外参矩阵和畸变矩阵可以学习 https://blog.csdn.net/qq_30815237/article/details/87530011?spm1001.2014.3001.5506 在APP中找到 camera Calibrator 点击 Add Images,导入拍照图片。标定20张左右就够了,然后角度变一下,但不需要变太…...
【卫星科普】什么是农业一号卫星和农业二号卫星?
农业一号卫星和农业二号卫星是中国自主研发的两颗重要卫星,主要用于农业领域的监测和研究。 农业一号卫星是中国第一颗具备红边波段传感器的卫星,也是世界上第一颗具备红边波段的宽视场多光谱中高分辨率卫星。这对农业农村遥感监测非常重要,…...
imgaug库指南(一):从入门到精通的【图像增强】之旅
文章目录 引言imgaug简介安装和导入imgaug代码示例imgaug的强大之处和用途小结结尾 引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和…...
vue封装基础input组件(添加防抖功能)
先看一下效果: // 调用页面 <template><div><!-- v-model:伪双向绑定 --><my-input v-model"inputVal" label"姓名" type"textarea" /></div> </template><script> import…...
小程序一次性订阅消息(消息通知):java服务端实现
文章目录 引言一、消息订阅1.1 小程序订阅消息功能介绍1.2 消息分类1.2.1 新版一次性订阅消息Beta1.2.2 一次性订阅消息(用户通过弹窗订阅)1.2.3 长期订阅消息(用户通过弹窗订阅)1.2.4 设备订阅消息 二、获取模板ID1.登录[微信公众…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
2.2.2 ASPICE的需求分析
ASPICE的需求分析是汽车软件开发过程中至关重要的一环,它涉及到对需求进行详细分析、验证和确认,以确保软件产品能够满足客户和用户的需求。在ASPICE中,需求分析的关键步骤包括: 需求细化:将从需求收集阶段获得的高层需…...
