之前建立了一个SVM-based Ordinal regression模型,一种特殊的多分类模型,就想通过可视化的方式展示模型分类的效果,对各个分类区域用不同颜色表示。可是,也看了很多代码,但基本都是展示二分类,当扩展成多分类时就会出现问题,所以我的论文最后就只好画了boundary的图了。今天在研究Random Forest时,找到了下面的demo的MATLAB代码,该代码很好的实现了各分类区域的颜色填充,效果非常漂亮。
下面是一个Demo代码:Demo.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | %% generate data prettySpiral = true; if ~prettySpiral % generate some random gaussian like data rand ( 'state' , 0); randn ( 'state' , 0); N= 50; D= 2; X1 = mgd(N, D, [4 3], [2 -1;-1 2]); X2 = mgd(N, D, [1 1], [2 1;1 1]); X3 = mgd(N, D, [3 -3], [1 0;0 4]); X= [X1; X2; X3]; X= bsxfun (@ rdivide , bsxfun (@minus, X, mean (X)), var (X)); Y= [ ones (N, 1); ones (N, 1)*2; ones (N, 1)*3]; scatter (X(:,1), X(:,2), 20, Y) else % generate twirl data! N= 50; t = linspace (0.5, 2* pi , N); x = t.* cos (t); y = t.* sin (t); t = linspace (0.5, 2* pi , N); x2 = t.* cos (t+2); y2 = t.* sin (t+2); t = linspace (0.5, 2* pi , N); x3 = t.* cos (t+4); y3 = t.* sin (t+4); X= [[x ' y' ]; [x2 ' y2' ]; [x3 ' y3' ]]; X= bsxfun (@ rdivide , bsxfun (@minus, X, mean (X)), var (X)); Y= [ ones (N, 1); ones (N, 1)*2; ones (N, 1)*3]; scatter (X(:,1), X(:,2), 20, Y) end %% classify rand ( 'state' , 0); randn ( 'state' , 0); opts= struct ; opts.depth= 9; opts.numTrees= 100; opts.numSplits= 5; opts.verbose= true; opts.classifierID= 2; % weak learners to use. Can be an array for mix of weak learners too tic ; m= forestTrain(X, Y, opts); timetrain= toc ; tic ; yhatTrain = forestTest(m, X); timetest= toc ; % Look at classifier distribution for fun, to see what classifiers were % chosen at split nodes and how often fprintf ( 'Classifier distributions:\n' ); classifierDist= zeros (1, 4); unused= 0; for i =1: length (m.treeModels) for j =1: length (m.treeModels{ i }.weakModels) cc= m.treeModels{ i }.weakModels{ j }.classifierID; if cc>1 %otherwise no classifier was used at that node classifierDist(cc)= classifierDist(cc) + 1; else unused= unused+1; end end end fprintf ( '%d nodes were empty and had no classifier.\n' , unused); for i =1:4 fprintf ( 'Classifier with id=%d was used at %d nodes.\n' , i , classifierDist( i )); end %% plot results xrange = [-1.5 1.5]; yrange = [-1.5 1.5]; inc = 0.02; [x, y] = meshgrid (xrange(1):inc:xrange(2), yrange(1):inc:yrange(2)); image_size = size (x); xy = [x(:) y(:)]; [yhat, ysoft] = forestTest(m, xy); decmap= reshape (ysoft, [image_size 3]); decmaphard= reshape (yhat, image_size); subplot (121); imagesc (xrange,yrange,decmaphard); hold on; set ( gca , 'ydir' , 'normal' ); cmap = [1 0.8 0.8; 0.95 1 0.95; 0.9 0.9 1]; colormap (cmap); plot (X(Y==1,1), X(Y==1,2), 'o' , 'MarkerFaceColor' , [.9 .3 .3], 'MarkerEdgeColor' , 'k' ); plot (X(Y==2,1), X(Y==2,2), 'o' , 'MarkerFaceColor' , [.3 .9 .3], 'MarkerEdgeColor' , 'k' ); plot (X(Y==3,1), X(Y==3,2), 'o' , 'MarkerFaceColor' , [.3 .3 .9], 'MarkerEdgeColor' , 'k' ); hold off; title ( sprintf ( '%d trees, Train time: %.2fs, Test time: %.2fs\n' , opts.numTrees, timetrain, timetest)); subplot (122); imagesc (xrange,yrange,decmap); hold on; set ( gca , 'ydir' , 'normal' ); plot (X(Y==1,1), X(Y==1,2), 'o' , 'MarkerFaceColor' , [.9 .3 .3], 'MarkerEdgeColor' , 'k' ); plot (X(Y==2,1), X(Y==2,2), 'o' , 'MarkerFaceColor' , [.3 .9 .3], 'MarkerEdgeColor' , 'k' ); plot (X(Y==3,1), X(Y==3,2), 'o' , 'MarkerFaceColor' , [.3 .3 .9], 'MarkerEdgeColor' , 'k' ); hold off; title ( sprintf ( 'Train accuracy: %f\n' , mean (yhatTrain==Y))); |
以上具体代码见:https://github.com/karpathy/Random-Forest-Matlab
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