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中的super用法详解
May 28 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
Django用户身份验证完成示例代码
Apr 03 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
May 25 Python
python 利用opencv实现图像网络传输
Nov 12 Python
python利用文件时间批量重命名照片和视频
Feb 09 Python
python基础学习之递归函数知识总结
May 26 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 30 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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的栏目导航程序
2006/10/09 PHP
php二分法在IP地址查询中的应用
2008/08/12 PHP
php学习之简单计算器实现代码
2011/06/09 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
js css 实现遮罩层覆盖其他页面元素附图
2014/09/22 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
Python检测网络延迟的代码
2018/05/15 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
RealTek面试题
2016/06/28 面试题
党校学习自我鉴定
2014/02/24 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
施工安全员岗位职责
2015/04/11 职场文书
Spring Boot实现文件上传下载
2022/08/14 Java/Android