基于scikit-learn的SVM实战
写在前面
支持向量机(Support Vector Machine)是一种二类分类模型。他的基本模型是定义在特征空间上的间隔最大的线性分类器,此外如果使用了核技巧之后还可以称为非线性分类器。最近时间比较紧张,就先不整理SVM相关的理论知识点,等以后有时间了再整理(也可以当做复习)。今天这篇主要是以SVM算法的实战(scikit-learn)为主,同时也会提炼几点SVM算法重点知识。
参考:scikit-learn 支持向量机算法库使用小结
1.scikit-learn SVM库简介
scikit-learn中SVM的算法库分为两类,一类是分类的算法库,包括SVC, NuSVC,和LinearSVC 3个类。另一类是回归算法库,包括SVR, NuSVR,和LinearSVR 3个类。相关的类都包裹在sklearn.svm模块之中。
对于SVC, NuSVC,和LinearSVC 3个分类的类,SVC和 NuSVC差不多,区别仅仅在于对损失的度量方式不同,而LinearSVC从名字就可以看出,他是线性分类,也就是不支持各种低维到高维的核函数,仅仅支持线性核函数,对线性不可分的数据不能使用。
同样的,对于SVR, NuSVR,和LinearSVR 3个回归的类, SVR和NuSVR差不多,区别也仅仅在于对损失的度量方式不同。LinearSVR是线性回归,只能使用线性核函数。
我们使用这些类的时候,如果有经验知道数据是线性可以拟合的,那么使用LinearSVC去分类 或者LinearSVR去回归,它们不需要我们去慢慢的调参去选择各种核函数以及对应参数, 速度也快。如果我们对数据分布没有什么经验,一般使用SVC去分类或者SVR去回归,这就需要我们选择核函数以及对核函数调参了。
什么特殊场景需要使用NuSVC分类 和 NuSVR 回归呢?如果我们对训练集训练的错误率或者说支持向量的百分比有要求的时候,可以选择NuSVC分类 和 NuSVR 。它们有一个参数来控制这个百分比。
2. SVM大类算法回顾
2.1 SVM分类算法
原始形式:
其中m为样本个数;w,b为分离超平面的系数;ξi为第i个样本的松弛系数; C为惩罚系数。ϕ(xi)为低维到高维的映射函数。
对偶形式:
对偶形式是通过拉格朗日函数将原始形式表达式对偶化得到的,其中α为拉格朗日系数向量,K(xi,xj)为我们要使用的核函数。
2.2 SVM回归算法
原始形式:
其中m为样本个数;w,b是回归超平面的w∙xi+b=0系数; ξ∨i,ξ∧i为第i个样本的松弛系数; C为惩罚系数;ϵ为损失边界,到超平面距离小于ϵ的训练集的点没有损失。ϕ(xi)为低维到高维的映射函数。
对偶形式:
其中和原始形式不同的α∨,α∧为拉格朗日系数向量。K(xi,xj)为我们要使用的核函数。
3.SVM分类算法库参数小结
4.SVM回归算法库参数小结
5.SVM算法库其他调参要点
上面已经对scikit-learn中类库的参数做了总结,这里对其他的调参要点做一个小结。
1)一般推荐在做训练之前对数据进行归一化,当然测试集中的数据也需要归一化。。
2)在特征数非常多的情况下,或者样本数远小于特征数的时候,使用线性核,效果已经很好,并且只需要选择惩罚系数C即可。
3)在选择核函数时,如果线性拟合不好,一般推荐使用默认的高斯核'rbf'。这时我们主要需要对惩罚系数C和核函数参数γ进行艰苦的调参,通过多轮的交叉验证选择合适的惩罚系数C和核函数参数γ。
4)理论上高斯核不会比线性核差,但是这个理论却建立在要花费更多的时间来调参上。所以实际上能用线性核解决问题我们尽量使用线性核。
6. SVM分类实战
这里就简单的用Kaggle上著名的Titanic生存预测的比赛来实现一下,可能结果准确度不是很高,主要是熟悉一下使用sklearn的SSVM分类器的流程。
这是raw data经过一系列预处理后得到的
划分训练数据和测试数据
导入模型进行训练
至此就完成了基本的svm分类器的搭建。
以上~
基于scikit-learn的SVM实战相关推荐
- python笔迹识别_python_基于Scikit learn库中KNN,SVM算法的笔迹识别
之前我们用自己写KNN算法[网址]识别了MNIST手写识别数据 [数据下载地址] 这里介绍,如何运用Scikit learn库中的KNN,SVM算法进行笔迹识别. 数据说明: 数据共有785列,第一列 ...
- Scikit Learn: 在python中机器学习
Warning 警告:有些没能理解的句子,我以自己的理解意译. 翻译自:Scikit Learn:Machine Learning in Python 作者: Fabian Pedregosa, Ga ...
- [转载]Scikit Learn: 在python中机器学习
原址:http://my.oschina.net/u/175377/blog/84420 目录[-] Scikit Learn: 在python中机器学习 载入示例数据 一个改变数据集大小的示例:数码 ...
- scikit - learn 做文本分类
文章来源: https://my.oschina.net/u/175377/blog/84420 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的句子,我以自 ...
- 【机器学习实验五】基于多分类线性SVM实现简易人机猜拳游戏
文章目录 基于多分类线性SVM&mediapipe手势关键点实现简易人机猜拳游戏 基于SMO优化的SVM分类算法完整实现版本 SVM决策结果与数据集可视化 多分类SVM实战:基于mediapi ...
- 【scikit-learn】如何用Python和SciKit Learn 0.18实现神经网络
本教程的代码和数据来自于 Springboard 的博客教程.本文的作者为 Jose Portilla,他是网络教育平台 Udemy 一门数据科学类课程的讲师. GitHub 链接:https://g ...
- python scikit learn 关闭开源_scikit learn 里没有神经网络?
本教程的代码和数据来自于 Springboard 的博客教程,希望能为你提供帮助.作者为 Jose Portilla,他是网络教育平台 Udemy 一门数据科学类课程的讲师. GitHub 链接:ht ...
- R语言基于日期范围筛选数据实战(Subset by a Date Range):日期范围之内的数据、日期范围之外的数据、日期之后的数据、日期之前的数据
R语言基于日期范围筛选数据实战(Subset by a Date Range):日期范围之内的数据.日期范围之外的数据.日期之后的数据.日期之前的数据 目录 R语言基于日期范围筛选数据实战(Subse ...
- R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据
R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据 目录 R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据
- R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据
R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据 目录 R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据
最新文章
- 聊天机器人之环境准备
- c语言读h5文件,我利用C语言实现SHA-256算法,需要从一个txt文件中读出数据并把...
- 栈的逆转(递归实现)
- Alfred+AppleScript实现快速复制当前文件夹路径
- PID控制方法及C语言其实现
- C#学习笔记——25个经典问题
- 携程elong相继牵手支付宝转“危”为“机”
- 【转】XP/2000无法使用“缩略图查看”、右键无“设置桌面背景”选项问题详解...
- stata 空间杜宾模型_一文读懂空间计量及stata应用(二)(附lr检验、动态空间面板杜宾/滞后模型dofile等)...
- Monkey Test 命令使用
- ios 录音生成.aac录音文件
- php电商数据库设计,电商平台促销活动数据库设计
- AspNetPager组件
- 打印机主流的指令类型(ESC命令集+CPCL命令集+TSPL命令集)...
- Cocos2d-js 音乐or音效
- 全球领导人齐聚一堂,出席10月14日召开的2021年全球包容性增长峰会
- 微分方程和线性代数(分离变量法开始)
- 前端主流面试官必问超详细面试题(整理完以秃头)持续更新中
- Problem L 七段显示器显示整数
- 怎么查服务器的操作系统是什么,怎么查服务器什么操作系统
热门文章
- SAP License:FICO重要概念(二)-附常用技巧
- SAP License:关于工作我的一些体会
- JavaScript 基础(三) - Date对象,RegExp对象,Math对象,Window 对象,History 对象,Location 对象,DOM 节点...
- python 迭代多个对象
- [转]SQL:JOIN用法
- ORACLE多表查询优化
- Python 命令行非阻塞输入
- 【Educational Codeforces Round 48 (Rated for Div. 2) D】Vasya And The Matrix
- 以鶸ice为例,手撸一个解释器(一)明确目标
- 项目管理的成功方程式