python支持向量机_支持向量机(SVM)Python实现

什么是支持向量机?

“支持向量机”(SVM)是一种监督机器学习算法,可用于分类或回归挑战。然而,它主要用于分类问题。在这个算法中,我们将每一个数据项作为一个点在n维空间中(其中n是你拥有的特征数)作为一个点,每一个特征值都是一个特定坐标的值。然后,我们通过查找区分这两个类的超平面来进行分类。

将二维数据变成三维数据的过程,称为将数据投射到高维空间.,这正是SVM算法的核函数(kernel trick)功能.

在SVM中用的最普遍的两种把数据投射到高维空间的方法分别是多项式内核(Polynomial kernel)和径向基内核(Radial basis function kernel,RBF).

1.SVM支持向量机的核函数

在SVM算法中,训练模型的过程实际上是对每个数据点对于数据分裂决定边界的重要性进行判断.在训练数据集中,只有一部分数据对于边界的确定是有帮助的,而这些数据点就是正好位于决定边界上的,这些数据被称为”支持向量”(support vectors).

(1)核函数为linear的SVM支持向量机

#ai8py.com

############## 支持向量机的核函数 ##################

#导入numpy

import numpy as np

#导入画图工具

import matplotlib.pyplot as plt

#导入支持向量机svm

from sklearn import svm

#导入数据集生成工具

from sklearn.datasets import make_blobs

#先创建50个数据点,让他们分为两类

X,y = make_blobs(n_samples=50,centers=2,random_state=6)

#创建一个线性内核的支持向量机模型

clf = svm.SVC(kernel = 'linear',C=1000)

clf.fit(X,y)

#把数据点画出来

plt.scatter(X[:, 0],X[:, 1],c=y,s=30,cmap=plt.cm.Paired)

#建立图像坐标

ax = plt.gca()

xlim = ax.get_xlim()

ylim = ax.get_ylim()

#生成两个等差数列

xx = np.linspace(xlim[0],xlim[1],30)

yy = np.linspace(ylim[0],ylim[1],30)

YY,XX = np.meshgrid(yy,xx)

xy = np.vstack([XX.ravel(),YY.ravel()]).T

Z = clf.decision_function(xy).reshape(XX.shape)

#把分类的决定边界画出来

ax.contour(XX,YY,Z,colors='k',levels=[-1,0,1],alpha=0.5,linestyles=['--','-','--'])

ax.scatter(clf.support_vectors_[:, 0],clf.support_vectors_[:, 1],s=100,linewidth=1,facecolors='none')

plt.show()

image-197.png

(2)把SVM的内核换成是RBF

#创建一个RBF内核的支持向量机模型

clf_rbf = svm.SVC(kernel='rbf',C=1000)

clf_rbf.fit(X,y)

#把数据点画出来

plt.scatter(X[:, 0],X[:, 1],c=y,s=30,cmap=plt.cm.Paired)

#建立图像坐标

ax = plt.gca()

xlim = ax.get_xlim()

ylim = ax.get_ylim()

#生成两个等差数列

xx = np.linspace(xlim[0],xlim[1],30)

yy = np.linspace(ylim[0],ylim[1],30)

YY,XX = np.meshgrid(yy,xx)

xy = np.vstack([XX.ravel(),YY.ravel()]).T

Z = clf_rbf.decision_function(xy).reshape(XX.shape)

#把分类的决定边界画出来

ax.contour(XX,YY,Z,colors='k',levels=[-1,0,1],alpha=0.5,linestyles=['--','-','--'])

ax.scatter(clf.support_vectors_[:, 0],clf.support_vectors_[:, 1],s=100,linewidth=1,facecolors='none')

plt.show()

image-198.png

2.SVM的核函数与参数选择

#导入红酒数据集

from sklearn.datasets import load_wine

#导入支持向量机svm

from sklearn import svm

#定义一个函数用来画图

def make_meshgrid(x,y,h=.02):

x_min,x_max = x.min() - 1,x.max() + 1

y_min,y_max = y.min() - 1,y.max() + 1

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

return xx,yy

#定义一个绘制等高线的函数

def plot_contours(ax,clf,xx,yy,**params):

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

Z = Z.reshape(xx.shape)

out = ax.contourf(xx,yy,Z,**params)

return out

#使用酒的数据集

wine = load_wine()

#选取数据集的前两个特征

X = wine.data[:, :2]

y = wine.target

C = 1.0 #svm的正则化参数

