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脚本实现软件的注册功能(机器码+注册码机制)
Oct 09 Python
Windows下安装python2和python3多版本教程
Mar 30 Python
python机器学习理论与实战(六)支持向量机
Jan 19 Python
Python实现模拟登录网易邮箱的方法示例
Jul 05 Python
Sanic框架Cookies操作示例
Jul 17 Python
Python地图绘制实操详解
Mar 04 Python
5款Python程序员高频使用开发工具推荐
Apr 10 Python
Python爬虫实现“盗取”微信好友信息的方法分析
Sep 16 Python
Python使用itcaht库实现微信自动收发消息功能
Jul 13 Python
用python实现一个简单计算器(完整DEMO)
Oct 14 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 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轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
js资料toString 方法
2007/03/13 Javascript
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
技术副厂长岗位职责
2013/12/26 职场文书
大学生党员自我批评
2014/02/14 职场文书
党员实事承诺书
2014/03/26 职场文书
小学语文课后反思精选
2014/04/25 职场文书
大型活动组织方案
2014/05/10 职场文书
开展读书活动总结
2014/06/30 职场文书
快递员岗位职责
2014/09/12 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
2015年财务部工作总结
2015/04/10 职场文书
孩子满月酒答谢词
2015/09/30 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android