创造两类二维非线性可分点,使用SVM进行分类,同时画出支持向量和分类面,其实在二维的情况下就是个分界线,这个分类面并不是高维的,因为SVM的映射是个黑箱,画不出高维映射后的分类面。

代码中调用了台湾大学林智仁教授的libsvm包,因为怕与MATLAB自带的SVM函数名重了,所以改成了libsvmtrain和libsvmpredict。

libsvm 3.22版本的包可以到这里去下载

解压后把windows文件夹下的svmtrain和svmpredict改为libsvmtrain和libsvmpredict,然后在MATLAB的主页下菜单栏里的设置路径里把windows的路径添加进去,代码就可以运行了。

clc
clear all
%创造样本点
k=1;
l=1;
%第一类数据
for i=1:0.3:10for j=1:0.3:10if (i-5)^2+(j-5)^2<1.5data1(k,1)=1;data1(k,2)=i;data1(k,3)=j;k=k+1;endend
end
%第二类数据
for i=1:0.6:10for j=1:0.6:10if (i-5)^2+(j-5)^2>2if (i-5)^2+(j-5)^2<9data2(l,1)=-1;data2(l,2)=i;data2(l,3)=j;l=l+1;endendend
end
%合并样本数据
data0=[data1;data2];
train_data=data0(:,2:3);
train_label=data0(:,1);
%原始样本分布图
figure('NumberTitle', 'on', 'Name','给点分个家_马存诗');
hold on;
grid on;
plot(data1(:,2),data1(:,3),'*'),
plot(data2(:,2),data2(:,3),'+'),
title('训练样本数据');
%训练及预测
model=libsvmtrain(train_label,train_data,'-t 2  -c 100'); %径向基函数
test_label=train_label;
test_data=train_data;
[predict_label,accuracy,dec_values] = libsvmpredict(test_label,test_data, model);
%画分类后的点及SV
figure('NumberTitle', 'on', 'Name','给点分个家_马存诗');
hold on;
grid on;
m=length(predict_label);
for i=1:mif (predict_label(i)==1)a= plot(test_data(i, 1), test_data(i, 2), 'r.');    endif (predict_label(i)==-1)b= plot(test_data(i, 1), test_data(i, 2), 'g*');  end
end
c= plot( model.SVs(:,1),model.SVs(:,2),'o' );
%找到数据范围边角
minX = min(test_data(:, 1));
maxX = max(test_data(:, 1));
minY = min(test_data(:, 2));
maxY = max(test_data(:, 2));
%网格单位长度
gridX = (maxX - minX) ./ 1000;
gridY = (maxY - minY) ./ 1000;
%网格包含原数据范围
minX = minX - 10 * gridX;
maxX = maxX + 10 * gridX;
minY = minY - 10 * gridY;
maxY = maxY + 10 * gridY;
%生成密集测试点
[denseX, denseY] = meshgrid(minX:gridX:maxX, minY:gridY:maxY);
[m,n]=size(denseX);
dense_data=[reshape(denseX,m*n, 1), reshape(denseY,m*n,1)];
dense_label = ones(m*n,1);
%密集点分类
model.Parameters(1) = 3;
[lab] =libsvmpredict(dense_label,dense_data, model);
dense_pre_lab = reshape(lab, m,n);
%画非严格意义上的分类面
[C,h] = contour(denseX, denseY, dense_pre_lab,-1:1);
clabel(C,h,'Color','b');
title('分类结果可视化','FontSize',15);
legend([a,b,c],'类别1','类别2','支持向量');

代码运行结果如下:

部分代码参考源:http://www.ilovematlab.cn/thread-58926-1-1.html ,来自某SVM大神的论坛,思路非常巧妙,借鉴学习一下。

