当前位置: 首页 > 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.jsqmd.com/news/52971/

相关文章:

  • 2025年双工作台数控铆接机源头厂家权威推荐榜单:单轴数控铆接机/转盘数控铆接机/四轴数控铆接机源头厂家精选
  • 成都恒利泰HT-LFCG-900+ , Pin-to-Pin 替代Mini-Circuits
  • Mac使用【访达】的【显示】设置显示完整路径。
  • 2025高性能隔热条品牌权威推荐榜:麓特丹领跑行业技术革新
  • 2025年V型螺旋输送机订制厂家权威推荐榜单:V型螺旋输送机/U型螺旋输送机/Z型斗式提升机源头厂家精选
  • 不是单点突破,而是立体重构:湖南天硕打造的国产高可靠存储生态
  • MATLAB实现SAR图像滤波
  • 2025上海申请留学哪个机构好
  • 2025上海留学中介机构排名前十名
  • 湖南滑雪去哪里?七星岭国际滑雪场:2小时直达,南方人专属冰雪秘境
  • “iptables-legacy” 和 “iptables-nft”
  • MySQL的查询操作语法要点
  • 微信小程序用户通过地址选择当前位置信息
  • 10-WKT数据格式处理
  • 【读书学习记录】【设计模式】依赖倒置原则
  • 2025年高端央国企工作服订制厂权威推荐榜单:高端工衣订制/高端工装订制/高端夏季工作服源头厂家精选
  • 2025年下半年消防检测/房屋结构/承载力/房屋鉴定公司前五推荐
  • navicat 17 安装破解教程【2025 最新版激活补丁 + 详细安装步骤​】
  • 杭州左工防潮:专为别墅打造的结构性防水防潮系统解决方案
  • MATLAB实现多分布拉丁超立方采样实用程序
  • 2025年AI排名搜索优化GEO公司推荐:惠州惠算GEO科技优势多
  • 2025年下半年内蒙古消防检测/房屋结构检测/承载力检测公司推荐
  • 深度变分多元信息瓶颈框架解析
  • 哪些精华适合敏感肌修复皮肤屏障?2025敏感肌屏障修护榜
  • 07.入门篇-了解Java历史
  • 2025年佛山储罐厂家最新推荐榜,SF储油罐、硫酸储罐、硝酸储罐、制冷储罐、聚焦产品品质与定制服务竞争力深度剖析
  • 眼油去黑眼圈哪个牌子效果好?2025全肤质好用抗皱眼油实测:lefufu多场景适配
  • 简易大变形二维数字图像相关方法设计
  • springboot项目注册到nacos使用dubbo互相调用例子
  • 2025年佛山市烧水油罐厂家最新推荐,花生油罐/卧式油罐/立式油罐/不锈钢食品油罐/化工油罐/食品油罐/加油站油罐//地埋式油罐/设备制造企业服务能力与产品特色分析