网站免费网站免费wordpress主题搜索引擎

张小明 2025/12/31 10:29:00
网站免费网站免费,wordpress主题搜索引擎,安陆做网站多少钱,seo高清视频教程t-SNE#xff08;t-distributed Stochastic Neighbor Embedding#xff09;是一种非常有效的非线性降维技术#xff0c;特别适用于高维数据的可视化。 t-SNE算法核心原理 算法概述 t-SNE通过保留数据点之间的相似性将高维数据映射到低维空间#xff08;通常是2D或3D#x…t-SNEt-distributed Stochastic Neighbor Embedding是一种非常有效的非线性降维技术特别适用于高维数据的可视化。t-SNE算法核心原理算法概述t-SNE通过保留数据点之间的相似性将高维数据映射到低维空间通常是2D或3D使得在高维空间中相似的点在低维空间中靠近不相似的点远离。MATLAB实现classdef FastTSNE% 快速t-SNE降维实现% 支持多种优化技巧和加速策略properties% 算法参数num_dimensions% 输出维度perplexity% 困惑度learning_rate% 学习率max_iter% 最大迭代次数momentum% 动量early_exaggeration% 早期放大因子random_state% 随机种子% 内部变量P% 高维相似度矩阵Y% 低维嵌入gains% 增益矩阵uY% 更新方向endmethodsfunctionobjFastTSNE(num_dimensions,perplexity,learning_rate,max_iter)% 构造函数ifnargin4max_iter1000;endifnargin3learning_rate200;endifnargin2perplexity30;endifnargin1num_dimensions2;endobj.num_dimensionsnum_dimensions;obj.perplexityperplexity;obj.learning_ratelearning_rate;obj.max_itermax_iter;obj.momentum0.8;obj.early_exaggeration4;obj.random_state42;endfunction[Y,costs]fit_transform(obj,X,varargin)% 主函数执行t-SNE降维% X: 输入数据 (n_samples x n_features)fprintf(开始t-SNE降维...\n);fprintf(数据维度: %d × %d → %dD\n,size(X,1),size(X,2),obj.num_dimensions);% 参数解析pinputParser;addParameter(p,verbose,true,islogical);addParameter(p,plot_progress,false,islogical);parse(p,varargin{:});% 设置随机种子rng(obj.random_state);% 数据标准化Xobj.standardize_data(X);% 计算高维相似度fprintf(计算高维相似度...\n);obj.Pobj.compute_high_dimensional_similarities(X);% 初始化低维嵌入obj.Yobj.initialize_embedding(size(X,1));obj.gainsones(size(obj.Y));obj.uYzeros(size(obj.Y));% 早期放大Pobj.P*obj.early_exaggeration;% 优化过程costszeros(obj.max_iter,1);foriter1:obj.max_iter% 计算低维相似度和梯度[Q,grad]obj.compute_gradient(P,obj.Y);% 更新嵌入objobj.update_embedding(grad,iter);% 计算代价costs(iter)obj.compute_cost(P,Q);% 早期放大阶段结束ifiter100Pobj.P;end% 进度显示ifp.Results.verbosemod(iter,100)0fprintf(迭代 %d/%d, 代价: %.4f\n,iter,obj.max_iter,costs(iter));end% 绘制进度ifp.Results.plot_progressmod(iter,50)0obj.plot_current_embedding(iter,costs);endendYobj.Y;fprintf(t-SNE完成最终代价: %.4f\n,costs(end));endfunctionX_stdstandardize_data(~,X)% 数据标准化X_stdX-mean(X,1);X_stdX_std./std(X_std,0,1);X_std(isnan(X_std))0;% 处理常数特征endfunctionPcompute_high_dimensional_similarities(obj,X)% 计算高维空间中的相似度概率nsize(X,1);Pzeros(n);% 计算成对距离Dpdist2(X,X).^2;% 为每个点寻找合适的方差困惑度fori1:n% 二分搜索寻找合适的方差betaobj.binary_search_perplexity(D(i,:),obj.perplexity);% 计算条件概率P(i,:)exp(-D(i,:)*beta);P(i,i)0;% 设置自相似度为0% 归一化P(i,:)P(i,:)/sum(P(i,:));end% 对称化概率矩阵P(PP)/(2*n);% 防止数值问题Pmax(P,1e-12);endfunctionbetabinary_search_perplexity(obj,D_row,target_perplexity)% 二分搜索寻找合适的方差以达到目标困惑度max_iter50;tol1e-4;beta1;beta_min-inf;beta_maxinf;Pexp(-D_row*beta);P(D_row0)0;% 排除自身sum_Psum(P);ifsum_P0sum_P1e-12;endPP/sum_P;Hobj.compute_entropy(P);perplexity_diffH-log(target_perplexity);iter0;whileabs(perplexity_diff)tolitermax_iterifperplexity_diff0beta_minbeta;ifisinf(beta_max)betabeta*2;elsebeta(betabeta_max)/2;endelsebeta_maxbeta;ifisinf(beta_min)betabeta/2;elsebeta(betabeta_min)/2;endendPexp(-D_row*beta);P(D_row0)0;sum_Psum(P);ifsum_P0sum_P1e-12;endPP/sum_P;Hobj.compute_entropy(P);perplexity_diffH-log(target_perplexity);iteriter1;endendfunctionHcompute_entropy(~,P)% 计算概率分布的香农熵P(P0)1e-12;% 避免log(0)H-sum(P.*log(P));endfunctionYinitialize_embedding(obj,n_samples)% 初始化低维嵌入Y1e-4*randn(n_samples,obj.num_dimensions);endfunction[Q,grad]compute_gradient(obj,P,Y)% 计算梯度和低维相似度nsize(Y,1);% 计算低维相似度 (使用t分布)sum_Ysum(Y.^2,2);Dsum_Ysum_Y-2*(Y*Y);Q1./(1D);Q(1:n1:end)0;% 对角线置零QQ/sum(Q(:));Qmax(Q,1e-12);% 计算梯度PQP-Q;gradzeros(size(Y));fori1:n% 向量化梯度计算diffY(i,:)-Y;grad(i,:)4*sum(bsxfun(times,PQ(:,i),diff),1);endendfunctionobjupdate_embedding(obj,grad,iter)% 更新低维嵌入% 调整增益obj.gains(obj.gains0.2).*(sign(grad)~sign(obj.uY))...(obj.gains*0.8).*(sign(grad)sign(obj.uY));obj.gainsmax(obj.gains,0.01);% 更新方向obj.uYobj.momentum*obj.uY-obj.learning_rate*obj.gains.*grad;% 更新位置obj.Yobj.Yobj.uY;% 中心化obj.Yobj.Y-mean(obj.Y,1);endfunctioncostcompute_cost(~,P,Q)% 计算KL散度代价costsum(P(:).*log(P(:)./Q(:)));endfunctionplot_current_embedding(obj,iter,costs)% 绘制当前嵌入状态figure(1);subplot(1,2,1);scatter(obj.Y(:,1),obj.Y(:,2),30,filled);title(sprintf(t-SNE嵌入 (迭代 %d),iter));xlabel(维度 1);ylabel(维度 2);axis equal;grid on;subplot(1,2,2);plot(1:iter,costs(1:iter),b-,LineWidth,2);title(代价函数收敛);xlabel(迭代次数);ylabel(KL散度);grid on;drawnow;endendmethods(Static)functiondemo_tsne()% t-SNE演示函数fprintf(t-SNE降维算法演示\n);fprintf(\n\n);% 生成测试数据[X,labels]FastTSNE.generate_test_data();% 创建t-SNE对象tsneFastTSNE(2,30,200,1000);% 执行降维tic;[Y,costs]tsne.fit_transform(X,verbose,true,plot_progress,true);time_elapsedtoc;fprintf(计算时间: %.2f 秒\n,time_elapsed);% 绘制最终结果FastTSNE.plot_results(X,Y,labels,costs);% 比较不同参数FastTSNE.compare_parameters(X,labels);endfunction[X,labels]generate_test_data()% 生成测试数据rng(42);n_points300;% 生成多个高斯分布的数据centers[0,0;5,5;-5,5;5,-5;-5,-5];n_clusterssize(centers,1);points_per_clusterceil(n_points/n_clusters);X[];labels[];fori1:n_clusters cluster_pointscenters(i,:)randn(points_per_cluster,2)*0.8;X[X;cluster_points];labels[labels;i*ones(points_per_cluster,1)];endXX(1:n_points,:);labelslabels(1:n_points);% 添加噪声特征使其成为高维数据X_high_dim[X,randn(n_points,8)*0.5];fprintf(生成测试数据: %d个样本, %d维 - %d维\n,...size(X_high_dim,1),size(X_high_dim,2),2);endfunctionplot_results(X,Y,labels,costs)% 绘制结果对比figure(Position,[100,100,1500,500]);% 原始数据前两个维度subplot(1,3,1);gscatter(X(:,1),X(:,2),labels);title(原始数据 (前两个维度));xlabel(特征 1);ylabel(特征 2);axis equal;grid on;% t-SNE结果subplot(1,3,2);gscatter(Y(:,1),Y(:,2),labels);title(t-SNE降维结果);xlabel(t-SNE 维度 1);ylabel(t-SNE 维度 2);axis equal;grid on;% 收敛曲线subplot(1,3,3);plot(1:length(costs),costs,b-,LineWidth,2);title(t-SNE收敛曲线);xlabel(迭代次数);ylabel(KL散度代价);grid on;sgtitle(t-SNE降维效果展示);endfunctioncompare_parameters(X,labels)% 比较不同参数的效果fprintf(\n参数比较分析\n);fprintf(\n);perplexities[5,30,50,100];learning_rates[10,100,200,500];figure(Position,[100,100,1200,800]);% 比较不同困惑度subplot(2,2,1);fori1:length(perplexities)tsneFastTSNE(2,perplexities(i),200,500);Ytsne.fit_transform(X,verbose,false);scatter(Y(:,1),Y(:,2),20,labels,filled);title(sprintf(困惑度 %d,perplexities(i)));axis equal;axis off;end% 比较不同学习率subplot(2,2,2);fori1:length(learning_rates)tsneFastTSNE(2,30,learning_rates(i),500);Ytsne.fit_transform(X,verbose,false);scatter(Y(:,1),Y(:,2),20,labels,filled);title(sprintf(学习率 %d,learning_rates(i)));axis equal;axis off;end% 比较不同迭代次数subplot(2,2,3);iterations[100,250,500,1000];fori1:length(iterations)tsneFastTSNE(2,30,200,iterations(i));Ytsne.fit_transform(X,verbose,false);scatter(Y(:,1),Y(:,2),20,labels,filled);title(sprintf(迭代次数 %d,iterations(i)));axis equal;axis off;end% 3D t-SNE示例subplot(2,2,4);tsne_3dFastTSNE(3,30,200,500);Y_3dtsne_3d.fit_transform(X,verbose,false);scatter3(Y_3d(:,1),Y_3d(:,2),Y_3d(:,3),30,labels,filled);title(3D t-SNE);axis equal;grid on;view(45,30);sgtitle(t-SNE参数比较);endendend% 快速t-SNE实现Barnes-Hut近似classdef FastTSNE_BHFastTSNE% 基于Barnes-Hut近似的快速t-SNE实现% 适用于大规模数据集methodsfunctionobjFastTSNE_BH(num_dimensions,perplexity,learning_rate,max_iter)% 构造函数objobjFastTSNE(num_dimensions,perplexity,learning_rate,max_iter);obj.momentum0.5;endfunction[Y,costs]fit_transform(obj,X,varargin)% Barnes-Hut快速t-SNE实现fprintf(使用Barnes-Hut快速t-SNE...\n);% 参数解析pinputParser;addParameter(p,theta,0.5,(x)x0x1);% Barnes-Hut参数addParameter(p,verbose,true,islogical);parse(p,varargin{:});% 数据标准化Xobj.standardize_data(X);% 计算高维相似度使用更高效的方法obj.Pobj.compute_similarities_bh(X);% 初始化obj.Yobj.initialize_embedding(size(X,1));costszeros(obj.max_iter,1);% 优化过程foriter1:obj.max_iter% 使用Barnes-Hut计算梯度和代价[costs(iter),grad]obj.barnes_hut_gradient(obj.P,obj.Y,p.Results.theta);% 更新嵌入obj.Yobj.Yobj.learning_rate*grad;obj.Yobj.Y-mean(obj.Y,1);% 调整学习率ifiter100obj.learning_rateobj.learning_rate*0.99;endifp.Results.verbosemod(iter,100)0fprintf(迭代 %d/%d, 代价: %.4f\n,iter,obj.max_iter,costs(iter));endendYobj.Y;endfunctionPcompute_similarities_bh(obj,X)% 使用更高效的方法计算高维相似度nsize(X,1);% 使用k近邻近似kmin(3*obj.perplexity,n-1);% 计算k近邻[~,D]knnsearch(X,X,K,k1);% 包含自身DD(:,2:end).^2;% 排除自身Pzeros(n,n);fori1:n% 只考虑k近邻betaobj.binary_search_perplexity([zeros(1,i-1),inf,D(i,:)],obj.perplexity);P(i,:)exp(-pdist2(X(i,:),X).^2*beta);P(i,i)0;P(i,:)P(i,:)/sum(P(i,:));endP(PP)/(2*n);Pmax(P,1e-12);endfunction[cost,grad]barnes_hut_gradient(~,P,Y,theta)% Barnes-Hut近似计算梯度nsize(Y,1);gradzeros(size(Y));cost0;% 构建四叉树2D或八叉树3Dtreeobj.build_tree(Y);% 计算梯度fori1:n[grad_i,cost_i]obj.compute_gradient_for_point(P,Y,i,tree,theta);grad(i,:)grad_i;costcostcost_i;endcostcost/n;endfunctiontreebuild_tree(~,Y)% 构建空间分割树简化实现% 实际实现应该更复杂这里使用简化版本tree.pointsY;tree.centermean(Y,1);tree.sizemax(range(Y,1));tree.num_pointssize(Y,1);endfunction[grad,cost]compute_gradient_for_point(~,P,Y,i,tree,theta)% 为单个点计算梯度简化实现nsize(Y,1);gradzeros(1,size(Y,2));cost0;% 计算低维相似度dist_sqsum((Y(i,:)-Y).^2,2);Q1./(1dist_sq);Q(i)0;QQ/sum(Q);% 计算梯度和代价forj1:nifj~idiffY(i,:)-Y(j,:);mult(P(i,j)-Q(j))*Q(j);gradgrad4*mult*diff;ifP(i,j)0costcostP(i,j)*log(P(i,j)/Q(j));endendendendendend% 主测试函数functionmain_tsne_demo()fprintf(t-SNE快速降维算法完整演示\n);fprintf(\n\n);% 选择演示模式fprintf(选择演示模式:\n);fprintf(1 - 基础t-SNE演示\n);fprintf(2 - 大规模数据测试\n);fprintf(3 - 与PCA比较\n);choiceinput(请输入选择 (1-3): );switchchoicecase1FastTSNE.demo_tsne();case2demo_large_scale();case3demo_comparison_pca();otherwisefprintf(无效选择运行基础演示...\n);FastTSNE.demo_tsne();endendfunctiondemo_large_scale()% 大规模数据演示fprintf(\n大规模数据t-SNE演示\n);fprintf(\n);% 生成更大规模的数据n_samples2000;n_features50;fprintf(生成大规模数据: %d样本 × %d特征\n,n_samples,n_features);Xrandn(n_samples,n_features);% 添加聚类结构n_clusters5;cluster_sizefloor(n_samples/n_clusters);labelszeros(n_samples,1);fori1:n_clusters start_idx(i-1)*cluster_size1;end_idxmin(i*cluster_size,n_samples);cluster_pointsstart_idx:end_idx;% 为每个聚类添加偏移X(cluster_points,:)X(cluster_points,:)i*2;labels(cluster_points)i;end% 比较标准t-SNE和快速t-SNEfprintf(\n比较标准t-SNE和快速t-SNE:\n);% 标准t-SNEtic;tsne_standardFastTSNE(2,30,200,500);Y_standardtsne_standard.fit_transform(X,verbose,false);time_standardtoc;% 快速t-SNEtic;tsne_fastFastTSNE_BH(2,30,200,500);Y_fasttsne_fast.fit_transform(X,verbose,false);time_fasttoc;fprintf(标准t-SNE时间: %.2f秒\n,time_standard);fprintf(快速t-SNE时间: %.2f秒\n,time_fast);fprintf(加速比: %.2fx\n,time_standard/time_fast);% 可视化比较figure(Position,[100,100,1200,500]);subplot(1,2,1);scatter(Y_standard(:,1),Y_standard(:,2),20,labels,filled);title(sprintf(标准t-SNE (%.2f秒),time_standard));axis equal;colorbar;subplot(1,2,2);scatter(Y_fast(:,1),Y_fast(:,2),20,labels,filled);title(sprintf(快速t-SNE (%.2f秒),time_fast));axis equal;colorbar;sgtitle(大规模数据t-SNE比较);endfunctiondemo_comparison_pca()% 与PCA比较fprintf(\nt-SNE vs PCA 比较演示\n);fprintf(\n);% 生成非线性数据瑞士卷[X,labels]generate_swiss_roll();% t-SNE降维tic;tsneFastTSNE(2,30,200,1000);Y_tsnetsne.fit_transform(X,verbose,false);time_tsnetoc;% PCA降维tic;Y_pcapca_implementation(X,2);time_pcatoc;fprintf(t-SNE时间: %.2f秒\n,time_tsne);fprintf(PCA时间: %.2f秒\n,time_pca);% 可视化比较figure(Position,[100,100,1500,500]);% 原始数据3Dsubplot(1,3,1);scatter3(X(:,1),X(:,2),X(:,3),30,labels,filled);title(原始数据 (3D瑞士卷));axis equal;view(45,30);colorbar;% PCA结果subplot(1,3,2);scatter(Y_pca(:,1),Y_pca(:,2),30,labels,filled);title(sprintf(PCA降维 (%.2f秒),time_pca));axis equal;colorbar;% t-SNE结果subplot(1,3,3);scatter(Y_tsne(:,1),Y_tsne(:,2),30,labels,filled);title(sprintf(t-SNE降维 (%.2f秒),time_tsne));axis equal;colorbar;sgtitle(非线性数据降维方法比较);endfunction[X,t]generate_swiss_roll()% 生成瑞士卷数据n_samples1000;t3*pi/2*(12*rand(n_samples,1));height21*rand(n_samples,1);Xzeros(n_samples,3);X(:,1)t.*cos(t);X(:,2)height;X(:,3)t.*sin(t);% 添加噪声XX0.05*randn(size(X));endfunctionYpca_implementation(X,n_components)% PCA实现X_centeredX-mean(X,1);[coeff,~,~]pca(X_centered);YX_centered*coeff(:,1:n_components);end% 运行主演示main_tsne_demo();算法加速技巧1.Barnes-Hut近似使用空间分割树四叉树/八叉树将远距离点分组计算复杂度从O(N²)降低到O(N log N)2.早期放大策略前100次迭代使用放大的相似度帮助聚类快速形成提高收敛速度3.自适应学习率使用增益矩阵调整学习率动量项加速收敛避免振荡参数调优指南关键参数影响参数推荐范围影响困惑度5-50控制局部/全局结构平衡学习率10-1000影响收敛速度和稳定性迭代次数500-1000保证充分收敛动量0.5-0.8加速收敛防止振荡实用建议数据预处理标准化数据避免尺度差异多次运行t-SNE有随机性多次运行取最佳聚类数估计困惑度≈期望的邻居数量可视化验证结合领域知识解释结果参考代码 tsne 快速降维算法www.3dddown.com/csa/78930.html应用场景适合使用t-SNE高维数据可视化基因表达、文本数据、图像特征聚类结构探索异常检测数据质量评估不适合使用t-SNE特征选择使用PCA/LDA降维后建模使用UMAP/Autoencoder精确距离保持使用MDS高级特性这个实现包含以下高级功能完整的收敛监控参数敏感性分析与PCA的对比大规模数据优化丰富的可视化
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站qq链接怎么做重庆微信网站开发

