使用 scikit-learn 玩转机器学习——支持向量机

简介: 支持向量机(SVM)是监督学习中最有影响的方法之一。它的大致思想是找出距离两个类别(暂时以二分类问题为例)最近的点作为支持向量,然后找出一个最佳决策边界,以使从决策边界到支持向量的距离最大化。因为对于一个二分类问题来说,往往有无数个决策边界可以将两类数据分开,但我们只能选择一条作为我们的决策边界。

支持向量机(SVM)是监督学习中最有影响的方法之一。它的大致思想是找出距离两个类别(暂时以二分类问题为例)最近的点作为支持向量,然后找出一个最佳决策边界,以使从决策边界到支持向量的距离最大化。因为对于一个二分类问题来说,往往有无数个决策边界可以将两类数据分开,但我们只能选择一条作为我们的决策边界。

41.jpg

继续对上述问题进行讨论,SVM 最终还是转化为一个最值优化问题,它认为这样找的决策边界能够使两类事物区分的最好,将来对于未知种类的样本,它能够给出最正确的样本分类,即有着最好的泛化能力。用大白话翻译过来就是:苹果是苹果,梨就是梨,上帝在造苹果和梨的时候就在它们中间画了一条线,线的这边就是苹果,线的那边就是梨,我们要做的就是不断地逼近上帝画的那条线,这样能够更好地把梨和苹果分开。

42.jpg

上述讨论的问题是线性可分的,在 SVM 中对应着 hard margin 来解决,从名字可以看出来似乎还对应着 soft margin。的确,soft margin 的确存在,而且就像 softmax(不是强硬的直接输出最后分类结果0和1,而是给出属于对应结果的概率)和 softplus(softplus正是 ReLu 的圆角版)一样包含着缓冲和协调的作用。soft margin 引入了容错空间的的概念,从而允许原本属于不同类别的空间交叉重叠。




上述公式对应的是 hard margin 的损失函数和约束条件,w 表示各个特征的权重向量,在一个二分类问题中,标签值y取+1和-1, 表示我们求得的决策边界,表示经学习后分得的正类,表示经学习后分得的负类,表示的应该是经过支持向量且与决策边界平行的区域,在 hard margin 情形下,该区域是没有任何点的。又因为标签值 y 取值为+1和-1,则正负类可以用一个不等式表示,然后就可以用拉格朗日乘子法等来解决这类约束优化问题。


SVM 中另一个经常会出现的概念恐怕就是核了。通过核技巧,可以避免大量的点积运算,是计算更加高效,它同时保证了有效收敛的凸优化技术来学习线性模型。一般常用的核有高斯核(又叫做 RBF 核,radical basis function 的缩写)和多项式核(假装常用),高斯核函数如下所示:

代码演练(分类大作战)

我们会先实例化一个朴素的 SVM 分类器(不调任何超参数,全部取默认参数),看看其表现如何,然后会跟小伙伴们介绍下一些重要的超参数,并试着调参来优化 SVM 分类器的性能,顺便跟我们以往介绍过的分类器做下比较。


1、实例化一个朴素的 SVM 分类器,并看下其准确率


43.jpg


show一下数据集的几个数字样例:

44.jpg

45.jpg

46.jpg

2、介绍下 SVM 中一些重要的超参数(包含linear_svc 和 SVC 两个模型的部分超参数)


penalty: 字符串,可选‘l1’或’l2‘,默认’l2‘,指定模型的正则方式;

loss: 字符串,可选’hinge‘或’squared_hinge‘,默认’squared_hinge‘,用于指定模型的损失函数;

kenel: 字符串,可选‘linear’,'poly','rbf','sigmoid','precomputed';

degree: 整型数字,当使用多项式核时,用来确定多项式的阶次;

dual: 布尔值,默认值为’True‘,选择算法以解决双优化或原始优化问题;

tol: 浮点数,默认为 1e-4,用于判断是否停止迭代的容差;

C: 浮点数, 默认为1.0,容错空间系数,用于调整容错空间在优化迭代中所占的重要性;

multi_class: 字符串,可选’ovr‘和’crammer_singer‘,但面临多分类问题时,用于确定多分类策略,’ovr‘指定了使用 One VS Rest 策略进行多分类任务,而’crammer_singer‘则是在所有的类上建立一个联合的目标损失函数进行优化;

verbose: 整型数字,默认值为0,若为大于0的整数,则会在训练过程中不断输入与训练相关的条件与参数;

max_iter: 整型数字,默认值为1000,用于指定迭代的最大次数。


3、通过给 SVM 分类器调参,可以获得性能不错的分类器,如下:

47.jpg

4、看看其他的分类器都有什么样的表现呢

