SVM入门

合集下载

SVM方法步骤

SVM方法步骤

SVM 方法步骤彭海娟 2010-1-29看了一些文档和程序,大体总结出SVM 的步骤,了解了计算过程,再看相关文档就比较容易懂了。

1. 准备工作1) 确立分类器个数一般都事先确定分类器的个数,当然,如有必要,可在训练过程中增加分类器的个数。

分类器指的是将样本中分几个类型,比如我们从样本中需要识别出:车辆、行人、非车并非人,则分类器的个数是3。

分类器的个数用k2) 图像库建立SVM 方法需要建立一个比较大的样本集,也就是图像库,这个样本集不仅仅包括正样本,还需要有一定数量的负样本。

通常样本越多越好,但不是绝对的。

设样本数为S3) ROI 提取对所有样本中的可能包含目标的区域(比如车辆区域)手动或自动提取出来,此时包括正样本中的目标区域,也包括负样本中类似车辆特征的区域或者说干扰区域。

4) ROI 预处理包括背景去除,图像滤波,或者是边缘增强,二值化等预处理。

预处理的方法视特征的选取而定。

5) 特征向量确定描述一个目标,打算用什么特征,用几个特征,给出每个特征的标示方法以及总的特征数,也就是常说的特征向量的维数。

对于车辆识别,可用的特征如:车辆区域的灰度均值、灰度方差、对称性、信息熵、傅里叶描述子等等。

设特征向量的维数是L 。

6) 特征提取确定采取的特征向量之后,对样本集中所有经过预处理之后的ROI 区域进行特征提取,也就是说计算每个ROI 区域的所有特征值,并将其保存。

7) 特征向量的归一化常用的归一化方法是:先对相同的特征(每个特征向量分别归一化)进行排序,然后根据特征的最大值和最小值重新计算特征值。

8) 核的选定SVM 的构造主要依赖于核函数的选择,由于不适当的核函数可能会导致很差的分类结果,并且目前尚没有有效的学习使用何种核函数比较好,只能通过实验结果确定采用哪种核函数比较好。

训练的目标不同,核函数也会不同。

核函数其实就是采用什么样的模型描述样本中目标特征向量之间的关系。

如常用的核函数:Gauss 函数21),(21x x x p e x x k --=对样本的训练就是计算p 矩阵,然后得出描述目标的模板和代表元。

svm算法公式

svm算法公式

svm算法公式摘要:1.简介2.SVM 算法基本思想3.SVM 算法公式推导4.SVM 算法应用场景与优缺点5.总结正文:1.简介支持向量机(Support Vector Machine,SVM)是一种经典的二分类机器学习算法。

它通过划分超平面,使得不同类别的数据点到超平面的距离最大,从而实现分类。

SVM 算法具有良好的泛化能力,广泛应用于文本分类、图像分类、生物信息学等领域。

2.SVM 算法基本思想SVM 算法的基本思想是找到一个最佳超平面,使得两个类别之间的距离(即几何间隔)最大化。

为了找到这个最佳超平面,SVM 算法需要解决一个优化问题,即求解一个凸二次规划问题。

3.SVM 算法公式推导设训练样本集为X = {x1, x2, ..., xn},标签为Y = {y1, y2, ..., yn},其中yi∈{-1, 1}。

SVM 算法的优化目标是最小化误分类点到超平面的几何间隔之和,即:min ∑(yi - ∑αi * yi * kernel(xi, xj))^2其中,αi 表示第i 个支持向量对应的拉格朗日乘子,kernel(xi, xj) 表示核函数,用于计算两个向量之间的相似度。

对于线性核函数,kernel(xi, xj) = xi·xj;对于多项式核函数,kernel(xi, xj) = (xi·xj + 1)^d。

4.SVM 算法应用场景与优缺点SVM 算法在以下场景中表现良好:- 数据集具有较高维度,但线性可分;- 数据集中存在噪声或异常值;- 需要对类别进行细分的场景。

SVM 算法的优点包括:- 具有较好的泛化能力,能有效处理过拟合问题;- 对于线性可分数据集,能够实现最优分类效果;- 支持多种核函数,可处理非线性问题。

SVM 算法的缺点包括:- 对于非线性数据集,需要选择合适的核函数,否则可能无法获得好的分类效果;- 计算复杂度较高,尤其是当数据量较大时。

5.总结支持向量机(SVM)是一种经典的二分类机器学习算法,通过寻找最佳超平面来实现分类。

svm训练参数

svm训练参数

svm训练参数
在使用支持向量机(SVM)进行训练时,有一些重要的参数需要
选择。

以下是一些常见的SVM训练参数:
1. C参数(惩罚参数):控制了决策边界的平滑度。

较小的C值将产生较大的决策边界间隔,较大的C值将产生更小的决策边界间隔。

选择C的值取决于数据集的特征。

2. 核函数:SVM可以使用不同的核函数来进行非线性分类。

常见的核函数包括线性核函数、多项式核函数和径向基函数(RBF)核函数。

选择适当的核函数取决于数据集的特性。

3. gamma参数(RBF核函数特有):控制了决策边界的曲率。


高的gamma值将产生更复杂的决策边界,较低的gamma值将产生更简
单的决策边界。

4. degree参数(多项式核函数特有):控制了多项式核函数的
阶数。

较高的阶数可以使决策边界更复杂,但可能导致过拟合。

5. coef0参数(多项式和sigmoid核函数特有):控制了多项式核函数和sigmoid核函数的影响。

较大的coef0值将产生更复杂的决
策边界。

这些参数的选择通常需要通过交叉验证等方法来进行调整,以获
得最佳分类性能。

svm向量机的使用流程

svm向量机的使用流程

SVM向量机的使用流程1. 简介SVM(Support Vector Machine,支持向量机)是一种常用的机器学习算法,广泛应用于分类和回归问题。

它基于统计学习理论中的结构风险最小化原则,在数据平面上构建出一个最优的超平面,用于分类不同类别的样本数据。

2. 基本原理SVM基于以下两个关键概念:2.1 最大间隔分类器SVM试图寻找一个超平面,使得不同类别的样本点能够被它们之间的最大间隔所分开。

这样的超平面称为最大间隔分类器。

2.2 支持向量支持向量是距离最大间隔分类器最近的样本点,它们对于定义超平面和分类决策起到关键的作用。

3. 使用流程SVM的使用流程主要包括以下几个步骤:3.1 数据准备首先,需要准备用于训练和测试的数据。

数据应该包含已知类别的样本点,并且每个样本点都应该由一些特征组成。

3.2 数据预处理在使用SVM之前,需要对数据进行预处理。

这包括特征选择、特征缩放和数据标准化等步骤,以确保数据的质量和一致性。

3.3 模型训练使用训练集来训练SVM模型。

在训练过程中,SVM将根据具体的核函数和超参数来寻找最优的超平面。

使用测试集对训练完成的SVM模型进行评估。

常用的评估指标包括准确率、精确率、召回率和F1值等。

3.5 模型优化根据评估结果,可以调整SVM模型的超参数,以优化模型的性能。

常见的超参数包括核函数类型、正则化系数等。

3.6 模型应用训练完成并优化的SVM模型可以用于预测新样本的类别。

通过输入新样本的特征,SVM将输出预测的类别。

4. 实例演示下面以一个简单的二分类问题为例,演示SVM的使用流程:4.1 数据准备准备一个包含两个类别的样本数据集,每个类别有若干个样本点。

每个样本点都有一些特征,比如身高、体重等。

4.2 数据预处理对数据进行特征选择,保留与分类相关性较高的特征。

然后,进行特征缩放和数据标准化,以确保不同特征的量纲一致。

4.3 模型训练使用训练集对SVM模型进行训练。

(Matlab)SVM工具箱快速入手简易教程

(Matlab)SVM工具箱快速入手简易教程

SVM工具箱快速入手简易教程(by faruto)一. matlab 自带的函数(matlab帮助文件里的例子)[只有较新版本的matlab中有这两个SVM的函数] =====svmtrain svmclassify=====简要语法规则====svmtrainTrain support vector machine classifierSyntaxSVMStruct = svmtrain(Training, Group)SVMStruct = svmtrain(..., 'Kernel_Function', Kernel_FunctionValue, ...) SVMStruct = svmtrain(..., 'RBF_Sigma', RBFSigmaValue, ...)SVMStruct = svmtrain(..., 'Polyorder', PolyorderValue, ...) SVMStruct = svmtrain(..., 'Mlp_Params', Mlp_ParamsValue, ...) SVMStruct = svmtrain(..., 'Method', MethodValue, ...)SVMStruct = svmtrain(..., 'QuadProg_Opts', QuadProg_OptsValue, ...) SVMStruct = svmtrain(..., 'SMO_Opts', SMO_OptsValue, ...)SVMStruct = svmtrain(..., 'BoxConstraint', BoxConstraintValue, ...) SVMStruct = svmtrain(..., 'Autoscale', AutoscaleValue, ...) SVMStruct = svmtrain(..., 'Showplot', ShowplotValue, ...)---------------------svmclassifyClassify data using support vector machineSyntaxGroup = svmclassify(SVMStruct, Sample)Group = svmclassify(SVMStruct, Sample, 'Showplot', ShowplotValue)============================实例研究====================load fisheriris%载入matlab自带的数据[有关数据的信息可以自己到UCI查找,这是UCI的经典数据之一],得到的数据如下图:其中meas是150*4的矩阵代表着有150个样本每个样本有4个属性描述,species 代表着这150个样本的分类.data = [meas(:,1), meas(:,2)];%在这里只取meas的第一列和第二列,即只选取前两个属性.groups = ismember(species,'setosa');%由于species分类中是有三个分类:setosa,versicolor,virginica,为了使问题简单,我们将其变为二分类问题:Setosa and non-Setosa.[train, test] = crossvalind('holdOut',groups);cp = classperf(groups);%随机选择训练集合测试集[有关crossvalind的使用请自己help一下]其中cp作用是后来用来评价分类器的.svmStruct = svmtrain(data(train,:),groups(train),'showplot',true);%使用svmtrain进行训练,得到训练后的结构svmStruct,在预测时使用.训练结果如图:classes = svmclassify(svmStruct,data(test,:),'showplot',true); %对于未知的测试集进行分类预测,结果如图:classperf(cp,classes,test);cp.CorrectRateans =0.9867%分类器效果测评,就是看测试集分类的准确率的高低.二.台湾林智仁的libsvm工具箱该工具箱下载[libsvm-mat-2.86-1]: libsvm-mat-2.86-1.rar (73.75 KB)安装方法也很简单,解压文件,把当前工作目录调整到libsvm所在的文件夹下,再在set path里将libsvm 所在的文件夹加到里面.然后在命令行里输入mex -setup %选择一下编译器make这样就可以了.建议大家使用libsvm工具箱,这个更好用一些.可以进行分类[多类别],预测....=========svmtrainsvmpredict================简要语法:Usage=====matlab> model = svmtrain(training_label_vector, training_instance_matrix [, 'libsvm_options']);-training_label_vector:An m by 1 vector of training labels (type must be double).-training_instance_matrix:An m by n matrix of m training instances with n features.It can be dense or sparse (type must be double).-libsvm_options:A string of training options in the same format as that of LIBSVM.matlab> [predicted_label, accuracy,decision_values/prob_estimates] =svmpredict(testing_label_vector,testing_instance_matrix, model [,'libsvm_options']);-testing_label_vector:An m by 1 vector of prediction labels. If labels of testdata are unknown, simply useany random values. (type must be double)-testing_instance_matrix:An m by n matrix of m testing instances with n features.It can be dense or sparse. (type must be double)-model:The output of svmtrain.-libsvm_options:A string of testing options in the same format as that of LIBSVM.Returned Model Structure========================实例研究:load heart_scale.mat%工具箱里自带的数据如图:tu4其中 heart_scale_inst是样本,heart_scale_label是样本标签model = svmtrain(heart_scale_label,heart_scale_inst, '-c 1 -g 0.07');%训练样本,具体参数的调整请看帮助文件[predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model);%分类预测,这里把训练集当作测试集,验证效果如下: >> [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model); % test the training dataAccuracy = 86.6667% (234/270) (classification)==============这回把SVM这点入门的东西都说完了,大家可以参照着上手了,有关SVM的原理我下面有个简易的PPT,是以前做项目时我做的[当时我负责有关SVM这一块代码实现讲解什么的],感兴趣的你可以看看,都是上手较快的东西,想要深入学习SVM,你的学习统计学习理论什么的....挺多的呢..SVM.ppt (391 KB)-----------有关SVM和libsvm的非常好的资料,想要详细研究SVM看这个------libsvm_guide.pdf (194.53 KB)libsvm_library.pdf (316.82 KB) OptimizationSupportVectorMachinesandMachine。

svm基本结构

svm基本结构

支持向量机(SVM)是一种广泛使用的监督学习算法,主要用于分类任务。

SVM的基本结构可以分为以下几个核心部分:1. 数据集:SVM算法输入的是一个包含多个样本的数据集,每个样本由一组特征和一个标签组成。

2. 特征空间:SVM的第一步是将原始数据映射到一个更高维度的特征空间。

这样做通常是为了找到一个合适的分离超平面,该超平面能够最好地分隔不同的类别。

3. 支持向量:在特征空间中,最靠近分离超平面的训练样本点被称为支持向量。

这些点是决定超平面位置的关键因素。

4. 分离超平面:SVM的目标是找到一个超平面,它能够最大化两个类别之间的间隔(即支持向量之间的距离)。

5. 软间隔:在实际应用中,可能存在一些难以精确分类的样本。

为了提高模型的泛化能力,SVM允许存在一些违反分类规则的样本,即引入软间隔的概念,允许一定的误分类。

6. 最优边界:除了寻找一个合适的分离超平面之外,SVM也致力于使离群点(即那些距离超平面最近的点)尽可能远离决策边界。

7. 核函数:当数据不是线性可分的时候,SVM通过使用核技巧将数据映射到更高维的空间,使之变得线性可分。

常用的核函数包括线性核、多项式核、径向基函数(RBF)核和sigmoid 核。

8. 正则化:为了避免过拟合,SVM可以通过引入正则化项来控制模型的复杂度。

常见的正则化技术包括L1正则化和L2正则化。

9. 优化问题:SVM的目标函数可以通过拉格朗日乘子法转换成一个凸优化问题,该问题可以通过各种优化算法求解,例如序列最小优化(SMO)算法。

SVM的结构和原理使得它非常适合处理中小规模的数据集,并且在许多实际应用中取得了很好的性能。

然而,当面对非常大的数据集时,SVM可能会遇到计算效率和存储效率的问题。

svm常用核函数

svm常用核函数

svm常用核函数SVM(Support Vector Machine,支持向量机)是一种常用的机器学习算法,被广泛应用于分类和回归问题。

SVM的核心思想是将数据映射到高维空间中,通过在特征空间中找到最优超平面来进行分类或回归。

为了实现这一目标,SVM使用了一些常用的核函数来处理非线性问题。

本文将介绍几种常用的SVM核函数。

1. 线性核函数线性核函数是SVM中最简单的核函数之一。

它可以将数据映射到更高维的空间中,从而使数据在高维空间中变得线性可分。

线性核函数的形式为K(x, y) = x * y,其中x和y代表输入数据的特征向量。

线性核函数适用于处理线性可分的问题,但对于非线性问题效果有限。

2. 多项式核函数多项式核函数是一种常见的非线性核函数。

它通过将数据映射到更高维度的多项式空间中,来处理非线性问题。

多项式核函数的形式为K(x, y) = (x * y + c)^d,其中c是常数,d是多项式的次数。

多项式核函数可以处理一定程度上的非线性问题,但对于复杂的非线性问题可能效果不佳。

3. 高斯核函数(RBF核函数)高斯核函数,也称为径向基函数(Radial Basis Function,RBF)核函数,是SVM中最常用的核函数之一。

它将数据映射到无穷维的特征空间中,通过计算输入数据与支持向量之间的相似度来进行分类或回归。

高斯核函数的形式为K(x, y) = exp(-||x - y||^2 / (2 * sigma^2)),其中sigma是高斯核函数的带宽参数。

高斯核函数可以处理复杂的非线性问题,并且在实际应用中表现良好。

4. Sigmoid核函数Sigmoid核函数是一种常用的非线性核函数,它可以将数据映射到无穷维的特征空间中。

Sigmoid核函数的形式为K(x, y) = tanh(alpha * x * y + beta),其中alpha和beta是调节参数。

Sigmoid核函数可以处理非线性问题,但在某些情况下可能会出现过拟合的问题。

svm算法核心公式

svm算法核心公式

svm算法核心公式SVM算法核心公式支持向量机(Support Vector Machine,SVM)是一种常用的机器学习算法,其核心公式是该算法的基础和关键。

本文将详细介绍SVM算法的核心公式及其应用。

SVM算法的核心公式可以表示为以下形式:f(x) = sign(wx + b)其中,f(x)表示预测结果的符号,x表示输入样本的特征向量,w表示权重向量,b表示偏置项。

该公式表示通过计算特征向量与权重向量的内积,再加上偏置项,得到预测结果的符号。

SVM算法的核心思想是找到一个超平面,将不同类别的样本分隔开来,使得同一类别的样本尽可能靠近该超平面。

而核心公式则是实现这一思想的数学表达。

在SVM算法中,权重向量w和偏置项b是需要通过训练得到的。

训练过程中,SVM算法会根据训练样本的特征和标签,调整权重向量和偏置项,使得核心公式能够正确地预测样本的类别。

SVM算法的核心公式有以下几个重要特点:1. 非线性可分问题:SVM算法可以通过使用核函数将样本映射到高维空间中,从而解决非线性可分问题。

核函数可以将低维特征空间中的样本映射到高维特征空间,使得在高维空间中存在一个线性超平面能够将不同类别的样本分隔开来。

2. 最大间隔:SVM算法的目标是找到一个最大间隔的超平面,使得不同类别的样本点离超平面的距离最大化。

最大间隔的超平面能够更好地区分不同类别的样本,具有更好的泛化能力。

3. 支持向量:在SVM算法中,离超平面最近的一些样本点被称为支持向量。

这些支持向量对于确定超平面的位置和方向起到关键作用。

SVM算法的训练过程主要是确定支持向量和相应的权重。

SVM算法的核心公式在实际应用中具有广泛的应用。

例如,SVM 算法可以用于图像分类、文本分类、手写数字识别等问题。

通过合理选择核函数和调整超参数,SVM算法可以取得较好的分类效果。

总结起来,SVM算法的核心公式是该算法的基础和关键,它通过计算特征向量与权重向量的内积,再加上偏置项,得到预测结果的符号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SVM入门(四五六)线性分类器的求解分类:机器学习2012-01-09 16:11 141人阅读评论(0) 收藏举报优化文档算法语言cSVM入门(四)线性分类器的求解——问题的描述Part1上节说到我们有了一个线性分类函数,也有了判断解优劣的标准——即有了优化的目标,这个目标就是最大化几何间隔,但是看过一些关于SVM的论文的人一定记得什么优化的目标是要最小化||w||这样的说法,这是怎么回事呢?回头再看看我们对间隔和几何间隔的定义:间隔:δ=y(wx+b)=|g(x)|几何间隔:。

注意到几何间隔与||w||是成反比的,因此最大化几何间隔与最小可以看出δ=||w||δ几何化||w||完全是一回事。

而我们常用的方法并不是固定||w||的大小而寻求最大几何间隔,而是固定间隔(例如固定为1),寻找最小的||w||。

而凡是求一个函数的最小值(或最大值)的问题都可以称为寻优问题(也叫作一个规划问题),又由于找最大值的问题总可以通过加一个负号变为找最小值的问题,因此我们下面讨论的时候都针对找最小值的过程来进行。

一个寻优问题最重要的部分是目标函数,顾名思义,就是指寻优的目标。

例如我们想寻找最小的||w||这件事,就可以用下面的式子表示:但实际上对于这个目标,我们常常使用另一个完全等价的目标函数来代替,那就是:(式1)不难看出当||w||2达到最小时,||w||也达到最小,反之亦然(前提当然是||w||描述的是向量的长度,因而是非负的)。

之所以采用这种形式,是因为后面的求解过程会对目标函数作一系列变换,而式(1)的形式会使变换后的形式更为简洁(正如聪明的读者所料,添加的系数二分之一和平方,皆是为求导数所需)。

接下来我们自然会问的就是,这个式子是否就描述了我们的问题呢?(回想一下,我们的问题是有一堆点,可以被分成两类,我们要找出最好的分类面)如果直接来解这个求最小值问题,很容易看出当||w||=0的时候就得到了目标函数的最小值。

但是你也会发现,无论你给什么样的数据,都是这个解!反映在图中,就是H1与H2两条直线间的距离无限大,这个时候,所有的样本点(无论正样本还是负样本)都跑到了H1和H2中间,而我们原本的意图是,H1右侧的被分为正类,H2 左侧的被分为负类,位于两类中间的样本则拒绝分类(拒绝分类的另一种理解是分给哪一类都有道理,因而分给哪一类也都没有道理)。

这下可好,所有样本点都进入了无法分类的灰色地带。

造成这种结果的原因是在描述问题的时候只考虑了目标,而没有加入约束条件,约束条件就是在求解过程中必须满足的条件,体现在我们的问题中就是样本点必须在H1或H2的某一侧(或者至少在H1和H2上),而不能跑到两者中间。

我们前文提到过把间隔固定为1,这是指把所有样本点中间隔最小的那一点的间隔定为1(这也是集合的间隔的定义,有点绕嘴),也就意味着集合中的其他点间隔都不会小于1,按照间隔的定义,满足这些条件就相当于让下面的式子总是成立:y i[(w·x i)+b]≥1 (i=1,2,…,l) (l是总的样本数)但我们常常习惯让式子的值和0比较,因而经常用变换过的形式:y i[(w·x i)+b]-1≥0 (i=1,2,…,l) (l是总的样本数)因此我们的两类分类问题也被我们转化成了它的数学形式,一个带约束的最小值的问题:转自:/zhenandaci/archive/2009/02/13/254578.htmlSVM入门(五)线性分类器的求解——问题的描述Part2从最一般的定义上说,一个求最小值的问题就是一个优化问题(也叫寻优问题,更文绉绉的叫法是规划——Programming),它同样由两部分组成,目标函数和约束条件,可以用下面的式子表示:(式1)约束条件用函数c来表示,就是constrain的意思啦。

你可以看出一共有p+q个约束条件,其中p个是不等式约束,q个等式约束。

关于这个式子可以这样来理解:式中的x是自变量,但不限定它的维数必须为1(视乎你解决的问题空间维数,对我们的文本分类来说,那可是成千上万啊)。

要求f(x)在哪一点上取得最小值(反倒不太关心这个最小值到底是多少,关键是哪一点),但不是在整个空间里找,而是在约束条件所划定的一个有限的空间里找,这个有限的空间就是优化理论里所说的可行域。

注意可行域中的每一个点都要求满足所有p+q个条件,而不是满足其中一条或几条就可以(切记,要满足每个约束),同时可行域边界上的点有一个额外好的特性,它们可以使不等式约束取得等号!而边界内的点不行。

关于可行域还有个概念不得不提,那就是凸集,凸集是指有这么一个点的集合,其中任取两个点连一条直线,这条线上的点仍然在这个集合内部,因此说“凸”是很形象的(一个反例是,二维平面上,一个月牙形的区域就不是凸集,你随便就可以找到两个点违反了刚才的规定)。

回头再来看我们线性分类器问题的描述,可以看出更多的东西。

(式2)在这个问题中,自变量就是w,而目标函数是w的二次函数,所有的约束条件都是w的线性函数(哎,千万不要把x i当成变量,它代表样本,是已知的),这种规划问题有个很有名气的称呼——二次规划(Quadratic Programming,QP),而且可以更进一步的说,由于它的可行域是一个凸集,因此它是一个凸二次规划。

一下子提了这么多术语,实在不是为了让大家以后能向别人炫耀学识的渊博,这其实是我们继续下去的一个重要前提,因为在动手求一个问题的解之前(好吧,我承认,是动计算机求……),我们必须先问自己:这个问题是不是有解?如果有解,是否能找到?对于一般意义上的规划问题,两个问题的答案都是不一定,但凸二次规划让人喜欢的地方就在于,它有解(教科书里面为了严谨,常常加限定成分,说它有全局最优解,由于我们想找的本来就是全局最优的解,所以不加也罢),而且可以找到!(当然,依据你使用的算法不同,找到这个解的速度,行话叫收敛速度,会有所不同)对比(式2)和(式1)还可以发现,我们的线性分类器问题只有不等式约束,因此形式上看似乎比一般意义上的规划问题要简单,但解起来却并非如此。

因为我们实际上并不知道该怎么解一个带约束的优化问题。

如果你仔细回忆一下高等数学的知识,会记得我们可以轻松的解一个不带任何约束的优化问题(实际上就是当年背得烂熟的函数求极值嘛,求导再找0点呗,谁不会啊?笑),我们甚至还会解一个只带等式约束的优化问题,也是背得烂熟的,求条件极值,记得么,通过添加拉格朗日乘子,构造拉格朗日函数,来把这个问题转化为无约束的优化问题云云(如果你一时没想通,我提醒一下,构造出的拉格朗日函数就是转化之后的问题形式,它显然没有带任何条件)。

读者问:如果只带等式约束的问题可以转化为无约束的问题而得以求解,那么可不可以把带不等式约束的问题向只带等式约束的问题转化一下而得以求解呢?聪明,可以,实际上我们也正是这么做的。

下一节就来说说如何做这个转化,一旦转化完成,求解对任何学过高等数学的人来说,都是小菜一碟啦。

转自:/zhenandaci/archive/2009/02/14/254630.htmlSVM入门(六)线性分类器的求解——问题的转化,直观角度让我再一次比较完整的重复一下我们要解决的问题:我们有属于两个类别的样本点(并不限定这些点在二维空间中)若干,如图,圆形的样本点定为正样本(连带着,我们可以把正样本所属的类叫做正类),方形的点定为负例。

我们想求得这样一个线性函数(在n维空间中的线性函数):g(x)=wx+b使得所有属于正类的点x+代入以后有g(x+)≥1,而所有属于负类的点x-代入后有g(x-)≤-1(之所以总跟1比较,无论正一还是负一,都是因为我们固定了间隔为1,注意间隔和几何间隔的区别)。

代入g(x)后的值如果在1和-1之间,我们就拒绝判断。

求这样的g(x)的过程就是求w(一个n维向量)和b(一个实数)两个参数的过程(但实际上只需要求w,求得以后找某些样本点代入就可以求得b)。

因此在求g(x)的时候,w 才是变量。

你肯定能看出来,一旦求出了w(也就求出了b),那么中间的直线H就知道了(因为它就是wx+b=0嘛,哈哈),那么H1和H2也就知道了(因为三者是平行的,而且相隔的距离还是||w||决定的)。

那么w是谁决定的?显然是你给的样本决定的,一旦你在空间中给出了那些个样本点,三条直线的位置实际上就唯一确定了(因为我们求的是最优的那三条,当然是唯一的),我们解优化问题的过程也只不过是把这个确定了的东西算出来而已。

样本确定了w,用数学的语言描述,就是w可以表示为样本的某种组合:w=α1x1+α2x2+…+αn x n式子中的αi是一个一个的数(在严格的证明过程中,这些α被称为拉格朗日乘子),而x i 是样本点,因而是向量,n就是总样本点的个数。

为了方便描述,以下开始严格区别数字与向量的乘积和向量间的乘积,我会用α1x1表示数字和向量的乘积,而用<x1,x2>表示向量x1,x2的内积(也叫点积,注意与向量叉积的区别)。

因此g(x)的表达式严格的形式应该是:g(x)=<w,x>+b但是上面的式子还不够好,你回头看看图中正样本和负样本的位置,想像一下,我不动所有点的位置,而只是把其中一个正样本点定为负样本点(也就是把一个点的形状从圆形变为方形),结果怎么样?三条直线都必须移动(因为对这三条直线的要求是必须把方形和圆形的点正确分开)!这说明w不仅跟样本点的位置有关,还跟样本的类别有关(也就是和样本的“标签”有关)。

因此用下面这个式子表示才算完整:w=α1y1x1+α2y2x2+…+αn y n x n(式1)其中的y i就是第i个样本的标签,它等于1或者-1。

其实以上式子的那一堆拉格朗日乘子中,只有很少的一部分不等于0(不等于0才对w起决定作用),这部分不等于0的拉格朗日乘子后面所乘的样本点,其实都落在H1和H2上,也正是这部分样本(而不需要全部样本)唯一的确定了分类函数,当然,更严格的说,这些样本的一部分就可以确定,因为例如确定一条直线,只需要两个点就可以,即便有三五个都落在上面,我们也不是全都需要。

这部分我们真正需要的样本点,就叫做支持(撑)向量!(名字还挺形象吧,他们“撑”起了分界线)式子也可以用求和符号简写一下:因此原来的g(x)表达式可以写为:注意式子中x才是变量,也就是你要分类哪篇文档,就把该文档的向量表示代入到x的位置,而所有的x i统统都是已知的样本。

还注意到式子中只有x i和x是向量,因此一部分可以从内积符号中拿出来,得到g(x)的式子为:发现了什么?w不见啦!从求w变成了求α。

但肯定有人会说,这并没有把原问题简化呀。

嘿嘿,其实简化了,只不过在你看不见的地方,以这样的形式描述问题以后,我们的优化问题少了很大一部分不等式约束(记得这是我们解不了极值问题的万恶之源)。

相关文档
最新文档