24小时热门版块排行榜    

查看: 2660  |  回复: 0

samggyy

金虫 (小有名气)

[求助] Matlab如何使用绘图画出3D SVM的decision boundary?

RT,Matlab中可以画出二维的SVM的decision boundary,代码如下,

    load fisheriris;
   
    features = meas(1:100,;
    featureSelcted = features(1:100,1:2);
    groundTruthGroup = species(1:100);
   
   
    svmStruct = svmtrain(featureSelcted, groundTruthGroup, ...
        'Kernel_Function', 'rbf', 'boxconstraint', Inf, 'showplot', true, 'Method', 'QP');
    svmClassified = svmclassify(svmStruct,featureSelcted,'showplot',true);

如果使用三维的特征,即把代码改为featureSelcted = features(1:100,1:3); 无法出一个三维的超平面了。思路可能是:

cubeXMin = min(featureSelcted(:,1))-0.5;
cubeYMin = min(featureSelcted(:,2))-0.5;
cubeZMin = min(featureSelcted(:,3))-0.5;

cubeXMax = max(featureSelcted(:,1))+0.5;
cubeYMax = max(featureSelcted(:,2))+0.5;
cubeZMax = max(featureSelcted(:,3))+0.5;

cubeMesh = meshgrid(cubeXMin:0.5:cubeXMax,cubeYMin:0.5:cubeYMax,cubeZMin:0.5:cubeZMax);

sv = svmStruct.SupportVectors;
alphaHat = svmStruct.Alpha;
bias = svmStruct.Bias;
kfun = svmStruct.KernelFunction;
kfunargs = svmStruct.KernelFunctionArgs;

f = (feval(kfun,sv,cubeMesh,kfunargs{:})'*alphaHat() + bias;

decisionBoundary = sign(f);
decisionBoundaryInd = find(decisionBoundary==0);

figure,
scatter3(featureSelcted(:,1),featureSelcted(:,2),featureSelcted(:,3));
surf(decisionBoundaryInd);

但是不知道怎么完成,请教有没有人知道怎么做的。谢谢!


有一个用R写的例子:
http://stackoverflow.com/questio ... -svm-fit-hyperplane

还有两篇论文中也有做到:
http://www.sciencedirect.com/sci ... i/S0304394010006324
http://www.mathematica-journal.c ... ation-with-kernels/
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

找到一些相关的精华帖子,希望有用哦~

科研从小木虫开始,人人为我,我为人人
相关版块跳转 我要订阅楼主 samggyy 的主题更新
信息提示
请填处理意见