48.jpg


经过调参,都能达到很高的精度啦,但同样是达到99.11%的准确度,SVM 用了118ms,KNN 用了13.4s,当然了,这跟KNN 模型使用了网格搜索寻找部分最佳超参数也有关系了,再看看其他分类器的表现咯!

49.jpg

喔!逻辑回归这老哥简直不要太给力,仅使用朴素模型准确度就能达到95.6%,没必要再调参了。

那再用一个单层的神经网络模型试试(训练50个EPOCH,输入层128个神经元,输出层10个神经元):


50.jpg51.jpg


结果好像还不错呢,训练集和测试集上都有着98%的精度。那么这次的分享就到这里了,小伙伴们下次再见!!!

相关文章
|
10天前
|
机器学习/深度学习 算法 数据挖掘
|
12天前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
28天前
|
机器学习/深度学习 人工智能 算法
如何使用Scikit-learn在Python中构建一个机器学习分类器
如何使用Scikit-learn在Python中构建一个机器学习分类器
17 3
|
1月前
|
机器学习/深度学习 算法
【机器学习】SVM面试题:简单介绍一下SVM?支持向量机SVM、逻辑回归LR、决策树DT的直观对比和理论对比,该如何选择?SVM为什么采用间隔最大化?为什么要将求解SVM的原始问题转换为其对偶问题?
支持向量机(SVM)的介绍,包括其基本概念、与逻辑回归(LR)和决策树(DT)的直观和理论对比,如何选择这些算法,SVM为何采用间隔最大化,求解SVM时为何转换为对偶问题,核函数的引入原因,以及SVM对缺失数据的敏感性。
46 3
|
1月前
|
机器学习/深度学习 运维 算法
深入探索机器学习中的支持向量机(SVM)算法:原理、应用与Python代码示例全面解析
【8月更文挑战第6天】在机器学习领域,支持向量机(SVM)犹如璀璨明珠。它是一种强大的监督学习算法,在分类、回归及异常检测中表现出色。SVM通过在高维空间寻找最大间隔超平面来分隔不同类别的数据,提升模型泛化能力。为处理非线性问题,引入了核函数将数据映射到高维空间。SVM在文本分类、图像识别等多个领域有广泛应用,展现出高度灵活性和适应性。
84 2
|
1月前
|
机器学习/深度学习 算法
【机器学习】支持向量机SVM、逻辑回归LR、决策树DT的直观对比和理论对比,该如何选择(面试回答)?
文章对支持向量机(SVM)、逻辑回归(LR)和决策树(DT)进行了直观和理论上的对比,并提供了在选择这些算法时的考虑因素,包括模型复杂度、损失函数、数据量需求、对缺失值的敏感度等。
36 1
|
2月前
|
机器学习/深度学习 算法 数据挖掘
从菜鸟到大师:Scikit-learn库实战教程,模型训练、评估、选择一网打尽!
【7月更文挑战第26天】在数据科学领域, Scikit-learn是初学者通往专家之路的必备工具。
45 5
|
30天前
|
机器学习/深度学习 算法 数据挖掘
机器学习新手也能飞:Python+Scikit-learn让你轻松入门!
在数据驱动的时代,机器学习是推动科技进步和智能化生活的关键。Python以简洁的语法和强大的库支持,成为机器学习的理想语言。Scikit-learn作为Python的开源机器学习库,提供简单易用的API和丰富的算法,降低了学习门槛。通过Python结合Scikit-learn,即使是初学者也能快速上手,如使用鸢尾花数据集进行分类任务,体验从数据预处理到模型训练和评估的全过程,进而探索更多机器学习的可能性。
34 0
|
1月前
|
机器学习/深度学习 数据采集 算法
Scikit-learn:打破机器学习神秘面纱,带你一路狂飙入门与进阶!
【8月更文挑战第5天】Scikit-learn 是 Python 中广泛使用的机器学习库,提供丰富的工具和算法,助力解决实际问题。对初学者友好,从简单的线性回归开始,到复杂的分类任务如逻辑回归和支持向量机,再到数据预处理如标准化和归一化,逐步展现其强大功能。通过实践,用户可以熟练掌握并应用于房价预测、图像识别等多种场景,创造高价值成果。
27 0
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
实战派教学:掌握Scikit-learn,轻松实现数据分析与机器学习模型优化!
【7月更文挑战第27天】在数据科学领域, Scikit-learn因高效易用成为首选工具。本文采用实战方式教授Scikit-learn的基础入门、数据预处理、模型选择与训练、评估及调优。首先需安装Scikit-learn (`pip install scikit-learn`) 并加载数据集(如Iris)。
26 0