Python机器学习编程与实践 课件 6 支持向量机SVM_第1页
Python机器学习编程与实践 课件 6 支持向量机SVM_第2页
Python机器学习编程与实践 课件 6 支持向量机SVM_第3页
Python机器学习编程与实践 课件 6 支持向量机SVM_第4页
Python机器学习编程与实践 课件 6 支持向量机SVM_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

机器学习算法

——SVM支持向量机9.1支持向量机的概念

橘生淮南则为橘,生于淮北则为枳。——《晏子春秋》支持向量机(SupportVectorMachines,SVM)是由感知机发展而来的机器学习算法。属于监督学习算法。支持向量机具有完备的理论基础,算法通过对样本进行求解,得到最大边距的超平面,并将其作为分类决策边界。SVM是Cortes和Vapnik于1995年首先提出的,在解决小样本、线性/非线性及高维模式识别领域表现出特有的优势。支持向量机的优点是原理简单,但是具有坚实的数学理论基础。广泛应用于分类、回归和模式识别等机器学习算法的应用中。支持向量机是一种研究小样本机器学习模型的统计学习方法。目标是在有限的数据信息情况下,渐进求解得到最优结果。核心思想是假设一个函数集合,其中每个函数都能取得最小的误差,然后从中选择误差小的函数作为最优函数。原理是寻找一个保证分类要求的最优分类超平面,策略是使超平面两侧的间隔最大。模型建立过程可以转换为一个凸二次规划问题的求解。SVM很容易处理线性可分问题,对于非线性问题处理的方法是选择一个核函数,然后通过核函数将据映射到高维映射空间,最终在高维空间中构造出最优分类超平面,从而把原始平面上不好分的非线性数据分开。支持向量机的优点有:小样本:并不是需要很少的样本,而是与问题的复杂程度比起来,需要的样本数量相对少。在高维空间中有效:样本的维度很高的情况下也可以处理。非线性:SVM擅长处理非线性问题,主要通过核函数和惩罚变量完成。理论基础简单,分类效果较好。通用性好,可以自定义核函数支持向量机也具有一些缺点:例如:计算复杂度高,对大规模数据的训练困难;不支持多分类,多分类问题需要间接实现;对不同的核函数敏感。9.1.1线性判别分析LDA线性判别(lineardiscriminant)是一种经典的线性学习方法,最早由Fisher在1936年提出,亦称Fisher线性判别。线性判别分析LDA是对Fisher线性判别方法的归纳线性判别的思想:对于给定的训练样本集,设法将样本投影到一条直线上,使得同类别样本的投影点尽可能接近,异类样本的投影点尽可能远。在对新样本进行分类时将其投影到该直线上。根据投影位置来确定其类别。线性判别(lineardiscriminant)是指由x的各个分量线性组合而成的函数其中,W是权重向量,W、X都为n维向量;实数W0为偏移量线性判别问题的决策规则为:若g(x)>0,则判定x属于C1类;若g(x)<0,则判定x属于C2类若g(x)=0,则判定x属于任何一类或者拒绝判断例如对鸢尾花数据集,使用花瓣长度和花萼长度进行分类。拟合出线性判别函数,根据数据的分布,可以得到一个直线方程。山鸢尾花在直线左下区域,g(x)<0,分类标签为-1;其他鸢尾花分布在直线右上区域,g(x)>=0,分类标签为+1。分类器可以表示为:整理后,

f(x)=f(x1,x2)=x1+x2−3.

这个判别式就是鸢尾花分类函数的核心。在实际应用当中,f(x)的形式有很多种。可以假设特征向量为

X=(x1,x2,⋯,

xn),则线性分类器的一般形式可以写成:f(x1,x2,⋯,xn)=a1*x1+a1*x2+⋯+an*xn+b

分类器中最关键的是待计算的参数ai和b。理想的参数可以得到好的分类直线,这需要不断训练分类器。算法需要不断根据误差来评估分类器、调整参数,从而提高准确率。9.1.2间隔与支持向量

