支持向量机

支持向量机(二)——数值优化

廉价感情. 提交于 2019-12-25 12:56:30
在上一篇博客中,较为详细的介绍了在数据完全线性可分的情况下,构建SVM模型的目标,并将构建目标转化为最大化几何距离的优化过程,本篇就将介绍具体优化时的计算过程。还是一样的,先推荐几篇不错的博文,大家也可以参考链接中的文章学习。 关于凸优化问题 http://www.360doc.com/content/18/0522/09/32196507_756021531.shtml 关于拉格朗日乘子法及对偶优化问题 https://www.cnblogs.com/xinchen1111/p/8804858.html https://www.cnblogs.com/ooon/p/5721119.html https://www.cnblogs.com/mashiqi/p/3719101.html 1.凸优化问题 在一般的优化问题中求最大值或最小值,通常的做法是找出那些梯度为0的点(有的情况下还需要求出边界点的值),然后比较这些点的函数值,最后找出最大值或最小值。这个过程中有两个问题需要注意,一个是当存在多个极值点时,计算量会比较大;另外一个问题就是鞍点(比较常见的是 函数在 处)的问题。所以,如果优化问题能够在附加一些限制条件时能到简化,那将非常利于最大值或最小值的求解,凸优化问题正是这样一种简化后的优化问题。 1.1 凸集 对于 维空间中点的集合 ,如果对集合中任意两个点 、 ,以及实数 ,

SVM理解

蓝咒 提交于 2019-12-25 12:56:03
一、概念 支持向量机是学习策略的间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。支持向量机的学习算法是求解凸二次规划的最优化算法。 二、问题类型 1)训练数据线性可分时,通过硬间隔最大化,学习一个线性的分类器,叫线性可分支持向量机,又称硬间隔支持向量机。 2)当训练数据近似线性可分时,加入松弛变量,通过软间隔最大化,叫线性支持向量机,又称软间隔支持向量机。 3)当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。 三、线性可分支持向量机 点(a 0 ,a 1 )到直线或者平面w 0 x 0 +w 1 x 1 +b的距离如下:              换成向量形式为:              定义超平面(w,b)关于训练集T的几何间隔为超平面(w,b)关于T中所有样本点(x i ,y i )的几何间隔之最小值,几何间隔一般是实例点到超平面的带符号的距离,当样本点被超平面正确分类时就是实例点到超平面的距离。 在线性可分时,r=|w·x+b|等价为y i (w·x i +b),yi=±1,因为当样本被正确分类时,y i (w·x i +b)的乘积亦为正值,r又称为函数间隔 从上述点到平面的距离可以看出,当w和b成倍进行缩放的时候,距离是不变的,因为分子分母正好抵消。所以为了方便计算与优化,我们对w和b进行缩放

支持向量机(SVM)算法的matlab的实现

