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 06 Python
Python 开发Activex组件方法
Nov 08 Python
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
python连接mysql实例分享
Oct 09 Python
python爬取拉勾网职位数据的方法
Jan 24 Python
Python基于opencv的图像压缩算法实例分析
May 03 Python
对python使用http、https代理的实例讲解
May 07 Python
Python smtplib实现发送邮件功能
May 22 Python
python读取几个G的csv文件方法
Jan 07 Python
Python 如何创建一个线程池
Jul 28 Python
详解Python中import机制
Sep 11 Python
python用700行代码实现http客户端
Jan 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
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
javascript加号"+"的二义性说明
2013/03/04 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
2014/06/05 Javascript
js动态切换图片的方法
2015/01/20 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
简单的三步vuex入门
2018/05/20 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
在Sublime Editor中配置Python环境的详细教程
2020/05/03 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
最好的商品表达自己:Cafepress
2019/09/04 全球购物
实习自荐信
2013/10/13 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
特种设备安全管理制度
2015/08/06 职场文书
nginx里的rewrite跳转的实现
2021/03/31 Servers
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL