MATLAB 实现 t-SNE 快速降维

news/2025/11/27 16:44:04/文章来源:https://www.cnblogs.com/345QIII/p/19278589

MATLAB 实现 t-SNE 快速降维。代码已针对 大数据 >10⁵ 点 做 Barnes-Hut O(N log N) 加速,不依赖 Statistics & ML Toolbox(自带 tsne 需付费)


一、文件列表

  • fast_tsne.m % 主函数(Barnes-Hut)
  • computeGaussianPerp.m % 计算 σ 满足固定 perplexity
  • computeQ.m % 计算 Barnes-Hut Q 矩阵/梯度
  • bh_gradient.m % Barnes-Hut 梯度
  • example_fast_tsne.m % 演示脚本(含 1e5 点测试)

二、算法要点(Barnes-Hut)

  1. 高维相似度:固定 perplexity → 二分查找 σ
  2. 低维嵌入:t-分布,自由度 1(heavy-tail)
  3. 梯度下降:Barnes-Hut 树近似,复杂度 O(N log N)
  4. 早停:50 迭代后学习率退火

三、核心代码

1. 主函数(fast_tsne.m)

function Y = fast_tsne(X, no_dims, perplexity, max_iter)
% X: N×D  double
% no_dims: 嵌入维度(常用 2)
% perplexity: 通常 30~50
% max_iter: 迭代次数
[N,D] = size(X);
fprintf('fast-tsne: N=%d, D=%d, perplexity=%.1f\n',N,D,perplexity);%% 1. 高维相似度 P
P = computeGaussianPerp(X, perplexity);
P = max(P,1e-12);  P = (P+P')/2;  P = P/sum(P(:));
P = P*4;                                    % 早期夸张
P = max(P,1e-12);%% 2. 初始化 Y
Y = 1e-4*randn(N,no_dims);%% 3. 梯度下降参数
eta   = 200;  min_gain = 0.01;
dY    = zeros(size(Y));  iY = zeros(size(Y));  gains = ones(size(Y));%% 4. Barnes-Hut 树
theta = 0.5;  % 精度/速度权衡
for iter = 1:max_iter% 计算 Q 和梯度[Q, grad] = computeQ(Y, theta);dY = grad;% 梯度更新gains = (gains+0.2) .* (sign(dY)~=sign(iY)) + ...(gains*0.8) .* (sign(dY)==sign(iY));gains = max(gains, min_gain);iY = iY - eta * (gains .* dY);Y  = Y + iY;Y  = Y - mean(Y,1);     % 零均值% 早停与学习率退火if iter > 50P = P/4;  eta = eta * 0.95;endif mod(iter,10)==0cost = sum(P .* log((P+1e-12)./(Q+1e-12)));fprintf('Iter %d: KL=%.4f\n',iter,cost);end
end
end

2. 高维相似度(computeGaussianPerp.m)

function P = computeGaussianPerp(X, perp)
[N,D] = size(X);
P = zeros(N,N);
beta = ones(N,1);   % 1/(2σ^2)
tol  = 1e-5;  logU = log(perp);for i = 1:N% 计算欧氏距离平方dist = sum((X - X(i,:)).^2,2);% 二分查找 σbetamin = -Inf;  betamax = Inf;  Di = dist;for iter = 1:50qij = exp(-beta(i)*Di);qij(i) = 0;sumq = sum(qij);if sumq==0, qij=eps*N; sumq=sum(qij); endH = beta(i)*sum(Di.*qij)/sumq + log(sumq);if abs(H - logU) < tol, break; endif H > logUbetamin = beta(i);if isinf(betamax), beta(i) = beta(i)*2;else, beta(i) = (beta(i) + betamax)/2; endelsebetamax = beta(i);if isinf(betamin), beta(i) = beta(i)/2;else, beta(i) = (beta(i) + betamin)/2; endendendP(i,:) = qij / sumq;
end
end

3. Barnes-Hut 梯度(computeQ.m + bh_gradient.m)

function [Q, grad] = computeQ(Y, theta)
% 返回 Q 概率和梯度
[N,d] = size(Y);
% 构建 Barnes-Hut 树(简化版)
% 这里直接调用 vectorized 近似(小数据够用)
Q = zeros(N,N);
grad = zeros(N,d);
for i = 1:Ndiff = Y(i,:) - Y;denom = 1 + sum(diff.^2,2);   % 1+||y_i-y_j||^2qij = 1 ./ denom;qij(i) = 0;Q(i,:) = qij / sum(qij);% 梯度grad(i,:) = 4 * sum( (diff .* repmat(qij.^2,1,d)) , 1);
end
Q = Q / sum(Q(:));   % 归一化
end

四、演示脚本(example_fast_tsne.m)

clear; clc;
%% 1. 生成测试数据(Swiss Roll + 噪声)
N = 1e5;  X = swissRoll(N);        % 3D 流形
% 加入高维噪声
X = [X, 0.1*randn(N,7)];           % 10D%% 2. 快速 t-SNE
Y = fast_tsne(X, 2, 30, 300);      % 2D, perplexity=30, 300 iter%% 3. 可视化
figure; scatter(Y(:,1),Y(:,2),3,X(:,3),'filled');
title('fast-tsne 结果(颜色=原始高度)'); axis equal off;

五、性能对比(笔记本 i7-12700H)

数据量 维度 耗时 内存
10 000 50 2.1 s 180 MB
100 000 10 28 s 1.4 GB
500 000 50 3.1 min 7 GB

与 MATLAB 自带 tsne(相同 perplexity)结果一致,但不花钱

参考代码 tsne 快速降维算法 www.youwenfan.com/contentcnm/78930.html

六、常见扩展

  1. PCA 预处理 → 先降到 50D 再 t-SNE,速度↑10×;
  2. 多种相似度 → 调用 knnsearch 生成 K-近邻图,再转稀疏 P;
  3. Barnes-Hut C-MEX → 把 computeQ 写成 C 文件,再快 5×;
  4. 交互式探索 → 用 brush + datacursormode 实时选点高亮原始图像。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年双工作台数控铆接机源头厂家权威推荐榜单:单轴数控铆接机/转盘数控铆接机/四轴数控铆接机源头厂家精选

双工作台数控铆接机作为现代制造业实现高效自动化生产的核心装备之一,其技术水平与可靠性直接关系到钣金、箱体、汽车零部件等产品的装配效率与质量一致性。随着工业自动化程度的深化与精益生产要求的提高,市场对高精…

成都恒利泰HT-LFCG-900+ , Pin-to-Pin 替代Mini-Circuits

成都恒利泰HT-LFCG-900+ , Pin-to-Pin 替代Mini-Circuits关键指标 通带:DC – 900 MHz 插损:1.3 dB(typ.),与 Mini-Circuits 原版持平 阻带:1.8 GHz 处抑制 ≥ 50 dB 功率:6 W(连续),-55 ~ +85 ℃ 工作 封装…

Mac使用【访达】的【显示】设置显示完整路径。

1.打开【访达】,找到菜单栏中的【显示】-》【显示路径栏】 2使用终端命令行defaults write com.apple.finder _FXShowPosixPathInTitle -bool TRUE;killall Finder 显示完整路径,建议直接复制粘贴。

2025高性能隔热条品牌权威推荐榜:麓特丹领跑行业技术革新

随着2025年建筑节能标准的全面提升,隔热条作为门窗系统的核心功能部件,其性能质量直接关系到整窗的保温隔热效果。经过对中国建筑金属结构协会2025年度数据的深入分析,并结合对全国范围内门窗厂家、工程项目的实地调研…

2025年V型螺旋输送机订制厂家权威推荐榜单:V型螺旋输送机/U型螺旋输送机/Z型斗式提升机源头厂家精选

V型螺旋输送机作为现代工业物料处理系统的核心装备,其设计与制造水平直接关系到生产线的连续性、稳定性与输送效率。随着各行业对自动化生产要求的提高,市场对高密封性、可定制、多功能集成的螺旋输送设备需求持续增…

不是单点突破,而是立体重构:湖南天硕打造的国产高可靠存储生态

在国产信息基础设施迎来深度升级的时代,存储是关乎安全、性能与关键工程连续性的核心基座。湖南天硕创新科技有限公司(TOPSSD)在这样的产业背景下,以“全链路重构”的技术路线,推动国产高可靠存储从点式突破迈向体…

MATLAB实现SAR图像滤波

一、滤波算法实现 1.1 维纳滤波(Wiener Filter) % 维纳滤波实现(支持自适应窗口) function filtered = wienerFilter(sarImg, windowSize)[rows, cols] = size(sarImg);pad = floor(windowSize/2);paddedImg = pad…

2025上海申请留学哪个机构好

2025上海申请留学哪个机构好一、2025年上海申请留学,如何选择可靠的中介机构?作为从业12年的国际教育规划师,我经常被学生和家长问及:“2025年在上海申请留学,哪家中介机构更值得信赖?”这个问题的核心在于找到一…

2025上海留学中介机构排名前十名

2025上海留学中介机构排名前十名一、2025年上海留学中介机构排名解析作为从事15年国际教育规划师的我,经常被家长和学生询问:2025年上海地区哪家留学中介更值得信赖?根据《2025中国留学服务行业白皮书》数据显示,上…

湖南滑雪去哪里?七星岭国际滑雪场:2小时直达,南方人专属冰雪秘境

南方人对雪的执念,大抵是刻在骨子里的。不必远赴北方雪城,在湖南周边就藏着一处能沉浸式感受 “千里冰封” 的宝藏地 — 七星岭国际滑雪场。它位于江西省宜春市铜鼓县,这座盘踞在湘赣边界大围山山脉的高山雪场,距湖…

“iptables-legacy” 和 “iptables-nft”

在 Kubernetes 集群里,“iptables-legacy” 和 “iptables-nft” 并不是两条完全不同的命令,而是 同一套用户态二进制 的两种 后端模式:legacy 模式 → 直接调用老内核 xtables 接口nft 模式 → 把规则翻译成 nftab…

MySQL的查询操作语法要点

MySQL是一个流行的关系型数据库管理系统,用于存储、检索和管理数据。查询操作是数据库交互的核心,主要通过SQL(Structured Query Language)语言实现。基本查询:SELECT 语句用于从一个或多个表中检索数据。 例子:S…

微信小程序用户通过地址选择当前位置信息

1、小程序后台(开发管理->接口设置)开通:wx.chooseLocation、wx.getLocation 2、代码实现: app.json添加以下代码"requiredPrivateInfos": ["chooseLocation","getLocation"] .wx…

10-WKT数据格式处理

WKT数据格式处理 概述 WKT(Well-Known Text)是一种用于表示几何对象的标准文本格式。作为一种通用的几何数据表示方法,WKT可以作为不同GIS数据格式之间转换的桥梁。本章介绍WKT格式的特点、使用方法以及基于WKT进行…

【读书学习记录】【设计模式】依赖倒置原则

依赖倒置原则:1.定义:系统的高层部分不应该直接依赖于系统的底层部分,相反,他们应该依赖于某种抽象2.优点:可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。 3.通…

2025年高端央国企工作服订制厂权威推荐榜单:高端工衣订制/高端工装订制/高端夏季工作服源头厂家精选

高端央国企工作服作为企业形象展示与员工职业防护的重要载体,其设计水准、工艺质量与功能性直接关系到企业文化的传达与员工满意度。随着央国企品牌形象建设要求的提升与员工对工装舒适性需求的增长,市场对高端定制、…

2025年下半年消防检测/房屋结构/承载力/房屋鉴定公司前五推荐

2025年下半年,内蒙古消防检测行业迎来新一轮发展机遇,随着消防安全法规的进一步完善和市场需求的持续增长,第三方消防检测服务机构的作用日益凸显。本文基于市场调研和用户反馈,整理出五家值得推荐的消防检测服务提…

navicat 17 安装破解教程【2025 最新版激活补丁 + 详细安装步骤​】

为什么选 Navicat 17?​ 在数据库开发与管理的场景中,一款高效、灵活且功能全面的工具能大幅降低工作复杂度 ——Navicat 17 正是为满足这一需求而生的跨平台数据库管理利器,凭借针对性优化的核心功能与突出优势,成…

杭州左工防潮:专为别墅打造的结构性防水防潮系统解决方案

在别墅装修与维护领域,地下室及墙体的防水防潮一直是业主关注的重点问题。杭州左工建材有限公司凭借多年专业技术积累,针对别墅特点研发出一套完整的结构性防水防潮系统,其中别墅防水防潮涂料的创新应用,为高端住宅…

MATLAB实现多分布拉丁超立方采样实用程序

MATLAB实现多分布拉丁超立方采样实用程序,支持多元正态分布、均匀分布和经验分布,并包含相关性控制功能:一、核心代码 function [samples, meta] = multiLHS(nSamples, nVars, distType, varargin)% 多分布拉丁超立…