models = (svm.SVC(kernel='linear',C=C),svm.LinearSVC(C=C),svm.SVC(kernel='rbf',gamma=0.7,C=C),svm.SVC(kernel='poly',degree=3,C=C))

models = (clf.fit(X,y) for clf in models)

#设定图题

titles = ('SVC with linear kernel','LineatSVC (linear kernel)','SVC with RBF kernel','SVC with polynomial (degree 3) kernel')

#设定一个子图形的个数和排列方式

flg, sub = plt.subplots(2, 2)

plt.subplots_adjust(wspace=0.4,hspace=0.4)

#使用前面定义的函数进行画图

X0,X1, = X[:, 0],X[:, 1]

xx,yy = make_meshgrid(X0,X1)

for clf,title,ax in zip(models,titles,sub.flatten()):

plot_contours(ax,clf,xx,yy,cmap=plt.cm.plasma,alpha=0.8)

ax.scatter(X0,X1,c=y,cmap=plt.cm.plasma,s=20,edgecolors='k')

ax.set_xlim(xx.min(),xx.max())

ax.set_ylim(yy.min(),yy.max())

ax.set_xlabel('Feature 0')

ax.set_ylabel('Featuer 1')

ax.set_xticks(())

ax.set_yticks(())

ax.set_title(title)

#将图型显示出来

plt.show()

image-199.png

3.SVM支持向量机的gamma参数调节

C = 1.0 #svm的正则化参数

models = (svm.SVC(kernel='rbf',gamma=0.1,C=C),svm.SVC(kernel='rbf',gamma=1,C=C),svm.SVC(kernel='rbf',gamma=10,C=C))

models = (clf.fit(X,y) for clf in models)

#设定图题

titles = ('gamma = 0.1','gamma = 1','gamma = 10',)

#设定一个子图形的个数和排列方式

flg, sub = plt.subplots(1,3,figsize = (10,3))

#使用定义好的函数进行画图

X0,X1, = X[:, 0],X[:, 1]

xx,yy = make_meshgrid(X0,X1)

for clf,title,ax in zip(models,titles,sub.flatten()):

plot_contours(ax,clf,xx,yy,cmap=plt.cm.plasma,alpha=0.8)

ax.scatter(X0,X1,c=y,cmap=plt.cm.plasma,s=20,edgecolors='k')

ax.set_xlim(xx.min(),xx.max())

ax.set_ylim(yy.min(),yy.max())

ax.set_xlabel('Feature 0')

ax.set_ylabel('Featuer 1')

ax.set_xticks(())

ax.set_yticks(())

ax.set_title(title)

#将图型显示出来

plt.show()

image-200.png

总结:

SVM支持向量机的优势与不足:

如果数据集中的样本数量在1万以内,SVM都能驾驭的了,但如果样本数量超过10万的话,SVM就会非常的耗费时间和内存.

SVM还有一个短板,就是对数据预处理和参数调节要求非常高.

SVM支持向量机算法中,有3个参数是比较重要的:

第一个是核函数的选择

第二个是核函数的参数

第三个是正则化参数C

文章引自 : 《深入浅出python机器学习》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AR智能提升工业效率的4大场景与应用实践!

来源:北京物联网智能技术应用协会导 读 ( 文/ e-works整理 )德国学者提出“工业4.0”的概念,即以智能制造为主导的第四次工业革命,或革命性的生产方法。主要围绕两大主题,一是“智能工厂”,二是“智能生产”&#xff0…

手机进销存系统/供应链管理系统

