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制作简单的钢琴程序的教程
Apr 01 Python
python3 与python2 异常处理的区别与联系
Jun 19 Python
基于Python os模块常用命令介绍
Nov 03 Python
python os用法总结
Jun 08 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
Python引用计数操作示例
Aug 23 Python
用Python编写一个高效的端口扫描器的方法
Dec 20 Python
python sqlite的Row对象操作示例
Sep 11 Python
pytorch torch.expand和torch.repeat的区别详解
Nov 05 Python
Python3读取和写入excel表格数据的示例代码
Jun 09 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
python 如何执行控制台命令与操作剪切板
May 20 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 采集程序原理分析篇
2010/03/05 PHP
PHP 一个随机字符串生成代码
2010/05/26 PHP
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
php blowfish加密解密算法
2016/07/02 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
实用框架(iframe)操作代码
2014/10/23 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
Python Sleep休眠函数使用简单实例
2015/02/02 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
Python读取yaml文件的详细教程
2020/07/21 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
python IP地址转整数
2020/11/20 Python
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
应届毕业生个人自荐信范文
2013/11/30 职场文书
公司担保书范文
2014/05/21 职场文书
煤矿开采专业求职信
2014/07/08 职场文书
关于教师节的广播稿
2014/09/10 职场文书
2014最新离职证明范本
2014/09/12 职场文书
毕业感言怎么写
2015/07/31 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
Python基础之进程详解
2021/05/21 Python