机器学习实战-支持向量机原理、Python实现和可视化(分类)

支持向量机SVM代码详解——多分类/降维可视化/参数优化【python】 主要介绍数学建模以及大数据比赛中常用的SVM支持向量机模型算法,并使用python实现实例二分类、多分类、可视化以及参数优化。 阅读详情

支持向量机(SVM)广泛应用于模式分类和非线性回归领域。SVM算法的原始形式由Vladimir N.Vapnik和Alexey Ya提出。自从那以后,SVM已经被巨大地改变以成功地用于许多现实世界问题。

1.什么是支持向量机(SVM)?

支持向量机是一种有监督的机器学习算法,可用于分类和回归问题。它遵循一种用核函数技巧来转换数据的技术,并且基于这些转换,它找到可能输出之间的最佳边界。

简单来说,它做一些非常复杂的数据转换,以找出如何根据标签或输出定义的数据分离。本文我们将看到SVM分类算法如何通过python实现并可视化。

2.SVM的原理

寻找一个分离超平面,使得它到各分类的平均距离是最大的。

什么是分离超平面?

把数据划分为多个类别的一个图形,如线、面、超平面,我们统称为超平面。

一个最简单的示例,即数据集位于2维平面中,一条线就可以把样本分成两类。但是支持向量机也可以用于一般的n维数据集,所以我们统称超平面。

更正式地说,它是n维欧几里德空间的n-1维子空间。所以一个

  • 1维数据集,单点表示超平面。

  • 2维数据集,线是超平面。

  • 3维数据集,平面是超平面。

  • 在更高的维度上,就被称为超平面。 
    SVM的目标是找到最佳分离超平面。那么什么时候分离超平面是最优的?让我们通过一组图来理解最佳超平面。

有多个超平面,但其中哪一个是分离超平面?可以很容易地看出,线B是比较好地分离这两个类的线,但我们如何计算出来最佳的超平面呢?

直观地,如果我们选择接近一个类的数据点的超平面,那么它可能不能很好地推广。因此,要选择尽可能远离每个类别的数据点的超平面。

在上图中,满足指定条件的最佳超平面为B。

因此,最大化每个类的最近点和超平面之间的距离就能找到最优分离超平面。这个距离称为边距,下图是边距的计算原理图。

SVM的目标是找到最佳超平面,因为它不仅分类现有数据集,而且有助于预测未知数据的类。最优超平面是边距最大的平面。

3、支持向量机的优缺点

每个分类算法都有自己的优点和缺点,它们根据正在分析的数据集发挥作用。

SVM的一些优点如下:

  • 凸优化方法的本质是保证最优性。该解决方案保证是全局最小值,而不是局部最小值

  • SVM是一种适用于线性和非线性可分离数据(使用核函数技巧)的算法。唯一要做的是找出正则化项C。

  • SVM在低维和高维数据空间上工作良好。它能有效地对高维数据集工作,因为SVM中的训练数据集的复杂度通常由支持向量的数量而不是维度来表征。即使删除所有其他训练示例并重复训练,我们将获得相同的最佳分离超平面。

  • SVM可以在较小的训练数据集上工作,因为它们不依赖于整个数据。

SVM的缺点如下:

  • 它们不适合较大的数据集,因为在较大的数据集上使用SVM的训练时间可能很高,并且计算量更大。

  • 它们在具有重叠类的嘈杂数据集上效率较低。

4、Python实现

4.1 加载需要用到的模块

import numpy as np

from sklearn import datasets

from sklearn.pipeline import Pipeline

from sklearn.svm import SVC

import seaborn as sns

import pandas as pd

from sklearn.model_selection import cross_val_score

from sklearn.grid_search import GridSearchCV

from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score

import matplotlib.pyplot as plt

4.2 初始化数据

从datasets数据集中加载iris数据,提取data中的两列作为特征值,提取target为分类值,并把特征值和分类值转换为pandas的DataFrame数据框,并合并到data中,重命名各特征为x1,x2和y。

找出x1和x2的最大值和最小值,生成满布坐标系的点,用于描绘超平面。

iris = datasets.load_iris()

X = iris['data'][:,[2,3]]

y = iris['target']

X = pd.DataFrame(X)

y = pd.DataFrame(y)

data = pd.merge(X,y,left_index=True,right_index=True,how='outer')

data.columns=['x1','x2','y']

h = 0.002

x_min, x_max = data.x1.min() - 0.2, data.x1.max() + 0.2

