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

相关文章
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
实战派教学:掌握Scikit-learn,轻松实现数据分析与机器学习模型优化!
【10月更文挑战第4天】Scikit-learn凭借高效、易用及全面性成为数据科学领域的首选工具,简化了数据预处理、模型训练与评估流程,并提供丰富算法库。本文通过实战教学,详细介绍Scikit-learn的基础入门、数据预处理、模型选择与训练、评估及调优等关键步骤,助你快速掌握并优化数据分析与机器学习模型。从环境搭建到参数调优,每一步都配有示例代码,便于理解和实践。
88 2
|
18天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
24 3
|
23天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
28 1
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
23 1
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
53 2
|
1月前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
65 1
|
1月前
|
机器学习/深度学习 人工智能 数据挖掘
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第6天】在人工智能领域,机器学习已成为核心技术。本文指导初学者使用Python与Scikit-learn入门机器学习,涵盖基本概念、环境搭建、数据处理、模型训练及评估等环节。Python因简洁性及其生态系统成为首选语言,而Scikit-learn则提供了丰富工具,简化数据挖掘与分析流程。通过实践示例,帮助读者快速掌握基础知识,为进一步深入研究奠定坚实基础。
28 4
|
1月前
|
机器学习/深度学习 算法 数据挖掘
从零到精通:Scikit-learn在手,数据分析与机器学习模型评估不再难!
【10月更文挑战第4天】在数据科学领域,模型评估是连接理论与实践的桥梁,帮助我们理解模型在未知数据上的表现。对于初学者而言,众多评估指标和工具常令人困惑。幸运的是,Scikit-learn 这一强大的 Python 库使模型评估变得简单。本文通过问答形式,带你逐步掌握 Scikit-learn 的评估技巧。Scikit-learn 提供了丰富的工具,如交叉验证、评分函数(准确率、精确率、召回率、F1 分数)、混淆矩阵和 ROC 曲线等。
39 1
|
1月前
|
机器学习/深度学习 数据采集 算法
【Python篇】从零到精通:全面分析Scikit-Learn在机器学习中的绝妙应用
【Python篇】从零到精通:全面分析Scikit-Learn在机器学习中的绝妙应用
38 2
|
2月前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
在数据驱动时代,Python 以强大的生态系统成为数据科学的首选语言,而 Scikit-learn 则因简洁的 API 和广泛的支持脱颖而出。本文将指导你使用 Scikit-learn 进行机器学习模型的训练与评估。首先通过 `pip install scikit-learn` 安装库,然后利用内置数据集进行数据准备,选择合适的模型(如逻辑回归),并通过交叉验证评估其性能。最终,使用模型对新数据进行预测,简化整个流程。无论你是新手还是专家,Scikit-learn 都能助你一臂之力。
136 8