将训练样本分开的线性分类器有时有很多。三条分隔线都可以做到将两种鸢尾花分类,究竟选哪条线作为分类器呢?最佳直线是位于中间的直线分类器,它具有更好的泛化能力。直观现象:一个样本点距离分类线越远,分类正确的可能性就越大。因此,希望训练得到的分类直线既能正确分类,也离每个样本点都尽量远。同样,最优的分类超平面也应该是距离每个样本点都尽量远。事实上,我们只需要留意离分类线最近的那些点。最邻近分类线(或分类超平面)的那些向量称为支持向量(supportvector),这也是支持向量机概念的来源。支持向量到分隔线(分类面)的距离称为间隔(margin)。间隔最大的分类器为最优的分类器。具有最强的抗干扰性,对于新的样本出错率更少。支持向量是最接近超平面的那些向量,是定义最优分割超平面的样本,是对求解分类问题最具有重要性的数据点,当然也是最难分类的训练数据。9.1.3超平面

超平面(HyperPlane):在二维空间中,分类函数为一条直线。当线性函数投射到一维空间中,就是一个判别点。如果将线性判别函数扩大到三维空间,则相当于一个判别平面;如果是更高维空间,则称为超平面(HyperPlane)。形成超平面的函数一般都是非线性的复杂函数。将低维的特征映射到高维空间的函数称为核函数。核函数的主要作用是从低维空间到高维空间的映射,把低维空间中不可分的两类变成高维线性可分,可用超平面划分。常用的核函数包括多项式核函数、RBF核函数、Sigmoid核函数,还可以根据实际需要自定义核函数。在高维空间中,将分类样本进行划分的平面称为分类超平面(separatinghyperplane)不同维度下查看到的分类平面效果输入数据集make_blobs

二维平面无法对数据线性划分将数据投射到三维空间获得划分平面划分平面的另一个角度平面投射到二维空间的划分结果9.1.4感知器如何选择较好的决策面g(x)代表生成分类函数。g(x)>0判为正类;g(x)<0判为负类;g(x)=0时任意,也是分类超平面或分类决策面。虚线是由决策面的方向和离决策面最近的样本位置决定的。两条平行虚线正中间的就是最优决策面。两条虚线间的垂直距离就是最优决策面的分类间隔。2.感知器(Perceptron)感知器(Perceptron)是一种二元线性分类模型,1957年由FrankRosenblatt基于神经元模型提出。是一种能够自我迭代、试错,类似于人类学习过程的算法。感知机算法的初衷是为了‘教’感知机识别图像。感知器从样本中学习判别函数,所有类别的样本放在一起学习。感知器通过调整权重的学习达到正确分类的效果,是神经网络和SVM的基础,可以把感知器看做一个处理二分类问题的算法。线性分类或线性回归问题是可以用感知器来解决。感知器的训练过程示意可以看出感知器算法是错误驱动的,被正确分类的样本不产生误差,对模型优化没有贡献。模型优化的目标就是最小化误差函数——是一种称为准则函数的误差衡量指标。感知器的训练过程示意可见,感知器使用被错分的样本来调整分类器参数。感知器算法对于线性不可分的数据是不收敛的。对于线性可分的数据,可以在有限步内找到解向量。收敛速度取决于权向量的初始值和学习率。学习率是每次更新参数的程度大小。学习率太大会导致震荡,太小则会使收敛过程很慢。自适应学习率、当前迭代加入上一次的梯度进行加速。学习速率究竟设置多大?如何设置调整,这都需要是具体任务决定。可以使用SKlearn中linear_model模块的Perceptron类来实现线性感知机,格式如下:Perceptron(penalty=None,alpha=0.0001,fit_intercept=True,max_iter=1000,tol=0.001,shuffle=True,verbose=0,eta0=1.0,n_jobs=None,random_state=0,early_stopping=False,validation_fraction=0.1,n_iter_no_change=5,class_weight=None,warm_start=False)主要参数:Penalty:惩罚项,可以帮助产生最大间隔。可能的取值为None、‘l2’(L2正则)、‘l1’(L1正则)或‘elasticnet’(混合正则),缺省值为None。max_iter:最大迭代次数,默认为1000。eta0:学习率,默认为1.0。属性:coef_:权值,即参数w。intercept_:偏置,即参数b。n_iter_:迭代次数

