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 THREADING模块中的JOIN()方法深入理解
Feb 18 Python
Python map和reduce函数用法示例
Feb 26 Python
python实现的简单猜数字游戏
Apr 04 Python
python2.7 mayavi 安装图文教程(推荐)
Jun 22 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
Python开发最牛逼的IDE——pycharm
Aug 01 Python
Python制作微信好友背景墙教程(附完整代码)
Jul 17 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 Python
Python实现FLV视频拼接功能
Jan 21 Python
python对XML文件的操作实现代码
Mar 27 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 Python
全面介绍python中很常用的单元测试框架unitest
Dec 14 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
php daodb插入、更新与删除数据
2009/03/19 PHP
PHP函数学习之PHP函数点评
2012/07/05 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
2015/12/03 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
深入理解node.js http模块
2018/01/24 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
p5.js绘制旋转的正方形
2019/10/23 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
跟老齐学Python之编写类之三子类
2014/10/11 Python
python学生管理系统学习笔记
2019/03/19 Python
利用Django模版生成树状结构实例代码
2019/05/19 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
《花的勇气》教后反思
2014/02/12 职场文书
党员组织关系介绍信
2014/02/13 职场文书
元旦红领巾广播稿
2014/02/19 职场文书
演讲稿格式范文
2014/05/19 职场文书
运动会广播稿100字
2014/09/14 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
女性健康知识讲座通知
2015/04/23 职场文书
消防宣传语大全
2015/07/13 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python
ant design vue的form表单取值方法
2022/06/01 Vue.js