背景:通常一类问题出现在需要对训练样本进行一定比例的筛选,或者已知的训练样本都是正样本,而负样本却很少的情况。
这种情况下,往往需要训练一个对于训练样本紧凑的分类边界,就可以通过负样本实验。一个简单的实际例子是:一个工厂对于产品的合格性进行检查时,往往所知道是合格产品的参数,而不合格的产品的参数要么空间比较大,要么知道的很少。这种情况下就可以通过已知的合格产品参数来训练一个一类分类器,得到一个紧凑的分类边界,超出这个边界就认为是不合格产品。形式化的说明知乎上有个很好的例子:
http://www.zhihu.com/question/22365729
原理:
它求解的模型如下所示:

其中的参数V特别注意,它的值在0-1之间,是一个比例值,它的含义是:你的训练样本中最后被分类为负样本的比例。比如你有100个训练样本,V设为0.1,去学一个one class SVM,然后在学到的SVM上测试你之前用的训练集,最后可以看到有10个左右的样本的标签为-1,被分为负样本。下面还会通过实验进行说明。模型的求解等其他理论细节请参考大牛Bernhard Scholkopf的文章:Support Vector Method for Novelty Detection
http://papers.nips.cc/paper/1723-support-vector-method-for-novelty-detection.pdf
实验:
libsvm中有关于one class SVM的实现,算法就是根据上面Bernhard Scholkopf的文章。可以用下面代码进行测试:

% Generate training data
r = 20;
fprintf('Learning the function x^2 + y^2 < 1\n');
[XX,YY] = meshgrid(-1:1/r:1,-1:1/r:1);
X = [XX(:) YY(:)];
Y = 2*(sqrt(X(:,1).^2 + X(:,2).^2) < 1)-1 ;Pin = find(Y==1);
X1 = X(Pin,:);
Y1 = Y(Pin);% Plot training data
figure;hold on;
set(gca,'FontSize',16);
for i = 1:length(Y1)if(Y1(i) > 0)plot(X1(i,1),X1(i,2),'g.');elseplot(X1(i,1),X1(i,2),'r.');end
end% Draw the decision boundary
theta = linspace(0,2*pi,100);
plot(cos(theta),sin(theta),'k-');
xlabel('x');
ylabel('y')
title(sprintf('Training data (%i points)',length(Y)));
axis equal tight; box on;

通过上面的代码可以构造一个在圆内的训练样本,如下图所有:

这样我们就假设所有圆外的样本为负样本,下面我们就进行one-class SVM训练,可以看到有个参数-n,它就是我们上面提到的V,也就是这些训练样本中包含负样本的比例。

%%train one class SVM with 10% instances to be set as outlier
model = svmtrain(Y1,X1,'-s 2 -n 0.01');
[Y1,Y2,Y3] = svmpredict(Y,X,model);for i = 1:length(Y)if(Y1(i) > 0)plot(X(i,1),X(i,2),'g.');elseplot(X(i,1),X(i,2),'r.');end
end

上面的代码可以得到下面的结果:

其中预测为正的用绿色表示,预测为负的用红色表示。
为了说明参数V的作用,将-n设为0.3后可以得到如下结果:

(黑线圆圈里是我们的训练样本的点)
上面是对负样本的检测效果验证,当一个新样本在圆内时,我们还是希望分类器可以将新样本分为正样本,下面就通过一段代码验证了这个效果:

X21 = rand(100,1);
X22 = 1-X21;
X2 = [X21 X22];
Y2 = ones(100,1);
% X = [X;X2];
% Y = [Y;Y2];
[Y1,Y2,Y3] = svmpredict(Y2,X2,model);for i = 1:length(Y1)if(Y1(i) > 0)plot(X2(i,1),X2(i,2),'g.');elseplot(X2(i,1),X2(i,2),'r.');end
end

上面的代码得到的效果如下图:

可以看到这些新样本的标签都分对了(n设为0.01的情况),另外,由于新样本(x1,y1)满足x1+y1=1所以显示在一条直线上。