。classes_:类别标签集合。t_:训练过程中,权重w参数更新的次数。【例】使用感知器进行信用分类问题描述:使用SKlearn中的Perceptron对信用卡数据集进行分类,并对原始样本和分类结果进行绘图显示。数据集为credit-overdue.csv,主要步骤如下:(1)读取数据集。(2)使用线性感知器进行训练,得到分类器参数。(3)绘制样本的散点图,绘制分类线(或分类平面)。感知器对水果数据集的分类结果6.2支持向量机的参数

优化求解可以把求支持向量机参数问题转化为求最小值的最优化问题。9.2.1优化求解9.2.2核函数

核函数有很多种,有平移不变的、依赖距离的等。理论上来说,满足Mercer定理的函数都可以作为核函数。9.2.3SVM应用案例基于SVM的算法有多种,通常把基于SVM的分类算法称为SVC(SupportVectorClassification);把基于SVM的回归算法称为SVR(SupportVectorRegression)。基于SVM的SVC分类模块格式如下:sklearn.svm.SVC(C=1.0,kernel=’rbf’,degree=3,gamma=’auto_deprecated’,coef0=0.0,shrinking=True,probability=False,tol=0.001,cache_size=200,class_weight=None,verbose=False,max_iter=-1,decision_function_shape=’ovr’,random_state=None)[source]主要参数:C:C-SVC的惩罚参数,默认值是1.0。C越大,对误分类的惩罚增大,训练集上准确率高,泛化能力弱。C值越小,对误分类的惩罚减小,容错能力强,泛化能力强。kernel:核函数,默认是rbf,可以是‘linear’(线性核)、‘poly’(多项式核)、‘rbf’(径向基核)、‘sigmoid’(s型函数核)、‘precomputed’(提前计算好的核矩阵)等。degree:只对多项式核函数情况有用,多项式核函数的维度,默认是3。tol:停止训练的误差值大小,默认为1e-3。max_iter:最大迭代次数。如果取值为-1,则为不限制次数。属性:n_support_:各类中的支持向量的个数。support_:各类支持向量所在的下标位置。support_vectors_:各类中的支持向量。coef_:分给各个特征的权重,只在线性核函数的情况下有用。【例】SVC对随机数据集进行训练。【例】使用SVC进行数据分类预测。【例】SVM能否解决异或问题?SVM解决异或问题:问题描述:对于一个异或问题,假设有四个样本,特征坐标分别为(0,0)、(1,1)、(1,0)、(0,1),标签则依次为0、0、1、1。使用SVC模型建立分类器,并预测数据点(0.3,0.8)的类别。将SVM分类器的核函数修改为非线性的,例如使用高斯核函数。SVC模型参数rbf使用的就是高斯核函数。能够成功预测:9.3本章实验

一.SVM解决非线性分类问题。二.使用SVM进行信用卡欺诈检测。问题描述:本项目来自于kaggle平台的信用卡项目。kaggle平台是一个著名的数据分析挖掘项目平台,开发者可以参加平台上的项目去发掘数据的潜在价值,或者测试现有算法的性能。信用卡欺诈检测项目背景——金融风险预测评估在现代经济生活中扮演至关重要的地位,本实验数据来自基于Kaggle的GiveMeSomeCredit项目(地址:/c/GiveMeSomeCredit)。项目收集了消费者的人口特征、信用记录、交易记录等大量数据。通过数据分析建立信用模型,可以用于创建信用卡评

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论