Python 支持向量机分类器的实现


Posted in Python onJanuary 15, 2020

支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)

SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险(structural risk),是一个具有稀疏性和稳健性的分类器。SVM可以通过核方法(kernel method)进行非线性分类,是常见的核学习(kernel learning)方法之一。

SVM被提出于1964年,在二十世纪90年代后得到快速发展并衍生出一系列改进和扩展算法,在人像识别、文本分类等模式识别(pattern recognition)问题中有得到应用。

import numpy as np
from scipy import io as spio
from matplotlib import pyplot as plt
from sklearn import svm
 
 
def SVM():
  '''data1——线性分类'''
  data1 = spio.loadmat('data1.mat')
  X = data1['X']
  y = data1['y']
  y = np.ravel(y)
  plot_data(X, y)
 
  model = svm.SVC(C=1.0, kernel='linear').fit(X, y) # 指定核函数为线性核函数
  plot_decisionBoundary(X, y, model) # 画决策边界
  '''data2——非线性分类'''
  data2 = spio.loadmat('data2.mat')
  X = data2['X']
  y = data2['y']
  y = np.ravel(y)
  plt = plot_data(X, y)
  plt.show()
 
  model = svm.SVC(gamma=100).fit(X, y) # gamma为核函数的系数,值越大拟合的越好
  plot_decisionBoundary(X, y, model, class_='notLinear') # 画决策边界
 
 
# 作图
def plot_data(X, y):
  plt.figure(figsize=(10, 8))
  pos = np.where(y == 1) # 找到y=1的位置
  neg = np.where(y == 0) # 找到y=0的位置
  p1, = plt.plot(np.ravel(X[pos, 0]), np.ravel(X[pos, 1]), 'ro', markersize=8)
  p2, = plt.plot(np.ravel(X[neg, 0]), np.ravel(X[neg, 1]), 'g^', markersize=8)
  plt.xlabel("X1")
  plt.ylabel("X2")
  plt.legend([p1, p2], ["y==1", "y==0"])
  return plt
 
 
# 画决策边界
def plot_decisionBoundary(X, y, model, class_='linear'):
  plt = plot_data(X, y)
 
  # 线性边界    
  if class_ == 'linear':
    w = model.coef_
    b = model.intercept_
    xp = np.linspace(np.min(X[:, 0]), np.max(X[:, 0]), 100)
    yp = -(w[0, 0] * xp + b) / w[0, 1]
    plt.plot(xp, yp, 'b-', linewidth=2.0)
    plt.show()
  else: # 非线性边界
    x_1 = np.transpose(np.linspace(np.min(X[:, 0]), np.max(X[:, 0]), 100).reshape(1, -1))
    x_2 = np.transpose(np.linspace(np.min(X[:, 1]), np.max(X[:, 1]), 100).reshape(1, -1))
    X1, X2 = np.meshgrid(x_1, x_2)
    vals = np.zeros(X1.shape)
    for i in range(X1.shape[1]):
      this_X = np.hstack((X1[:, i].reshape(-1, 1), X2[:, i].reshape(-1, 1)))
      vals[:, i] = model.predict(this_X)
 
    plt.contour(X1, X2, vals, [0, 1], color='blue')
    plt.show()
 
 
if __name__ == "__main__":
  SVM()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python矩阵常见运算操作实例总结
Sep 29 Python
Anaconda入门使用总结
Apr 05 Python
python数字图像处理之骨架提取与分水岭算法
Apr 27 Python
Python DataFrame 设置输出不显示index(索引)值的方法
Jun 07 Python
对python函数签名的方法详解
Jan 22 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
使用python无账号无限制获取企查查信息的实例代码
Apr 17 Python
Pycharm中配置远程Docker运行环境的教程图解
Jun 11 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 Python
教你怎么用python实现字符串转日期
May 24 Python
深入理解Pytorch微调torchvision模型
Nov 11 Python
pytorch-神经网络拟合曲线实例
Jan 15 #Python
Pytorch中的VGG实现修改最后一层FC
Jan 15 #Python
详解Python3 中的字符串格式化语法
Jan 15 #Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 #Python
pytorch三层全连接层实现手写字母识别方式
Jan 14 #Python
Python实现bilibili时间长度查询的示例代码
Jan 14 #Python
基于python监控程序是否关闭
Jan 14 #Python
You might like
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
js中Math之random,round,ceil,floor的用法总结
2013/12/26 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
详解JavaScript树结构
2017/01/09 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
python读取csv和txt数据转换成向量的实例
2019/02/12 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
Python Celery多队列配置代码实例
2019/11/22 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
Python原始套接字编程实例解析
2020/01/29 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
环境工程求职简历的自我评价范文
2013/10/24 职场文书
信息工作经验交流材料
2014/05/28 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
公司奖励通知
2015/04/21 职场文书
党支部半年考察意见
2015/06/01 职场文书