SVM简单非线性分类,画出分类面与支持向量(MATLAB)
创造两类二维非线性可分点,使用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)相关推荐
- Python用最简单的代码画出一箭穿心
import turtledef curvemove(): # 定义画圆的函数for i in range(100):turtle.right(2)turtle.forward(2)turtle.sp ...
- 用python3编写一箭穿心_Python用最简单的代码画出一箭穿心
import turtle def curvemove(): # 定义画圆的函数 for i in range(100): turtle.right(2) turtle.forward(2) turt ...
- 用matlab画出一元二次的图,MATLAB 一元二次函数的画图.doc
MATLAB 一元二次函数的画图 function varargout = huatu(varargin) % HUATU MATLAB code for huatu.fig % HUATU, by ...
- dynamo怎样由线生成体_怎样用最简单的笔刷画出最靓的产品!?
本文来源:黄山首绘-形演72计教程 怎样用最简单的笔触画出最靓的产品?如果你正在学习工业设计手绘或者曾经学习过工业设计手绘,手绘从初学到进步成长再到熟练运用,你会发现一个规律,尤其是数字手绘.那就是越 ...
- 分类算法列一下有多少种?应用场景?分类算法介绍、常见分类算法优缺点、如何选择分类算法、分类算法评估
分类算法 分类算法介绍 概念 分类算法 常见分类算法 NBS LR SVM算法 ID3算法 C4.5 算法 C5.0算法 KNN 算法 ANN 算法 选择分类算法 分类算法性能评估 分类算法介绍 概念 ...
- 线性SVM与非线性SVM
所谓线性SVM与非线性SVM是指其选用的核类型. 用于分类问题时,SVM可供选择的参数并不多,惩罚参数C,核函数及其参数选择.对于一个应用,是选择线性核,还是多项式核,还是高斯核?还是有一些规则的. ...
- 推荐:一个画出高大上的机器学习图的神器(论文必备)
本人在写论文的时候,很多图片是用matplotlib和seaborn画的,但是,我还有一个神器,Scikit-plot,通过这个神器,画出了更加高大上的机器学习图,本文对Scikit-plot做下简单 ...
- matlab学位论文绘图美化工具_推荐几个超级好用的工具,让你在论文中画出漂亮的插图...
每次我们看到优秀期刊中的文章,比如<Nature>.<Cell>,我们都会被文章中的插图惊艳到.再瞅瞅我们自己论文中的插图,总觉得比别人low了好几个c层次.一个好看的插图绝对 ...
- matlab绘制两个函数,用matlab程序 在同一图中绘制两个函数,这两个函数分别是: , ,,matlab怎样同时画出两个函数图...
导航:网站首页 > 用matlab程序 在同一图中绘制两个函数,这两个函数分别是: , ,,matlab怎样同时画出两个函数图 用matlab程序 在同一图中绘制两个函数,这两个函数分别是: , ...
最新文章
- 排除hotnews主题内容页面上的热点图片推荐里的分类-hotnews主题top_hot.php
- 虚拟机中的黑苹果系统经常卡死_程序员吐槽macOS 10.15系统:破坏SSH默认规则
- Java面向对象part1
- Window密码恢复的方法(转)
- 2020.10.04蓝桥测试
- Fiori elements:when smart template is entered for first time, no data filled
- mysql两列取小_mysql – 我想获取两列特定列之间的列值
- linux标准I/O——按字符输入和输出
- ELV局部视图与差分隐私【敏感度到底怎么理解】【下】
- 51nod1255【贪心-栈的应用】
- 9-10 原生安装 2
- 安装使用FLTK图形库
- VC安装驱动详细解释
- 带温度补偿RTC芯片的选型和应用
- 摄影测量与遥感数据精度表格
- 开启WIN10的卓越性能模式
- 带log的计算器html代码,lg计算器(log计算器在线)
- 红旗Linux网卡Bind,请教一下在红旗linux中安装网卡RTL8168/8111的问题
- 5分钟破解WEP加密的无线密码
- 数据库SQL实战-查找描述信息中包括robot的电影对应的分类名称以及电影数目(mysql)
热门文章
- 如何确定scrum的story之一:识别利益相关者和目标
- Android 开发多摄像头 API
- 第10周---信息熵与压缩编码基础
- 报表工具之ireport
- 小计合计总计表格_总计总计重复的Excel小计
- centos7.5.1804配置本地yum源和阿里云yum源以及163源
- [Unity3D] Unity3D连接安卓设备调试unity程序
- 李宏毅学习笔记35.GAN.06.Tips for Improving GAN
- Python 同时插入两张图片在同一页PPT,并循环多张图片
- 基于PHP+MySQL的大学生求职招聘网站