SVM简单非线性分类,画出分类面与支持向量(MATLAB)相关推荐

  1. Python用最简单的代码画出一箭穿心

    import turtledef curvemove(): # 定义画圆的函数for i in range(100):turtle.right(2)turtle.forward(2)turtle.sp ...

  2. 用python3编写一箭穿心_Python用最简单的代码画出一箭穿心

    import turtle def curvemove(): # 定义画圆的函数 for i in range(100): turtle.right(2) turtle.forward(2) turt ...

  3. 用matlab画出一元二次的图,MATLAB 一元二次函数的画图.doc

    MATLAB 一元二次函数的画图 function varargout = huatu(varargin) % HUATU MATLAB code for huatu.fig % HUATU, by ...

  4. dynamo怎样由线生成体_怎样用最简单的笔刷画出最靓的产品!?

    本文来源:黄山首绘-形演72计教程 怎样用最简单的笔触画出最靓的产品?如果你正在学习工业设计手绘或者曾经学习过工业设计手绘,手绘从初学到进步成长再到熟练运用,你会发现一个规律,尤其是数字手绘.那就是越 ...

  5. 分类算法列一下有多少种?应用场景?分类算法介绍、常见分类算法优缺点、如何选择分类算法、分类算法评估

    分类算法 分类算法介绍 概念 分类算法 常见分类算法 NBS LR SVM算法 ID3算法 C4.5 算法 C5.0算法 KNN 算法 ANN 算法 选择分类算法 分类算法性能评估 分类算法介绍 概念 ...

  6. 线性SVM与非线性SVM

    所谓线性SVM与非线性SVM是指其选用的核类型. 用于分类问题时,SVM可供选择的参数并不多,惩罚参数C,核函数及其参数选择.对于一个应用,是选择线性核,还是多项式核,还是高斯核?还是有一些规则的. ...

  7. 推荐:一个画出高大上的机器学习图的神器(论文必备)

    本人在写论文的时候,很多图片是用matplotlib和seaborn画的,但是,我还有一个神器,Scikit-plot,通过这个神器,画出了更加高大上的机器学习图,本文对Scikit-plot做下简单 ...

  8. matlab学位论文绘图美化工具_推荐几个超级好用的工具,让你在论文中画出漂亮的插图...

    每次我们看到优秀期刊中的文章,比如<Nature>.<Cell>,我们都会被文章中的插图惊艳到.再瞅瞅我们自己论文中的插图,总觉得比别人low了好几个c层次.一个好看的插图绝对 ...

  9. matlab绘制两个函数,用matlab程序 在同一图中绘制两个函数,这两个函数分别是: , ,,matlab怎样同时画出两个函数图...

    导航:网站首页 > 用matlab程序 在同一图中绘制两个函数,这两个函数分别是: , ,,matlab怎样同时画出两个函数图 用matlab程序 在同一图中绘制两个函数,这两个函数分别是: , ...

最新文章

  1. 排除hotnews主题内容页面上的热点图片推荐里的分类-hotnews主题top_hot.php
  2. 虚拟机中的黑苹果系统经常卡死_程序员吐槽macOS 10.15系统:破坏SSH默认规则
  3. Java面向对象part1
  4. Window密码恢复的方法(转)
  5. 2020.10.04蓝桥测试
  6. Fiori elements:when smart template is entered for first time, no data filled
  7. mysql两列取小_mysql – 我想获取两列特定列之间的列值
  8. linux标准I/O——按字符输入和输出
  9. ELV局部视图与差分隐私【敏感度到底怎么理解】【下】
  10. 51nod1255【贪心-栈的应用】
  11. 9-10 原生安装 2
  12. 安装使用FLTK图形库
  13. VC安装驱动详细解释
  14. 带温度补偿RTC芯片的选型和应用
  15. 摄影测量与遥感数据精度表格
  16. 开启WIN10的卓越性能模式
  17. 带log的计算器html代码,lg计算器(log计算器在线)
  18. 红旗Linux网卡Bind,请教一下在红旗linux中安装网卡RTL8168/8111的问题
  19. 5分钟破解WEP加密的无线密码
  20. 数据库SQL实战-查找描述信息中包括robot的电影对应的分类名称以及电影数目(mysql)

热门文章

  1. 如何确定scrum的story之一:识别利益相关者和目标
  2. Android 开发多摄像头 API
  3. 第10周---信息熵与压缩编码基础
  4. 报表工具之ireport
  5. 小计合计总计表格_总计总计重复的Excel小计
  6. centos7.5.1804配置本地yum源和阿里云yum源以及163源
  7. [Unity3D] Unity3D连接安卓设备调试unity程序
  8. 李宏毅学习笔记35.GAN.06.Tips for Improving GAN
  9. Python 同时插入两张图片在同一页PPT,并循环多张图片
  10. 基于PHP+MySQL的大学生求职招聘网站