python机器学习之支持向量机

本文是基于python第三方库sklearn官方文档
官方文档

首先关于SVM的概念以及大体了解可以参考此篇博文,这里推荐给大家,作者写的很详细,很透彻 。支持向量机通俗导论

1.SVM
SVM英文全称Support Vector Mechine,叫做支持向量机,是一种有监督学习方法,可用于分类,回归,及outlier的检测

SVM的核心即是核函数,核函数是计算两个向量在隐式映射后的空间中的内积函数将核函数形式化定义,如果原始特征内积是这里写图片描述,映射后为这里写图片描述,定义核函数为这里写图片描述
常见的核函数有
线性核函数:这里写图片描述

高斯核函数:这里写图片描述

多项式核函数:这里写图片描述

2.程序实现
前面讲了一些函数,那么这些核函数在用于分类时效果会是如何呢?接下来就是这多个核函数的分类效果比较及程序实现。

2.1数据的选择
这里我选择的数据是iris(鸢尾花数据集),是sklearn库中自带数据集,网上也可下载。其是150*4,样本数是150,每个样本有4个特征,有3种类别。本例中将选取全部150个样本,特征选择为前两个

2.2数据的读取
以下是对sklearn中的iris数据集进行读取的代码实现

import numpy as np
from sklearn import datasets

iris=datasets.load_iris()
X=iris.data[:,:2]    #train set
y=iris.target        #target set

注:对于数据集的读入可自行网上搜索相关知识,这里为方便用已存在函数进行了数据读取。

2.3数据集的可视化
得到了数据集,将每个点在图中显式的表达出来,观察分布状况

import matplotlib.pyplot as plt
plt.figure(figsize=(10,10))
#plt.scatter(X[:,0],X[:,1],c=y)#画出每个样本点,不同颜色表示不同类别                                  
#plt.show()

这里写图片描述

2.4核函数的应用

接下来分别将采用线性核,高斯核,多项式核进行数据集的分类
将用到svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto’, …..)

C:误差项惩罚系数,默认为1

kernel:核函数类型,默认为‘rbf’
高斯核:’rbf’ ,参数gamma会对其产生影响
多项式核:‘poly’ ,参数gamma和degree会对其产生影响
线性核: ‘linear’

其余参数可参见官方文档

from sklearn import svm

#classifier configuration
clf_lin=svm.SVC(C=1.0,kernel='linear').fit(X,y)
clf_rbf=svm.SVC(C=1.0,kernel='rbf',gamma=0.7).fit(X,y)
clf_ply=svm.SVC(C=1.0,kernel='poly',degree=3).fit(X,y)
clfs=[clf_lin,clf_rbf,clf_ply]

#build up mehsgrid
h=0.02
X_min,X_max=X[:,0].min()-1,X[:,0].max()+1
Y_min,Y_max=X[:,1].min()-1,X[:,1].max()+1
XX,YY=np.meshgrid(np.arange(X_min,X_max,h),
                  np.arange(Y_min,Y_max,h))

titles=['linear kernel','rbf kernel','poly kernel']

for i,clf in enumerate(clfs):
    #prdecit the contour position
    z=clf.predict(np.c_[XX.ravel(),YY.ravel()])
    z=z.reshape(XX.shape)

    #plot the points and contour
    subplot(2,2,i+1)
    plt.scatter(X[:,0],X[:,1],c=y)
    plt.contour(XX,YY,z,cmap=plt.cm.Paired)

    #decorate the figure
    plt.xlabel('X_axis')
    plt.ylabel('Y_axis')
    plt.xtick(())
    plt.xtick(())
    plt.title(titles[i])
 plt.show()

运行结果如下
这里写图片描述

贴上完整代码

import numpy as np
from sklearn import datasets
from sklearn import svm
import matplotlib.pyplot as plt

#load iris datasets
iris=datasets.load_iris()
X=iris.data[:,:2]    #train set
y=iris.target        #target set


plt.figure(figsize=(8,8))
#classifier configuration
clf_lin=svm.SVC(C=1.0,kernel='linear').fit(X,y)   #linear kernel
clf_rbf=svm.SVC(C=1.0,kernel='rbf',gamma=0.7).fit(X,y)  #rbf kernel
clf_ply=svm.SVC(C=1.0,kernel='poly',degree=3).fit(X,y)  #poly kernel
clfs=[clf_lin,clf_rbf,clf_ply]

#build up mehsgrid
h=0.02
X_min,X_max=X[:,0].min()-1,X[:,0].max()+1
Y_min,Y_max=X[:,1].min()-1,X[:,1].max()+1
XX,YY=np.meshgrid(np.arange(X_min,X_max,h),np.arange(Y_min,Y_max,h))
title=['linear kernel','rbf kernel','poly kernel']

#plot the hyperplane
for i,clf in enumerate(clfs):
    z=clf.predict(np.c_[XX.ravel(),YY.ravel()])
    z=z.reshape(XX.shape)
    plt.subplots_adjust(wspace=0.4, hspace=0.4)
    plt.subplot(2,2,i+1)
    plt.scatter(X[:,0],X[:,1],c=y)
    plt.contour(XX,YY,z,cmap=plt.cm.Paired)

    #decorate the figure
    plt.xlabel('X-axis')
    plt.ylabel('Y-axis')
    plt.title(title[i])
    plt.xticks(())
    plt.yticks(())
plt.show()

以上就是对svm作为分类器时在不同核函数下的结果,欢迎大家一起交流学习

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值