one class SVM相关推荐

  1. 支持向量机SVM序列最小优化算法SMO

    支持向量机(Support Vector Machine)由V.N. Vapnik,A.Y. Chervonenkis,C. Cortes 等在1964年提出.序列最小优化算法(Sequential ...

  2. 线性回归、逻辑回归及SVM

    1,回归(Linear Regression) 回归其实就是对已知公式的未知参数进行估计.可以简单的理解为:在给定训练样本点和已知的公式后,对于一个或多个未知参数,机器会自动枚举参数的所有可能取值(对 ...

  3. svm rbf人脸识别 yale_实操课——机器学习之人脸识别

    SVM(Support Vector Machine)指的是支持向量机,是常见的一种判别方法.在机器学习领域,是一个有监督的学习模型,通常用来进行模式识别.分类以及回归分析.在n维空间中找到一个分类超 ...

  4. Python,OpenCV基于支持向量机SVM的手写数字OCR

    Python,OpenCV基于支持向量机SVM的手写数字OCR 1. 效果图 2. SVM及原理 2. 源码 2.1 SVM的手写数字OCR 2.2 非线性SVM 参考 上一节介绍了基于KNN的手写数 ...

  5. 机器学习中的数学基础(4.1):支持向量机Support Vector Machine(SVM)

    SVM可以说是一个很经典的二分类问题,属于有监督学习算法的一种.看过那么多的博客知乎解释SVM我一定要自己总结一篇,加深一下自己的理解. 带着问题去读文章会发现,柳暗花明又一村,瞬间李敏浩出现在眼前的 ...

  6. SVM算法实现光学字符识别

    目录 1.数据来源 2.数据预处理 3.模型训练 4.模型性能评估 5.模型性能提升 5.1.核函数的选取 5.2.惩罚参数C的选取 OCR (Optical Character Recognitio ...

  7. 使用OpenCV进行SVM分类demo

    代码来源 https://github.com/mbeyeler/opencv-machine-learning/blob/master/notebooks/06.01-Implementing-Yo ...

  8. SVM进行手写数字识别

    使用了TensorFlow中的mnist数据集 from sklearn import svm import numpy as np from sklearn.metrics import class ...

  9. 机器学习(18)-- SVM支持向量机(根据身高体重分类性别)

    目录 一.基础理论 二.身高体重预测性别 1.获取数据(男女生身高体重) 2.数据处理(合并数据) 3.设置标签 4.创建分类器(支持向量机) 4-1.创建svm分类器 4-2.设置分类器属性(线性核 ...

  10. Udacity机器人软件工程师课程笔记(二十二) - 物体识别 - 色彩直方图,支持向量机SVM

    物体识别 1.HSV色彩空间 如果要进行颜色检测,HSV颜色空间是当前最常用的. HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一 ...

最新文章

  1. java php aes加密解密_php aes 加密解密可与java对接
  2. 【C/C++16】_public.h,_public.cpp,_cmpublic.h
  3. Mongodb副本集配置
  4. 模版方法模式在Spring框架中的应用
  5. Python添加模块路径
  6. -6dB的效果也不错
  7. 【转贴】我对测试工作的一些认识
  8. C#遍历DataSet数据的几种方法总结
  9. [Zeppelin]Zeppelin安装与初体验
  10. 【springBoot】之快速构建一个web项目
  11. OpenSSL源码分析—MD4算法实现
  12. 【读书笔记-诗词歌赋】诗词积累(一)
  13. 用tikz画球坐标系下的体积微元
  14. 美国把互联网服务器都关了,到底对我们有什么影响?
  15. 织梦DEDECMS QQ一键登录插件返回空白解决方法
  16. 第077封“情书”:弯弯绕<Entagma>Houdini 2018
  17. mysql安装时损坏的图像_损坏的图像,详细教您提示损坏的图像该怎么解决
  18. 烽火ExMobi移动应用平台能源行业初体验
  19. WPF 中 TextBlock 和 TextBox 区别
  20. android手机配什么蓝牙耳机,安卓手机配什么蓝牙耳机好?安卓系统蓝牙耳机推荐!...

热门文章

  1. 开放存取知识库及其数据采集规范的研究
  2. matlab梯形法数值积分,数值积分(梯形法)
  3. composer php中如何执行,composer怎么运行
  4. 1994年的计算机安全法规,1994年2月18日,我国颁布了(),这是我国第一个计算机安全法规,是我国计算机安全工作的总体纲领。...
  5. 高中信息技术教资科目三总结
  6. 老朋友,歌曲停了很久很久,确实不错
  7. RuntimeError: generator raised StopIteration
  8. 2017年国赛H题_远程幅频特性测试装置训练总结(硬件部分)
  9. workstation安装Windows Server 2016
  10. NB-IoT、LoRa、sigfox低功耗广域物联网技术,未来的争夺之战