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

MATLAB 实现 t-SNE 快速降维

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.zskr.cn/news/62943.html

相关文章:

  • 2025年双工作台数控铆接机源头厂家权威推荐榜单:单轴数控铆接机/转盘数控铆接机/四轴数控铆接机源头厂家精选
  • MATLAB实现SAR图像滤波
  • 2025上海申请留学哪个机构好
  • “iptables-legacy” 和 “iptables-nft”
  • 【读书学习记录】【设计模式】依赖倒置原则
  • navicat 17 安装破解教程【2025 最新版激活补丁 + 详细安装步骤​】
  • MATLAB实现多分布拉丁超立方采样实用程序
  • 2025年下半年内蒙古消防检测/房屋结构检测/承载力检测公司推荐
  • 深度变分多元信息瓶颈框架解析
  • 适合敏感肌的保湿面霜推荐:皮肤科医生权威推荐 敏感肌保湿面霜榜
  • 2025年11月蒸汽发生器品牌推荐榜:综合实力与创新技术排行解析
  • 基于MATLAB实现的PSO优化BP神经网络
  • 懒人必藏!小程序推荐休闲游戏,十款挂机休闲神作,躺着也能享受乐趣
  • 租用美国服务器的网站能做些什么
  • 再议求函数定义域中的一类难懂易错题目
  • 长文本溢出展开/收起功能
  • 2025 年 11 月应力仪厂家权威推荐榜:全自动/UTG玻璃/便携式智能/多光源/光伏玻璃/微晶玻璃/手持式/幕墙玻璃/紫外红外/电子玻璃应力仪精选指南
  • 2025年11月成都监理公司推荐榜单:基于资质、服务与口碑的综合排行
  • 2025年中国深海环境模拟装备公司TOP5推荐:卡普蒂姆的发
  • quic协议中Connection ID的协商机制
  • 主题:训练循环定制化实战:以CustomTrainer.fit为例
  • 挑战热极限:如何构建可靠的175℃ AC/DC电源系统
  • 2025年下半年木纹转印/栏杆制作/喷漆/喷塑厂家前五推荐榜单:专业选择指南
  • 这里说的go的OS 线程不会卡,什么意思,是指os线程可以处理其他的程序还是处理其他的http请求,os线程是什么
  • nvm 是什么?
  • 2025年专业靠谱口碑不错的国产操作系统公司推荐,高安全适配
  • 2025年天津包装印刷服务公司排名:天津福森数码科技有限公司
  • 2025年11月北京遗产继承律师服务全面评测与Top5推荐指南
  • 2025英国留学中介机构十强
  • 2025年BIP系统性能大比拼,口碑最佳的是它,协同云/制造云/用友 T3/好生意/人力云/财务云/税务云/好业财BIP管理系统推荐排行榜