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()
(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()
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()
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()
总结:
SVM支持向量机的优势与不足:
如果数据集中的样本数量在1万以内,SVM都能驾驭的了,但如果样本数量超过10万的话,SVM就会非常的耗费时间和内存.
SVM还有一个短板,就是对数据预处理和参数调节要求非常高.
SVM支持向量机算法中,有3个参数是比较重要的:
第一个是核函数的选择
第二个是核函数的参数
第三个是正则化参数C
文章引自 : 《深入浅出python机器学习》
python支持向量机_支持向量机(SVM)Python实现相关推荐
- 比python好_这就是为什么Python比R更好的原因
目录 介绍 这就是为什么 摘要 介绍 虽然说Python比R更好对我而言是正确的,但对您来说可能并非如此. 当然,您可能会因为各种原因认为R比Python更有用. 即使您反对我的声明,我仍然希望开始进 ...
- 2018年python薪资_最好的Python:2017和2018年至今我最喜欢的文章集
2018年python薪资 我打算发布此收藏集 (My intention with publishing this collection) Last year I only used Medium ...
- python 切片_全面解读Python高级特性切片
大家好,欢迎来到Crossin的编程教室! 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slic ...
- 学习python课程_想学习Python吗? 这是我们的免费4小时互动课程
学习python课程 Python is a popular, versatile and easy-to-learn language. It's the go-to language for AI ...
- python股市_如何使用python和破折号创建仪表板来主导股市
python股市 始终关注大局 (Keep Your Eyes on the Big Picture) I've been fascinated with the stock market since ...
- 有趣的超短python代码_有趣的python精短程序
python可以简单优美,也很有趣,下面是收集的例子: 1.一句话开始一个http的文件服务器: $ python -m SimpleHTTPServer Serving HTTP on 0.0.0. ...
- 少儿编程python教材_少儿编程|Python环境安装
一.为什么要学Python? 小学 山东,浙江,北京地区小学已将Python内容纳入教材 高中 浙江省已将信息技术教材编程语言替换为Python 大学 计算机二级考试加入"Python 语言 ...
- 微软发布的python教程_微软发布Python 教程《Develop with Python on Windows》
微软近日上线了一套 Python 教程<Develop with Python on Windows>,文档内容包括设置 Python 开发环境.在 Windows 与 WSL 子系统中安 ...
- python竞赛_浅谈Python在信息学竞赛中的运用及Python的基本用法
浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...
最新文章
- 使用IDEA搭建第一个SpringBoot程序
- mysql1064 at line 6,MySQL错误1064语法,但一切似乎都很好
- 首届“开悟AI+游戏高校大赛”启动
- 无法从ftp服务器上复制文件格式,ftp服务器上复制不了文件格式
- 如何解决忙死领导,闲死下属的问题?
- Javascript + Servlet的鸿沟如何抹平以构建富客户端应用?[SOS]
- MySQL导入与导出备份详解
- 经典人生感悟 看看你少了那一条
- NIO系列六:流行 NIO Framework netty 和 mina 性能测评与分析
- SQL Server 不允许保存更改。您所做的更改要求删除并重新创建一下表。您对无法重新创建的表进行了更改或启用了“阻止保存要求重新创建表的更改”选项
- 2021西工大计算机专硕,计算机专硕2021考研形势分析,考研小白戳
- 大学计算机信息技术课程评价,信息技术课程学习心得体会精选范文
- python爬取豆瓣top250电影名称_Python--爬取豆瓣TOP250电影信息
- java邮件客户端_java实现POP3邮件客户端
- HTTP 405 错误 – 方法不被允许 (Method not allowed)【转载】
- C++基础知识 —— 内存分区模型、引用、函数重载、类和继承、this指针、友元、多态、文件操作
- 第26课:个人高效的秘籍 OKR 工作法
- Google最新VR(sdk的诞生)
- 《编译原理》(一)绪论
- 计算机的基础操作知识试题,[计算机基本操作知识]计算机操作系统基础知识试题...
热门文章
- TCP程序流程及服务器客户端
- spark调用python_在MRS集群中使用Python3.7运行PySpark程序,调用RDD的take函数报错处理...
- 您的DST大礼包请查收
- 【完结】史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(四)
- Redis系列教程(八):分布式锁的由来、及Redis分布式锁的实现详解
- 2021年北京交通大学925数据结构考研真题回忆版
- 12 计算机组成原理第七章 输入/输出系统 中断系统
- laravel的重定向
- winfrom导出DataGridView为Excel方法
- LeetCode 876 Middle of the Linked List 解题报告