机器学习(五):SVM支持向量机_Python
来源:互联网 发布:vb.net和c#区别 编辑:程序博客网 时间:2024/06/08 08:14
机器学习
四、SVM支持向量机
- github地址:https://github.com/lawlite19/MachineLearning_Python
- 由于公式使用的是LaTex,解析使用的google的Chart API,所以显示有问题,可以移步github(可以翻墙就不用了)
1、代价函数
- 在逻辑回归中,我们的代价为:
,
其中:, - 如图所示,如果
y=1
,cost
代价函数如图所示
我们想让,即z>>0
,这样的话cost
代价函数才会趋于最小(这是我们想要的),所以用途中红色的函数代替逻辑回归中的cost - 当
y=0
时同样,用代替 - 最终得到的代价函数为:
最后我们想要 - 之前我们逻辑回归中的代价函数为:
可以认为这里的,只是表达形式问题,这里C
的值越大,SVM的决策边界的margin
也越大,下面会说明
2、Large Margin
- 如下图所示,SVM分类会使用最大的
margin
将其分开 先说一下向量内积
- ,
- 表示
u
的欧几里得范数(欧式范数), 向量V
在向量u
上的投影的长度记为p
,则:向量内积:
根据向量夹角公式推导一下即可,
前面说过,当
C
越大时,margin
也就越大,我们的目的是最小化代价函数J(θ)
,当margin
最大时,C
的乘积项要很小,所以近似为:
,
我们最后的目的就是求使代价最小的θ
- 由
可以得到:
,p
即为x
在θ
上的投影 - 如下图所示,假设决策边界如图,找其中的一个点,到
θ
上的投影为p
,则或者,若是p
很小,则需要很大,这与我们要求的θ
使最小相违背,所以最后求的是large margin
3、SVM Kernel(核函数)
- 对于线性可分的问题,使用线性核函数即可
- 对于线性不可分的问题,在逻辑回归中,我们是将
feature
映射为使用多项式的形式,SVM
中也有多项式核函数,但是更常用的是高斯核函数,也称为RBF核 - 高斯核函数为:
假设如图几个点,
令:
.
.
. - 可以看出,若是
x
与距离较近,==》,(即相似度较大)
若是x
与距离较远,==》,(即相似度较低) 高斯核函数的
σ
越小,f
下降的越快
如何选择初始的
- 训练集:
- 选择:
- 对于给出的
x
,计算f
,令:所以: - 最小化
J
求出θ
, - 如果,==》预测
y=1
4、使用scikit-learn
中的SVM
模型代码
- 全部代码
- 线性可分的,指定核函数为
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为核函数的系数,值越大拟合的越好
5、运行结果
- 线性可分的决策边界:
- 线性不可分的决策边界:
1 0
- 机器学习(五):SVM支持向量机_Python
- 机器学习算法(五):支持向量机(SVM)
- 机器学习笔记(五) 支持向量机SVM
- 机器学习---支持向量机(SVM)
- 机器学习:支持向量机(SVM)
- 机器学习-支持向量机(SVM)
- 机器学习(支持向量机-SVM)
- 机器学习笔记(五)之详解SVM支持向量机
- 【机器学习】支持向量机SVM学习(1)
- 【机器学习】支持向量机SVM学习(2)
- 机器学习 支持向量机(SVM)
- Stanford机器学习--- 支持向量机SVM
- 机器学习之支持向量机(svm)
- 【机器学习】支持向量机SVM
- 机器学习:支持向量机(SVM)
- 机器学习--SVM支持向量机
- 机器学习之支持向量机(SVM)
- Stanford机器学习---支持向量机SVM
- 智慧珠海的主界面左滑菜单及ViewPager和RadioButton的使用
- jni在Android studio中的配置和使用(二)
- Eclipse workspace包含哪些工程的配置文件在什么地方?
- Android复习之旅--ContentProvider
- 如何利用SQL Server With As递归获取层级关系数据
- 机器学习(五):SVM支持向量机_Python
- CodeForces 37d
- TypeError: view must be a callable or a list/tuple in the case of include().
- HDU 1664 Different Digits (数论 -- 鸽笼原理 + BFS搜索 + 余数判重)
- 常见对象_把int数组拼接成字符串的案例改进版
- ubuntu 源码安装java
- FCN 简单梳理
- mybatis 插入递增主键——abc201611090001 abc201611090002
- log信息输出到文件