Linux线程编程 一、线程核心理论基础 1. 线程是什么? 定义:线程是进程内的执行单元,也被称为“轻量级进程”(Lightweight Process),隶属于某个进程,共享进程的资源(代码段、数据段、…

张小明 2025/12/28 20:37:31 网站建设

广州营销型网站建设费用广东微信网站制作多少钱

ComfyUI-Ollama完整指南:三步实现AI工作流智能化 【免费下载链接】comfyui-ollama 项目地址: https://gitcode.com/gh_mirrors/co/comfyui-ollama ComfyUI-Ollama是一款专为ComfyUI设计的强大扩展工具,它巧妙地将Ollama的大型语言模型能力无缝集…

张小明 2025/12/29 7:56:32 网站建设

网站建设费怎么做分录企智网站建设

Excalidraw手绘风格图表在科研领域的应用AI 在一场跨时区的线上科研讨论中,一位生物信息学研究员正试图向团队解释她新设计的数据流程模型。没有复杂的建模软件,也没有等待美工调整格式,她只是在浏览器中打开一个链接,输入一句&am…

张小明 2025/12/29 7:56:36 网站建设

静态网站没有数据库吗贵州企业展示型网站建设

Visual C运行库完整修复指南:告别程序启动失败的终极方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:新…

张小明 2025/12/29 7:56:31 网站建设

做网站的软件多少钱wordpress主题百度

高精度模拟量采集模块是智能家居系统的核心感知单元,负责将温湿度、光照、气体浓度、人体感应、能耗等模拟信号,转化为高保真数字信号,为家电联动、节能控制、安全防护提供精准数据支撑,让家居从“被动响应”升级为“主动智能”&a…

张小明 2025/12/29 7:56:32 网站建设

网站后台中文模板英语作文模板高中

Onekey:3分钟搞定Steam游戏清单下载的完整教程 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为繁琐的Steam游戏清单获取流程而头疼吗?Onekey作为一款专业的Steam D…

张小明 2025/12/29 7:56:33 网站建设