戏子无情 提交于 2019-12-21 03:55:31
支持向量机(SVM)的matlab的实现 支持向量机是一种分类算法之中的一个,matlab中也有对应的函数来对其进行求解;以下贴一个小例子。这个例子来源于我们实际的项目。 clc; clear; N=10; %以下的数据是我们实际项目中的训练例子(例子中有8个属性) correctData=[0,0.2,0.8,0,0,0,2,2]; errorData_ReversePharse=[1,0.8,0.2,1,0,0,2,2]; errorData_CountLoss=[0.2,0.4,0.6,0.2,0,0,1,1]; errorData_X=[0.5,0.5,0.5,1,1,0,0,0]; errorData_Lower=[0.2,0,1,0.2,0,0,0,0]; errorData_Local_X=[0.2,0.2,0.8,0.4,0.4,0,0,0]; errorData_Z=[0.53,0.55,0.45,1,0,1,0,0]; errorData_High=[0.8,1,0,0.8,0,0,0,0]; errorData_CountBefore=[0.4,0.2,0.8,0.4,0,0,2,2]; errorData_Local_X1=[0.3,0.3,0.7,0.4,0.2,0,1,0]; sampleData=[correctData;errorData

支持向量机(SVM)——python3实现

早过忘川 提交于 2019-12-21 03:55:20
  今天看完soft-margin SVM就又搜了下相关的代码,最后搜到 这个 ,第一次看懂了SVM的实现。   关于代码中cvxopt的使用,可以看下 这个 简单的介绍。   这里还是将代码贴在这里,里面加了自己的一下注释。 1 # -*- coding: utf-8 -*- 2 """ 3 Created on Tue Nov 22 11:24:22 2016 4 5 @author: Administrator 6 """ 7 8 # Mathieu Blondel, September 2010 9 # License: BSD 3 clause 10 11 import numpy as np 12 from numpy import linalg 13 import cvxopt 14 import cvxopt.solvers 15 16 def linear_kernel(x1, x2): 17 return np.dot(x1, x2) 18 19 def polynomial_kernel(x, y, p=3): 20 return (1 + np.dot(x, y)) ** p 21 22 def gaussian_kernel(x, y, sigma=5.0): 23 return np.exp(-linalg.norm(x-y)**2 / (2 *

支持向量机python代码实现

*爱你&永不变心* 提交于 2019-12-19 01:05:06
训练数据 -0.214824 0.662756 -1.000000 -0.061569 -0.091875 1.000000 0.406933 0.648055 -1.000000 0.223650 0.130142 1.000000 0.231317 0.766906 -1.000000 -0.748800 -0.531637 -1.000000 -0.557789 0.375797 -1.000000 0.207123 -0.019463 1.000000 0.286462 0.719470 -1.000000 0.195300 -0.179039 1.000000 -0.152696 -0.153030 1.000000 0.384471 0.653336 -1.000000 -0.117280 -0.153217 1.000000 -0.238076 0.000583 1.000000 -0.413576 0.145681 1.000000 0.490767 -0.680029 -1.000000 0.199894 -0.199381 1.000000 -0.356048 0.537960 -1.000000 -0.392868 -0.125261 1.000000 0.353588 -0.070617 1.000000 0.020984 0.925720 -1

支持向量机(四)

陌路散爱 提交于 2019-12-18 15:54:05
9 规则化和不可分情况处理(Regularization and the non-separable case) 我们之前讨论的情况都是建立在样例线性可分的假设上,当样例线性不可分时,我们可以尝试使用核函数来将特征映射到高维,这样很可能就可分了。然而,映射后我们也不能100%保证可分。那怎么办呢,我们需要将模型进行调整,以保证在不可分的情况下,也能够尽可能地找出分隔超平面。 看下面两张图: 可以看到一个离群点(可能是噪声)可以造成超平面的移动,间隔缩小,可见以前的模型对噪声非常敏感。再有甚者,如果离群点在另外一个类中,那么这时候就是线性不可分了。 这时候我们应该允许一些点游离并在在模型中违背限制条件(函数间隔大于1)。我们设计得到新的模型如下(也称软间隔): 引入非负参数 后(称为松弛变量),就允许某些样本点的函数间隔小于1,即在最大间隔区间里面,或者函数间隔是负数,即样本点在对方的区域中。而放松限制条件后,我们需要重新调整目标函数,以对离群点进行处罚,目标函数后面加上的 就表示离群点越多,目标函数值越大,而我们要求的是尽可能小的目标函数值。这里的C是离群点的权重,C越大表明离群点对目标函数影响越大,也就是越不希望看到离群点。我们看到,目标函数控制了离群点的数目和程度,使大部分样本点仍然遵守限制条件。 模型修改后,拉格朗日公式也要修改如下: 这里的 和 都是拉格朗日乘子

吴恩达机器学习视频笔记——8

孤街醉人 提交于 2019-12-11 15:28:28
10、支持向量机 10.1、大边界的直观理解 支持向量机 ( Support VectorMachine ) ,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。 10.2、核函数 10.3、应用SVM 11、聚类 11.1、无监督机器学习 11.2、K-Means(K均值算法) 11.3优化目标 11.4、随机初始化 11.5、选择聚类数 12、降维 12.1、动机一:数据压缩 12.2、动机二:数据可视化 12.3、主成分分析问题 12.4、主成分分析算法 12.5、选择主成分的数量 12.6、重建的压缩表示 12.7、主成分分析法的应用建议 本博客主要引用文章如下: 作者:黄海广 链接:斯坦福大学2014机器学习教程个人笔记(V5.4) 来源:PDF 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 来源: https://www.cnblogs.com/AlexWangle-one/p/12022673.html

关于SVM的那点破事

送分小仙女□ 提交于 2019-12-07 11:45:36
SVM的实现工具箱有很多,但我还是认为libsvm最好用(lssvm也不错的说),我认为把这一个SVM的实现工具箱研究的透彻就够了,反正我是够用了,即如果现在需要SVM这个工具来进行分类或者回归我可以拿来libsvm-mat-2.89-3[FarutoUltimate3.0]就能熟练使用以达到解决自己的问题的目的,而不用再重新学习掌握SVM这个工具。 其实还有一些话要说,姑且先留着吧 … … ==================== MATLAB技术论坛电子 期刊 第九期(2011.06)[faruto帖子集锦] http://www.matlabsky.com/thread-17223-1-1.html ==================== 《Learn SVM Step by Step 》系列 视频 应用篇 Libsvm的下载、安装和使用 http://www.matlabsky.com/thread-18080-1-1.html Libsvm参数实例详解 http://www.matlabsky.com/thread-18457-1-1.html 一个实例搞定libsvm分类 http://www.matlabsky.com/thread-18521-1-1.html 一个实例搞定libsvm回归 http://www.matlabsky.com/thread-18552

BAT机器学习面试1000题系列

本小妞迷上赌 提交于 2019-12-06 14:35:20
几点声明: 1、本文的内容全部来源于七月在线发布的BAT机器学习面试1000题系列; 2、文章中带斜体的文字代表是本人自己增加的内容,如有错误还请批评指正; 3、原文中有部分链接已经失效,故而本人重新加上了新的链接,如有不当,还请指正。(也已用斜体标出) 4、部分答案由于完全是摘抄自其它的博客,所以本人就只贴出答案链接,这样既可以节省版面,也可以使排版更加美观。点击对应的问题即可跳转。 最后,此博文的排版已经经过本人整理,公式已用latex语法表示,方便读者阅读。同时链接形式也做了优化,可直接跳转至相应页面,希望能够帮助读者提高阅读体验,文中如果因为本人的整理出现纰漏,还请指出,大家共同进步! 1.请简要介绍下SVM。 SVM,全称是support vector machine,中文名叫支持向量机。SVM是一个面向数据的分类算法,它的目标是为确定一个分类超平面,从而将不同的数据分隔开。 扩展: 支持向量机学习方法包括构建由简至繁的模型:线性可分支持向量机、线性支持向量机及非线性支持向量机。当训练数据线性可分时,通过硬间隔最大化,学习一个线性的分类器,即线性可分支持向量机,又称为硬间隔支持向量机;当训练数据近似线性可分时,通过软间隔最大化,也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机;当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。

深度学习之神经网络与支持向量机

旧城冷巷雨未停 提交于 2019-12-06 02:46:35
从人人上转过来的 前言:本文翻译自deeplearning网站,主要综述了一些论文、算法已经工具箱。 引言: 神经网络( N eural N etwork)与支持向量机( S upport V ector M achines,SVM)是统计学习的代表方法。可以认为神经网络与支持向量机都源自于感知机(Perceptron)。感知机是1958年由Rosenblatt发明的线性分类模型。感知机对线性分类有效,但现实中的分类问题通常是非线性的。 神经网络与支持向量机(包含核方法)都是非线性分类模型。1986年,Rummelhart与McClelland发明了神经网络的学习算法 B ack P ropagation。后来,Vapnik等人于1992年提出了支持向量机。神经网络是多层(通常是三层)的非线性模型, 支持向量机利用核技巧把非线性问题转换成线性问题。 神经网络与支持向量机一直处于“竞争”关系。 Scholkopf是Vapnik的大弟子,支持向量机与核方法研究的领军人物。据Scholkopf说,Vapnik当初发明支持向量机就是想"干掉"神经网络(He wanted to kill Neural Network)。支持向量机确实很有效,一段时间支持向量机一派占了上风。 近年来,神经网络一派的大师Hinton又提出了神经网络的Deep Learning算法(2006年)