y_min, y_max = data.x2.min() - 0.2, data.x2.max() + 0.2

xx, yy = np.meshgrid(np.arange(x_min, x_max, h),

np.arange(y_min, y_max, h))

sns.scatterplot(data.x1, y=data.x2,hue=data.y)

X = data[['x1','x2']]

y = data.y

我们用seaborn的scatterplot把x1和x2用散点图描绘出来,如下图。

在这个图中我们看到有三个分类,接下来我们用SVM支持向量机为这些训练数据建立一个模型。

4.3 线性SVM模型

X_train,X_val,y_train,y_val = train_test_split(X,y,test_size=0.2) #80%和20%划分X和y

clf = SVC(C=0.1,kernel='linear')

clf.fit(X_train,y_train)

y_pre = clf.predict(X)

Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

Z = Z.reshape(xx.shape)

sns.scatterplot(data.x1, y=data.x2,hue=y_pre)

plt.contourf(xx, yy, Z, cmap=plt.cm.ocean, alpha=0.2)

accuracy_score(data.y,y_pre)

用数据集合的80%作为训练集,建立一个C=0.1的线性SVM模型,并用data的所有x1和x2用这个SVM模型去预测y,预测的y和原来的y计算准确率。

accuracy_score(data.y,y_pre)


结果0.95333333333333337,即约95.33%的准确率,可以和上面第一个图进行精细对比是哪个点分类错了。

4.4 寻找最好的模型

我们通过网格搜索,寻找一个最好的模型。GridSearchCV可以配置一个参数列表(超参数)、模型,在这个超参数中自动寻找最好的模型。GridSearchCV已经自动按照cv=5把样本分成5等分进行训练和验证的了。

params = {'C':np.arange(0.1,1,0.1),'kernel':['linear', 'poly', 'rbf', 'sigmoid']}

gsearch = GridSearchCV(estimator = SVC(kernel='linear'),

param_grid = params, scoring='accuracy',iid=False, cv=5)

gsearch.fit(X,data.y)

gsearch.grid_scores_, gsearch.best_params_, gsearch.best_score_

结果如下:

自动寻找到上面的红色框的模型参数,准确率是96.67%。

从上表可以看出来核函数rbf的拟合比较好。那么我们再用GridSearchCV去变量rbf的degree看看能不能有进一步优化的空间。

params = {'C':np.arange(0.1,1,0.1),'degree':np.arange(1,5,1)}

gsearch = GridSearchCV(estimator = SVC(kernel='poly'),

param_grid = params, scoring='accuracy',iid=False, cv=5)

gsearch.fit(X,data.y)

gsearch.grid_scores_, gsearch.best_params_, gsearch.best_score_

最好的结果是: 
{‘C’: 0.10000000000000001, ‘degree’: 2}, 
0.9666666666666668)

没有得到进一步优化。 
接下来我们就用rbf核函数c=0.1去重新建立模型并看看可视化的效果。

4.5 最优模型

我们直接用全集去拟合这个c=0.1,核函数rbf的SVM模型。我们看看可视化的结果。

clf = SVC(C=0.2,kernel='rbf')

clf.fit(X,y)

y_pre = clf.predict(X)

Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

Z = Z.reshape(xx.shape)

ax = sns.scatterplot(data.x1, y=data.x2,hue=y_pre)

ax.legend(loc="lower right")

plt.contourf(xx, yy, Z, cmap=plt.cm.ocean, alpha=0.2)

accuracy_score(data.y,y_pre)


准确率为0.96666666666666667,即96.67%

4.6 学习曲线

接下来我们就用这个模型看看样本的学习曲线

scores = []

for m in range(2,X_train.size):#循环2-79

clf.fit(X_train[:m],y_train[:m])

y_train_predict = clf.predict(X_train[:m])

y_val_predict = clf.predict(X_val)

scores.append(accuracy_score(y_train_predict,y_train[:m]))

plt.plot(range(2,X_train.size),scores,c='green', alpha=0.6)

 
可以看出来,样本引入50个后,模型的准确率已经稳定下来了。

长按二维码关注

SVM使用与参数优化 转载本文请注明出处:amazingwu: python机器学习库 scikit-learn对Python语言有所了解的科研人员可能都知道SciPy——一个开源的基于Python的科学计算工具包。基于SciPy,目前开发者们针对不同的应用领域已经发展出了为数众多的分支版本,它们被统一称为Scikits,即SciPy工具包的意思。而在这些分支版本中,最有名,也是专门面向机器学习的一个就是Scikit-l 阅读详情

