机器学习实战(SVM)
目录
SVM原理概述
Sklearn实现SVM
线性SVM分类
非线性SVM分类
使用多项式特征来增加特征
内核的使用
SVM原理概述
这里不对SVM原理进行详细推导,只对SVM进行简单介绍
SVM要解决的就是最优化问题,最优化基本型为:
软间隔就是允许支持向量机在一些样本上出错。软间隔的基本为:
三种常用的替代损失函数:
hinge损失 | |
指数损失(exponential loss) | |
对率损失(logistic loss) |
对偶问题的引入是为了能够更加高效的求解这个最优化问题。
核函数的引入:低维上的数据难以区分,所以上升到高维上进行分解。如果原始空间是有限维,即属性数有限,那么一定存在一个高维特征空间使得样本可分。
核函数要干的事情就是将低维上的数据映射到高维上。
常见的核函数有:
名称 | 表达式 | 参数 |
---|---|---|
线性核 | ||
多项式核 | d>=1为多项式的次数 | |
高斯核 | >0为高斯核的带宽(width) | |
拉普拉斯核 | ||
Sigmoid核 | tanh为双曲正切函数, |
这里没对SVM具体原理进行说明,详细可以了解B站大神:机器学习SVM
Sklearn实现SVM
线性SVM分类
import numpy as np
from sklearn import datasets
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC
iris = datasets.load_iris()
x=iris['data'][:,(2,3)]
y=(iris['target']==2).astype(np.float64)
svm_clf=Pipeline([('scaler',StandardScaler()),('linear_svc',LinearSVC(C=1,loss='hinge'))])
svm_clf.fit(x,y)
非线性SVM分类
虽然在很多情况下,线性SVM分类器是有效的,并且通常出人意料的好,但是有时候数据集不是线性可分的。处理非线性数据集的方法之一就是添加更多特征,比如多项式特征。
使用多项式特征来增加特征
from sklearn.datasets import make_moons
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
x,y=make_moons(n_samples=100,noise=0.15)
polynomial_svm_clf=Pipeline([('poly_features',PolynomialFeatures(degree=3)),('scaler',StandardScaler()),('svm_clf',LinearSVC(C=10,loss='hinge'))])
polynomial_svm_clf.fit(x,y)
内核的使用
添加多项式特征实现起来很简单,并且对于所有的机器学习算法(不只是SVM)都非常有效。但问题是,如果多项式太低阶,则处理不了非常复杂的数据集。而高阶则会创造出大量的特征,导致模型变得太慢
幸运的是在使用SVM时,有一个魔术般的数学技巧可以应用,这就是核技巧。它产生的结果跟添加了很多多项式特征一样,但实际上并不需要真正的添加。因为实际上并没有添加任何特征,所以不存在数量爆炸的组合特征。这个技巧由SVC类来实现。
#多项式内核
from sklearn.svm import SVC
#coef0用来控制模型收到高阶多项式还是低阶多项式影响的程度
poly_kernel_svm_clf=Pipeline([('scaler',StandardScaler()),('svm_clf',SVC(kernel='poly',coef0=1,C=5))])
poly_kernel_svm_clf.fit(x,y)
#高斯RBF内核
#gamma参数就像是一个正则化超参数:模型过拟合,就降低它的值,如果欠拟合则提升它的值
rbf_kernel_svm_clf=Pipeline([('scaler',StandardScaler()),('svm_clf',SVC(kernel='rbf',gamma=5,C=0.001))])
rbf_kernel_svm_clf.fit(x,y)
机器学习实战(SVM)相关推荐
- 机器学习实战-SVM算法-27
SVM算法-线性分类 import numpy as np import matplotlib.pyplot as plt from sklearn import svm # 创建40个点 x_dat ...
- 机器学习实战-SVM模型实现人脸识别
文章目录 SVM建模进行人脸识别案例 1.导包 2.加载数据集 3.直接使用SVM模型建模 4.数据可视化 5.网络搜索优化确定最佳性能 6.使用最佳性能SVM建模 7.优化后的数据可视化 8.完整代 ...
- 机器学习实战之SVM
一引言: 支持向量机这部分确实很多,想要真正的去理解它,不仅仅知道理论,还要进行相关的代码编写和测试,二者想和结合,才能更好的帮助我们理解SVM这一非常优秀的分类算法 支持向量机是一种二类分类算法,假 ...
- 机器学习实战(五)支持向量机SVM(Support Vector Machine)
目录 0. 前言 1. 寻找最大间隔 2. 拉格朗日乘子法和KKT条件 3. 松弛变量 4. 带松弛变量的拉格朗日乘子法和KKT条件 5. 序列最小优化SMO(Sequential Minimal O ...
- Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM
原 Python3<机器学习实战>学习笔记(八):支持向量机原理篇之手撕线性SVM 置顶 2017年09月23日 17:50:18 阅读数:12644 转载请注明作者和出处: https: ...
- Python3《机器学习实战》学习笔记(九):支持向量机实战篇之再撕非线性SVM
转载请注明作者和出处: http://blog.csdn.net/c406495762 **机器学习知乎专栏:**https://zhuanlan.zhihu.com/ml-jack **CSDN博客 ...
- 机器学习实战 支持向量机SVM 代码解析
机器学习实战 支持向量机SVM 代码解析 <机器学习实战>用代码实现了算法,理解源代码更有助于我们掌握算法,但是比较适合有一定基础的小伙伴.svm这章代码看起来风轻云淡,实则对于新手来说有 ...
- 转载-机器学习实战之SVM
出处:https://www.cnblogs.com/zy230530/p/6901277.html 机器学习实战之SVM 一引言: 支持向量机这部分确实很多,想要真正的去理解它,不仅仅知道理论,还要 ...
- 机器学习实战之路 —— 5 SVM支持向量机
机器学习实战之路 -- 5 SVM支持向量机 1. 支持向量机概述 1.1 线性分类 1.2 非线性分类 2. 支持向量机分类中的问题 2.1 核函数的选择 2.2 多类分类 2.3 不平衡数据的处理 ...
- 资料分享:送你一本《机器学习实战》电子书!
这两天,各985高校发布了考研初试分数线.从中发现这两年大数据相关专业的分数线暴涨啊.没有400分估计心里都没底啊.可见大数据这个领域有多火爆!而机器学习是我们团队的一个主要方向,新加入的同学通常都是 ...
最新文章
- 关于Presenting view controllers on detached view ...
- Linux编程练习 --多线程3--mutex
- Qt笔记-对connect中第5个进行多组实验(对信号与槽进一步认识)
- mysql 中常用的基本操作
- 一个很不错的开发管理中文个人网站
- 百度360搜狗神马今日头条抖音获客方法解析|昔年优化推广
- 【C++】双边滤波器(bilateral filter)
- php分钟转时间戳,php函数转时间戳
- Debian彻底卸载MySQL
- list集合去重和排序
- 运动会比赛计分系统c语言课程设计,c语言课程设计运动会比赛计分系统(含任务书).doc...
- 《视觉SLAM十四讲-第二版-ch8,OpenCV4报错及解决》
- 《面膜行业网络关注度分析报告》
- 对一名电子信息工程专业应届毕业生的建议【转自没毛菜鸟要成长的一篇博文】
- CSR8670 — 说说蓝牙音频常用的编解码格式
- 【性能测试】如何完全卸载LoadRunner?
- LRS+XAPI教育学习记录(安装lrs,以及用xapi传输数据到lrs)
- OKGoogle开关置灰和无法唤醒问题
- Qt-qss之QSlider滑动条美化
- innoDB可重复读级别是否可以隔离幻行读