动手写机器学习算法:SVM支持向量机(附代码)

2017 年 12 月 5 日 七月在线实验室

我们在学习过程中最容易犯的一个错误就是:看的多动手的少。今天七月在线就和你一起用python实现SVM支持向量机算法~


代价函数

在逻辑回归中,我们的代价为:

其中:

如图所示,如果y=1,cost代价函数如图所示

我们想让,即z>>0,这样的话cost代价函数才会趋于最小(这是我们想要的),所以用途中红色的函数代替逻辑回归中的cost

当y=0时同样,用代替 

最终得到的代价函数为:

最后我们想要

之前我们逻辑回归中的代价函数为:

可以认为这里的,只是表达形式问题,这里C的值越大,SVM的决策边界的margin也越大,下面会说明

 

Large Margin

如下图所示,SVM分类会使用最大的margin将其分开

先说一下向量内积

表示u的欧几里得范数(欧式范数),

向量V在向量u上的投影的长度记为p,则:向量内积:

根据向量夹角公式推导一下即可,

前面说过,当C越大时,margin也就越大,我们的目的是最小化代价函数J(θ),当margin最大时,C的乘积项

要很小,所以近似为:

我们最后的目的就是求使代价最小的θ

可以得到:

p即为x在θ上的投影

如下图所示,假设决策边界如图,找其中的一个点,到θ上的投影为p,则或者,若是p很小,则需要很大,这与我们要求的θ使最小相违背,所以最后求的是large margin


SVM Kernel(核函数)

对于线性可分的问题,使用线性核函数即可。

对于线性不可分的问题,在逻辑回归中,我们是将feature映射为使用多项式的形式,SVM中也有多项式核函数,但是更常用的是高斯核函数,也称为RBF核

高斯核函数为:

假设如图几个点, 

 令

可以看出,若是x与距离较近,==》,(即相似度较大),若是x与距离较远,==》,(即相似度较低)

高斯核函数的σ越小,f下降的越快

如何选择初始的

训练集:

选择:

对于给出的x,计算f,令:

所以:

最小化J求出θ,

如果,==》预测y=1


使用scikit-learn中的SVM模型代码

全部代码

https://github.com/lawlite19/MachineLearning_Python/blob/master/SVM/SVM_scikit-learn.py


线性可分的,指定核函数为linear:

'''data1——线性分类'''

data1 = spio.loadmat('data1.mat')

X = data1['X']

y = data1['y']

y = np.ravel(y)

plot_data(X,y)

model = svm.SVC(C=1.0,kernel='linear').fit(X,y) # 指定核函数为线性核函数


非线性可分的,默认核函数为rbf

'''data2——非线性分类'''

data2 = spio.loadmat('data2.mat')

X = data2['X']

y = data2['y']

y = np.ravel(y)

plt = plot_data(X,y)

plt.show()

model = svm.SVC(gamma=100).fit(X,y)     # gamma为核函数的系数,值越大拟合的越好

运行结果

线性可分的决策边界:

线性不可分的决策边界:

(未完待续)

作者:lawlite19

https://github.com/lawlite19/MachineLearning_Python#

相关文章:

用Python实现机器学习算法:线性回归

用Python实现机器学习算法:逻辑回归
用Python实现机器学习算法:BP神经网络




点击下方“阅读全文”,即刻学Python

登录查看更多
12

相关内容

在机器学习中,支持向量机(SVM,也称为支持向量网络)是带有相关学习算法的监督学习模型,该算法分析用于分类和回归分析的数据。支持向量机(SVM)算法是一种流行的机器学习工具,可为分类和回归问题提供解决方案。给定一组训练示例,每个训练示例都标记为属于两个类别中的一个或另一个,则SVM训练算法会构建一个模型,该模型将新示例分配给一个类别或另一个类别,使其成为非概率二进制线性分类器(尽管方法存在诸如Platt缩放的问题,以便在概率分类设置中使用SVM)。SVM模型是将示例表示为空间中的点,并进行了映射,以使各个类别的示例被尽可能宽的明显间隙分开。然后,将新示例映射到相同的空间,并根据它们落入的间隙的侧面来预测属于一个类别。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
最新《自动微分手册》77页pdf
专知会员服务
99+阅读 · 2020年6月6日
专知会员服务
139+阅读 · 2020年5月19日
Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
129+阅读 · 2020年3月15日
《深度学习》圣经花书的数学推导、原理与Python代码实现
【经典书】精通机器学习特征工程,中文版,178页pdf
专知会员服务
354+阅读 · 2020年2月15日
【新书】Pro 机器学习算法Python实现,379页pdf
专知会员服务
198+阅读 · 2020年2月11日
从示例中理解SVM算法(附代码)
论智
9+阅读 · 2018年5月10日
免费|机器学习算法Python实现
全球人工智能
5+阅读 · 2018年1月2日
动手写机器学习算法:异常检测 Anomaly Detection
七月在线实验室
11+阅读 · 2017年12月8日
动手写机器学习算法:K-Means聚类算法
七月在线实验室
5+阅读 · 2017年12月6日
【直观详解】支持向量机SVM
机器学习研究会
18+阅读 · 2017年11月8日
支持向量机分类实战
全球人工智能
4+阅读 · 2017年10月18日
机器学习(16)之支持向量机原理(二)软间隔最大化
机器学习算法与Python学习
6+阅读 · 2017年9月8日
机器学习(15)之支持向量机原理(一)线性支持向量机
机器学习算法与Python学习
6+阅读 · 2017年9月1日
机器学习(7)之感知机python实现
机器学习算法与Python学习
4+阅读 · 2017年7月23日
Arxiv
3+阅读 · 2017年7月6日
VIP会员
相关VIP内容
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
最新《自动微分手册》77页pdf
专知会员服务
99+阅读 · 2020年6月6日
专知会员服务
139+阅读 · 2020年5月19日
Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
129+阅读 · 2020年3月15日
《深度学习》圣经花书的数学推导、原理与Python代码实现
【经典书】精通机器学习特征工程,中文版,178页pdf
专知会员服务
354+阅读 · 2020年2月15日
【新书】Pro 机器学习算法Python实现,379页pdf
专知会员服务
198+阅读 · 2020年2月11日
相关资讯
从示例中理解SVM算法(附代码)
论智
9+阅读 · 2018年5月10日
免费|机器学习算法Python实现
全球人工智能
5+阅读 · 2018年1月2日
动手写机器学习算法:异常检测 Anomaly Detection
七月在线实验室
11+阅读 · 2017年12月8日
动手写机器学习算法:K-Means聚类算法
七月在线实验室
5+阅读 · 2017年12月6日
【直观详解】支持向量机SVM
机器学习研究会
18+阅读 · 2017年11月8日
支持向量机分类实战
全球人工智能
4+阅读 · 2017年10月18日
机器学习(16)之支持向量机原理(二)软间隔最大化
机器学习算法与Python学习
6+阅读 · 2017年9月8日
机器学习(15)之支持向量机原理(一)线性支持向量机
机器学习算法与Python学习
6+阅读 · 2017年9月1日
机器学习(7)之感知机python实现
机器学习算法与Python学习
4+阅读 · 2017年7月23日
Top
微信扫码咨询专知VIP会员