• 机器学习之支持向量机(SVM)


    SVM数学知识具体参考:

    https://blog.csdn.net/zhangping1987/article/details/21931663

    数学知识补充

    对于线性可分的超平面

    既然能线性可分,那么就有超平面(向量化表示)将这数据集分开,使得一侧是“+1”类,另一侧是“-1类”。

    第一个知识点:已知超平面和数据集,哪个点离这个超平面最近,答案:哪一个点使得最小,哪一点离这个超平面最近

    第二个知识点:已知超平面和点x,那么这个点到这个超平面的距离为:,向量表示法为

    对于SVM的描述

    参考《统计学习方法》以及https://www.cnblogs.com/pinard/p/6097604.html

    SVM分为线性可分支持向量机,线性向量机和非线性支持向量机。当训练数据可分时,通过硬间隔最大化,学习一个线性的分类器,即线性可分支持向量机,又称为硬间隔支持向量机,当训练数据近似线性可分时,通过软间隔最大化,也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机,当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。

    当输入空间为欧式空间或离散集合、特征空间为希尔伯特空间时,核函数表示将输入从输入空间映射到特征空间得到的特征向量之间的内积,通过使用核函数可以学习非线性支持向量机,等价于隐式地在高维的特征空间中学习线性支持向量机,这样的方法称为核技巧。

    1)线性可分支持向量机又称为硬间隔支持向量机(一般处理的是二分类问题,)它处理的是数据集线性可分的情况,既然线性可分则必然存在超平面能够把数据分为正负两类,但是这种超平面会有很多,这就需要考虑选取出能使得训练出来的模型泛化能力最强的超平面。也就是说对于误分类点的容错性更好。这时又需要考虑哪些点最容易被误分类,显然离超平面越近的点越容易被误分类,如果离超平面最近的点都能被正确分类那么远的点就必然会被正确分类。因此所选的超平面应该尽量使得数据集离超平面的最小距离最大化,这样模型才拥有最好的泛化能力。离超平面最小的距离为故则有:

    最终表示为

    这是硬间隔支持向量机用以代表线性可分的支持向量机模型。其中y为类别标签。离超平面最近的正负类中的这些点被称为支持向量。分离超平面为wTx+b=0,和超平面平行的保持一定的函数距离的这两个超平面对应的向量,我们定义为支持向量,支持向量所在的超平面定义为wTx+b=-1和wTx+b=1.注意这里为什么是+-1?实际上,支持向量只是到中间那个平面距离最近的点。wx+b=y,其中y只用比非支持向量的y要小就行了。如果把超平面wx+b=y这个式子的每一项除以y,那么虽然值都变了,但平面还是这个平面,也就是说有一系列的w和b表示这个平面,那我们需要固定某一个值。在svm的求解过程中,需固定y=1,然后转化成二次规划去求解。就是说,直接固定支持向量到分类超平面的距离为1。因为如果不是+-1的话,假设为某个数r,左右两边同除以r,右边就为+-1了,然后左边的结果用w和b替代。所以到底是正负几并不重要。

    2)线性支持向量机,又称为软间隔支持向量机

    对于数据本是线性可分的但是存在异常点的情况,使得硬间隔支持向量机不能很好的确定划分数据的超平面,这时应该用软间隔支持向量机。

    3)非线性支持向量机

    1.核函数与常用的核函数

    我们遇到线性不可分的样例时,常用做法是把样例特征映射到高维空间中去(如多项式回归)但是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到令人恐怖的。此时,核函数就体现出它的价值了,核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数好在它在低维上进行计算,而将实质上的分类效果(利用了内积)表现在了高维上,这样避免了直接在高维空间中的复杂计算,真正解决了SVM线性不可分的问题。即为把输入空间中的内积变换成了特征空间中的内积,把转换成了核函数。

    2,常用的核函数(也是sklearn中可选的核函数)

    第一、线性核函数。第二、多项式核函数。第三、高斯核函数在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是非线性分类SVM最主流的核函数。libsvm默认的核函数就是它。第四、Sigmoid核函数

  • 相关阅读:
    等额本息还款法、等额本金
    数学集合:N Z Q R C
    Xshell配置SSH免密码登录
    【转】Microsoft .Net Remoting之Marshal、Disconnect与生命周期以及跟踪服务
    【转】Microsoft .Net Remoting 之.Net Remoting基础篇
    【转】C#调用WebService实例和开发
    【MYSQL】存储过程示例
    【转】【C++】C++ 中的线程、锁和条件变量
    【C++】线程_beginthreadex参数说明
    【转】【c++】指针参数是如何传递内存的
  • 原文地址:https://www.cnblogs.com/dyl222/p/11068620.html
Copyright © 2020-2023  润新知