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机器学习》

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值