花了将近两个月的时间学习了一个企业级进销存项目,已经结束了两周多,现在终于有时间来对这个项目的学习做个总结了! 一、首先介绍下这个项目 (注:本人目前大三,专业为信息管理,与编程沾边不多。而我对编程很…

如何评价马云和马斯克在世界人工智能大会的对话?

来源:刘锋的未来课堂马云和马斯克在世界人工智能大会的对话,虽然风轻云淡,天马行空,但两个人其实是针锋相对的,马云的观点是认为人工智能还是人类的工具,为人类的未来提供服务,马斯克继续保持他…

linux 检测mysql链接_MySQL笔记

#忘记原始密码1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables12、重启mysql:service restart stop3、刷新权限:flush privileges;4、修改密码:alter user rootlocalhost identified by Kgj2019;若…

matplotlib设置多个图例横向水平放置

一般多个图例都是竖向放置 如果想要多个图例横向放置,设置plt.legend的ncol参数,ncol参数表示将图例分为多少列,以两个图例横向放置为例: plt.legend(ncol2)

内存对齐分配策略(含位域模式)

1:内存对齐定义: 现在使用的计算机中内存空间都是按照字节划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但是实际上计算机系统对于基本数据类型在内存 中的存放位置都有限制,要求这…

科技部发布新一批国家新一代人工智能开放创新平台

来源:科技部8月29日上午,在上海举办的2019世界人工智能大会开幕式上,科技部李萌副部长发布了新启动建设的十家国家新一代人工智能开放创新平台。分别是:依托上海依图网络科技有限公司建设视觉计算国家新一代人工智能开放创新平台&…

开发里程碑计划_里程碑——让你轻松控制项目进度

对于项目结果的最好控制就是控制项目开发的过程,也就是控制项目开发过程中的几个关键节点——项目的里程碑事件。通过对里程碑事件的控制用于评估项目各阶段工作进展的有效性,以及及时的明确开发过程中存在的风险过程。我们在做项目开发计划的时候&#…

SQL Server数据库大型应用解决方案总结【转】

【IT168 技术】随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。 一、负载均衡技术 负载均衡集…

Python正在吞噬世界

来源: AI前线AI 前线导读:2018 到 2019 年,所有编程语言的流行度都在下滑,除了 Python。Python 为什么会变得越来越火?本文梳理了 Python 的发展史,试图揭示背后的秘密。1994 年末,一群来自美国…

登录python自动化_Appium+Python实现自动化登录

#AppiumPython实现自动化测试 Appium简介 官方的概述为: Appium is an open source test automation framework for use with native, hybrid and mobile web apps. It drives iOS, Android, and Windows apps using the WebDriver protocol. Appium是一个开源的测试…

lvalue-xvalue-prvalue

• iM: has identity and cannot be moved from • im: has identity and can be moved from (e.g. the result of casting an lvalue to a rvalue reference) • Im: does not have identity and can be moved from 转载于:https://www.cnblogs.com/Searchor/p/5604736.html

城市仿真为何成为大势所趋?

来源:智慧城市联合实验室不知从何时起,人们开始从城市的角度构想,未来可以建设一个虚拟城市,来映射真实城市的运行,再进一步管理真实城市的运行。现在,这种构想已经初步实现……(内附《城市环境…

linux网络配置_linux复制和网络配置的小注意事项

centos7,vbox复制出来的虚拟机无法ping通。其实这是vbox低版本没有解决的一个小问题,复制过去,主机的mac重新生成了(复制时候一定要选这个选项),但是配置文件的mac还是被复制的主机配置,网上搜索很多方案各种改,其实只…

实验室培养的迷你大脑,产生了脑电波...

十月龄如豌豆大小的类器官。图片来源:Muotri Lab来源:中国生物技术网近日,来自美国加州大学圣地亚哥分校的科学家用发育了功能性神经网络的干细胞创造了“迷你大脑”。尽管这些实验室发育的大脑比人脑小一百万倍,但它们是第一个被…

jupyternotebook运行python_jupyter notebook参数化运行python方式

Updates (2019.8.14 19:53)吃饭前用这个方法实战了一下,吃完回来一看好像不太行:跑完一组参数之后,到跑下一组参数时好像没有释放之占用的 GPU,于是 notebook 上的结果,后面好几条都报错说 cuda…

重磅|PPT讲解机器人产业发展现状与未来展望,重磅资料

来源:机器人大讲堂前段时间咱们分享过王喜文博士做的关于《5G》的PPT,大家反映做的很棒,最近王喜文博士在机械工业出版社又出了一本新书:智能:《新一代人工智能发展规划》解读,ISBN:978-7-111-6…

中国之光!中国最酷黑科技30强名单公布!

来源:智慧芽当前的中国正在迎来一个科技大爆发的时代,科技成果输出的速度远远快于经济成长的速度。中国现在每年产出科技成果,居世界第二,且正在高速接近美国。最好的一个证明就是含金量相对较高的PCT国际专利申请量,2…

python为什么没有指针_Python 没有指针,如何解算法题?

👆“Python猫” ,一个值得加星标的公众号 花下猫语: 今天一大早,读者群里又讨论了 Python 的“指针”问题。之前在公众号里发布过樱雨楼小姐姐的《对比 C 和 Python,谈谈指针与引用》,它从概念上有比较清晰…

深度 | 刘群:基于深度学习的自然语言处理,边界在哪里?

来源: AI科技评论 编辑 | Camel四大边界:数据边界、语义边界、符号边界和因果边界当前,深度学习之于自然语言处理,有其局限性。那么它所能起作用的边界在哪里呢?对此问题,我们应当深思。近日,在…