相关推荐

基于Python实现五大常用分类算法(原理+代码)

编程算法常用

weixin_57712785的博客 1万+

支持向量机(SVM)的超参数调整 C 和 Gamma 参数

在本文中,我们将深入探讨支持向量机的两个重要参数:C和gamma。

养乐多的博客 2万+

使用Python可视化支持向量机(SVM)

定义了一个名为gamma_values的列表,包含γ超参数的不同值,控制单个训练示例的影响。

python收藏家的博客 1812

机器学习——支持向量机(SVM)

支持向量机(SVM)是一种常见的机器学习方法,常用于分类(线性和非线性分类问题),回归问题。本文将详细介绍一下支持向量机算法。本文在SVM算法原理介绍中:从开始的SVM介绍,到Kernel的介绍,再到算法和核函数的选择,之后就是算法的步骤,以及分类和回归的选择;在代码实现中:亦是分别对SVM中的回归(SVR)和分类(SVC)用代码实现,并可视化结果。 关关雎鸠,在河之洲 --2023-9-4 筑基篇

2301_78630677的博客 2万+

【机器学习】吴恩达作业6.0,python实现SVM支持向量机

6.0支持向量机 使用支持向量机(SVM)处理各种两维的样本数据集,了解支持向量机如何工作,以及如何使用带高斯核函数的SVM。 SVM(鲁棒性,大间距分类器) 支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的 间隔最大的线性分类器 ,间隔最大使它有别于感知机;SVM还包括 核技巧 ,这使它成为实质上的非线性分类器。 SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。 S

m0_51933492的博客 3731

支持向量回归(SVR)的超参数调优与过拟合防止

惩罚参数C控制了模型的复杂度,较小的C值会产生简单的模型,而较大的C值会产生复杂的模型。本文将详细介绍SVR的超参数调优和过拟合防止策略,并提供相应的Python代码示例。通过以上代码示例,我们展示了使用SVR模型进行回归任务时的超参数调优和过拟合防止策略。通过网格搜索或随机搜索来搜索最佳超参数组合,结合数据预处理和特征选择的策略,可以提高SVR模型的性能并降低过拟合的风险。通过在损失函数中引入正则化项,可以限制模型参数的大小,防止模型过度拟合训练数据。这可以减少模型的复杂度,并降低过拟合的风险。

Meta_C的博客 3765

python支持向量机回归_机器学习实战-支持向量机原理、Python实现和可视化(分类)...

支持向量机(SVM)广泛应用于模式分类和非线性回归领域。 SVM算法的原始形式由Vladimir N.Vapnik和Alexey Ya提出。自从那以后,SVM已经被巨大地改变以成功地用于许多现实世界问题。1.什么是支持向量机(SVM)?支持向量机是一种有监督的机器学习算法,可用于分类和回归问题。它遵循一种用核函数技巧来转换数据的技术,并且基于这些转换,它找到可能输出之间的最佳边界。简单来说,它做一...

weixin_39783426的博客 292

OpenCV-Python实战(13)——OpenCV与机器学习的碰撞

机器学习是人工智能的子集,它为计算机以及其它具有计算能力的系统提供自动预测或决策的能力,诸如虚拟助理、车牌识别系统、智能推荐系统等机器学习应用程序给我们的日常生活带来了便捷的体验。机器学习的蓬勃发展,得益于以下三个关键因素:1) 海量数据集;2) 算法的快速发展;3) 计算机硬件的发展。在本文中,我们将学习 OpenCV 提供的常见机器学习算法和技术,用于解决计算机视觉项目中的实际问题,例如分类和回归问题。

盼小辉丶的博客 2万+

SVM系列之SMO的Python实现(四)

前言 经过前面三篇漫长的 SVM 介绍以及 SMO 算法的原理介绍和公式推导,终于到了 SMO 的算法实现以及最终的 SVM 分类实现了。那么现在就先看看 SMO 的 python 实现。 SMO python 实现 代码中的 αiαi \alpha_{i} ,αjαj\alpha_{j} 对应了前一篇中的 α1α1 \alpha_{1} 和 α2α2\alpha_{2},并且代...

Rongxuan的博客 1892

[Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

分类(Classification)属于有监督学习(Supervised Learning)中的一类,它是数据挖掘、机器学习和数据科学中一个重要的研究领域。分类模型类似于人类学习的方式,通过对历史数据或训练集的学习得到一个目标函数,再用该目标函数预测新数据集的未知属性。本章主要讲述分类算法基础概念,并结合决策树、KNN、SVM分类算法案例分析各类数据集,从而让读者学会使用Python分类算法分析自己的数据集,研究自己领域的知识,从而创造价值。 19.1 分类 19.1.1 分类模型 与前面讲述的聚类模型类似

杨秀璋的专栏 2万+

机器学习强基计划3-2:详细推导支持向量机SVM原理+Python实现

支持向量机SVM是基于训练集在样本空间或其映射空间中寻找一个最鲁棒的划分超平面将不同类别样本划分开的分类方法。本文介绍SVM的基本原理与Python实现

FRIGIDWINTER的博客 2222

7个高效Python机器学习算法:材料性能预测与智能设计实战指南

想要快速掌握Python机器学习算法,实现材料性能预测与智能设计?本文将为你介绍7个核心的Python机器学习算法实现,帮助你从零开始构建智能预测模型。这些算法来自The Algorithms Python项目,包含了完整的代码实现和实战示例,特别适合材料科学、工程设计和数据科学领域的新手学习使用。 ## 🎯 为什么选择Python机器学习算法? Python机器学习算法库提供了从基础到高级

gitblog_00446的博客 646

飞行器坐标转换

本文定义的是右手直角坐标系,x−y−zx-y-zx−y−z轴分别为北-天-东。从AAA坐标系到BBB坐标系是分别绕y−z−xy-z-xy−z−x轴,即天-东-北旋转ψ−θ−γψ−θ−γ。如果AAA是惯性系,BBB是机体系,则这三个角度分别为偏航角、俯仰角、横滚角。图1 惯性系到机体系。

gongfuyd的博客 1356

别再死记硬背了!用Python实战案例帮你彻底搞懂机器学习十大算法

本文通过十个Python实战案例,深入浅出地讲解了K近邻、决策树、支持向量机等机器学习十大算法的核心原理与应用。从Scikit-learn实现到可视化分析,帮助读者摆脱枯燥理论,真正掌握这些算法在分类、聚类、降维等场景中的实际运用,提升机器学习实战能力。

weixin_28684497的博客 369

Android13多路录音实战:如何用AudioRecord实现6通道音频采集(附完整代码)

本文详细解析了在Android13中使用AudioRecord API实现6通道音频采集的全流程,包括硬件兼容性检测、多通道配置、数据处理与性能优化。通过实战代码示例,帮助开发者掌握多路录音技术,适用于空间音频、环绕声录制等专业场景。

weixin_26965807的博客 480

【无人机智能避障】基于深度强化学习的城市复杂环境路径规划实战

本文探讨了基于深度强化学习的无人机在城市复杂环境中的智能避障与路径规划。针对传统算法难以应对动态与非结构化障碍的痛点,文章详细介绍了如何利用DQN算法,通过设计合理的状态空间、奖励函数,并结合经验回放、目标网络等技巧,训练无人机自主学会在楼宇间安全、高效飞行的策略。

weixin_28224217的博客 736

期末复习别慌!用Python+Sklearn搞定机器学习常见考题(附代码实战)

本文提供了一份机器学习期末复习指南,通过Python和Sklearn库将抽象概念转化为可运行的代码实验。涵盖数据划分、模型评估、过拟合诊断、KNN、线性回归、决策树、朴素贝叶斯和SVM等核心考点,每个知识点配有可修改的代码模板和常见错误分析,帮助学生在实践中深入理解机器学习算法。

weixin_29195615的博客 215

从圆形到椭圆:CenterNet中高斯热图半径的自适应优化策略

本文深入探讨了CenterNet目标检测模型中高斯热图生成策略的优化,针对传统圆形高斯核在处理长宽比差异大目标时的局限性,提出了自适应椭圆高斯核的解决方案。通过数学推导和代码实战,详细阐述了如何根据目标边界框尺寸动态计算椭圆长短轴半径,生成更贴合目标几何形状的热图监督信号,从而有效提升模型,尤其是对无人机、车辆等不规则目标的定位精度。

alice7model的博客 986

【机器学习】python使用支持向量机SVM

准备: 数据集 导入SVM模块 python 2.7 步骤: 1.读取数据集 2.划分训练样本与测试样本 3.训练SVM分类器 4.计算分类准确率 5.绘制图像 关于SVM的原理知识,在【机器学习】支持向量机中讲过,欲知详情,可戳: https://blog.youkuaiyun.com/u0...

不二的博客 5872

GEE——土地利用分类之监督分类

利用GEE做监督分类,以武汉市为例。 训练器我们选择随机森林;数据选择Landsat-8;训练样本使用的是GEE提供的一种,它把地表分为三类:水体、植被和城市用地。 选择训练样本 用要素集来标记训练样本。每个要素都有一个landcover 的属性,0表示城市用地,1表示植被,2表示水体。 对影像进行分类 其中一部分进行分类器的训练,还有一部分留下来做精度验证。 输出影像及混淆矩阵 print(LABEL_DATA); var wuhan = ee.FeatureCollection('users/

qq_41600680的博客 1万+

lammps案例:堆垛层错能的计算

大家好,我是小马老师。 本文介绍如何使用lammps计算晶体的堆垛层错能。 正常晶体中的原子按照一定的规律排列,原子面按ABCABC……的顺序排列,如下图所示: 当某个原子面被抽出后会形成堆垛层错,如图中的蓝色原子层被抽出,原子面排列变为ABCBCA……: 可通过计算堆垛层错能形成前后的能量差计算堆垛层错能,计算公式为: E0为初始能量 Ef为删除一个原子面后的能量 A为界面面积 下面分享一个lammps计算堆垛层错能的in代码,本代码由Richard Glaze完成,本文稍作修改并进行了注释,以供初

lammps_jiayou的博客 5436

基于python实现SVM(支持向量机)

SVM是一种经典的监督学习算法,其基本思想可以简单概括为以下几点:1.寻找最优的超平面:SVM 的目标是在特征空间中找到一个最优的超平面,以能够将不同类别的样本正确地分开。超平面是一个 d-1 维的子空间,其中 d 是特征空间的维度。2.最大化间隔:SVM 在寻找超平面时,会尽可能地将不同类别的样本分开,并且使得支持向量(离超平面最近的样本点)到超平面的距离最大化。这个距离被称为间隔(margin),因此 SVM 也被称为最大间隔分类器。

m0_62682527的博客 5408

Python的单元测试之unittest

是一个功能类似 unittest 的库,它集合众家标准测试库之所长,和 unittest 相比,功能更为强大,使用更为简单,OpenStack 广泛的利用它编写单元测试。unittest 提供了自动匹配发现并执行测试用例的功能,随着项目代码结构越发庞大,势必有多个测试文件,自动匹配发现并测试用例的功能在此就显得非常有用,只要满足。unittest 提供了丰富的命令行入口,可以根据需要执行某些特定的用例。的测试用例都会被 unittest 发现并执行,测试用例文件的默认匹配规则为 test*.py。

1、测试博主技术知识分享 2、pos行业知识技术分享 3、java后端技术知识分享 4、嵌入式技术知识分享 5、运维部署相关知识分享 283

机器学习实战:Python基于支持向量机SVM-RFE进行分类预测(三)

支持向量机()是一种监督学习的分类算法。它的基本思想是找到一个能够最好地将不同类别的数据分开的超平面,同时最大化分类器的边际(margin)。SVM的训练目标是最大化间隔(margin),即支持向量到超平面的距离。具体地,对于给定的训练集,SVM会找到一个最优的分离超平面,使得距离该超平面最近的样本点(即支持向量)到该超平面的距离最大化。SVM是一种二分类算法,但可以通过多次调用SVM实现多分类问题的解决。SVM的优化问题可以通过凸优化来求解,其中使用拉格朗日乘子法将约束优化问题转化为无约束优化问题。

Senoh的博客 6583

stable diffusioncontrolNet 预处理器/模型的下载及安装使用教程

首先说明,controlNet 的模型 不同于stable diffusion 模型,这一点一定要区分清楚。下面提供多个ControlNet 预处理器+ 专用模型的百度网盘下载链接,都是由群友整理贡献,但各自包含的版本不同,大家可自行选择。推荐下载紫色链接内的模型,fp16版文件更小,稍微新一些的controlnet插件还添加了对control-lora的支持(注意,要求controlnet插件的版本比12月16号新(1.1.423以上)才能正常识别),推荐下载;

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3389

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: 调包侠福音!机器学习经典算法开源教程(附参数详解及代码实现)
下一篇: 一文讲解自动机器学习(AutoML)!你已经是个成熟的模型了,该学会自己训练了...
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值