使用 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%的精度。那么这次的分享就到这里了,小伙伴们下次再见!!!

相关文章
|
8天前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-2
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
8天前
|
机器学习/深度学习 Python
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-4
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
8天前
|
机器学习/深度学习 数据采集 Python
Python机器学习面试:Scikit-learn基础与实践
【4月更文挑战第16天】本文探讨了Python机器学习面试中Scikit-learn的相关重点,包括数据预处理(特征缩放、缺失值处理、特征选择)、模型训练与评估、超参数调优(网格搜索、随机搜索)以及集成学习(Bagging、Boosting、Stacking)。同时,指出了常见错误及避免策略,如忽视数据预处理、盲目追求高精度、滥用集成学习等。掌握这些知识点和代码示例,能帮助你在面试中展现优秀的Scikit-learn技能。
37 5
|
8天前
|
机器学习/深度学习 数据采集 算法
深入理解并应用机器学习算法:支持向量机(SVM)
【5月更文挑战第13天】支持向量机(SVM)是监督学习中的强分类算法,用于文本分类、图像识别等领域。它寻找超平面最大化间隔,支持向量是离超平面最近的样本点。SVM通过核函数处理非线性数据,软间隔和正则化避免过拟合。应用步骤包括数据预处理、选择核函数、训练模型、评估性能及应用预测。优点是高效、鲁棒和泛化能力强,但对参数敏感、不适合大规模数据集且对缺失数据敏感。理解SVM原理有助于优化实际问题的解决方案。
|
8天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的支持向量机(SVM)算法
【5月更文挑战第6天】在数据科学和人工智能的广阔天地中,支持向量机(SVM)以其强大的分类能力与理论深度成为机器学习领域中的一个闪亮的星。本文将深入探讨SVM的核心原理、关键特性以及实际应用案例,为读者提供一个清晰的视角来理解这一高级算法,并展示如何利用SVM解决实际问题。
78 7
|
8天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的支持向量机算法
【5月更文挑战第6天】 在数据科学和人工智能领域,支持向量机(SVM)是一种强大的监督学习模型,它凭借其出色的分类能力在众多机器学习任务中占据重要地位。本文旨在深入剖析支持向量机的工作原理,探讨其在高维数据处理中的优势以及面对大规模数据集时的应对策略。通过对核技巧、软间隔以及优化问题的讨论,我们将揭示SVM如何优雅地处理线性不可分问题,并保持模型的泛化性能。
|
8天前
|
机器学习/深度学习 数据采集 监控
Scikit-learn机器学习
【5月更文挑战第3天】Scikit-learn是一个基于NumPy、SciPy和Matplotlib的Python机器学习库,提供数据预处理到模型评估的全套工具。支持监督学习、无监督学习和降维等任务。要安装Scikit-learn,运行`pip install scikit-learn`。流程包括:数据准备(如加载鸢尾花数据集并划分训练测试集)、选择模型(如SVM分类器)、模型训练、模型评估(计算准确度)、特征工程和数据预处理(如特征缩放)、超参数调优(如Grid Search CV)、模型可视化(如混淆矩阵)和部署。
33 3
|
8天前
|
机器学习/深度学习 数据采集 算法
【Python机器学习专栏】支持向量机(SVM)在Python中的实践
【4月更文挑战第30天】SVM是一种高效的监督学习算法,适用于分类和回归,尤其擅长处理高维和非线性问题。通过寻找最大边际超平面来分隔数据,SVM具有高效性、鲁棒性、灵活性和稀疏性等特点。
|
8天前
|
机器学习/深度学习 数据采集 算法
【Python机器学习专栏】使用Scikit-learn进行数据编码
【4月更文挑战第30天】本文介绍了Python Scikit-learn库在机器学习数据预处理中的作用,尤其是数据编码。数据编码将原始数据转化为算法可理解的格式,包括标签编码(适用于有序分类变量)、独热编码(适用于无序分类变量)和文本编码(如词袋模型、TF-IDF)。Scikit-learn提供LabelEncoder和OneHotEncoder类实现这些编码。示例展示了如何对数据进行标签编码和独热编码,强调了正确选择编码方法的重要性。
|
8天前
|
机器学习/深度学习 算法 数据挖掘
机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧
机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧

热门文章

最新文章