支持向量机 - 从原理到算法的实现

思想:寻找能够成功分开两类样本并且具有最大分类间隔的最优超平面。

1.原理解析

空间中任何一个平面的方程都可以表示为wx+b =0,如上图,设最优超平面方程H为wx+b=0,支持向量x-到H的距离为\frac{wx_{-}+b}{|w|},要使分类间隔最大,即该距离最大,而该距离只与|w|有关,分子为一个常数,为了简单优美,设分子常数为-1,则H1平面方程为wx+b = -1,同理H2平面方程为wx+b = 1。

则H1H2间的距离为(  -  ) . = 

间隔最大等价于最小化,故目标函数为J(w)= 

这个编辑器很难用,不想打公式了,直接上草稿 :

 

 

2.实例

  1. #1、读入数据
  2. import numpy as np
  3. dataList = []
  4. labelList = []
  5. def loadData(fileName):
  6. f = open(fileName)
  7. for line in f.readlines():
  8. lineStr = line.split('\t')
  9. dataList.append([float(lineArr[0]),float(lineArr[1])])
  10. labelList.append(float(lineArr[2]))
  11. return dataList,labelList
  12. dataList,labelList = loadData('testSet.txt')
  1. #2、训练支持向量机
  2. from sklearn import svm
  3. #基于libsvm工具箱,SVC非线性支持向量分类,可通过核定义其核函数,如‘linear’为线性,‘rbf’为径向基核函数
  4. clf = svm.SVC(kernel='linear')
  5. clf.fit(dataList,labelList)#训练

 

  1. #3、预测
  2. clf.predict([[7.5,-1.5]])#预测类别
  3. clf.decision_function([[7.5,-1.5]])#该SVC方法decision_function为每个样本提供每个类别的分数相当于回归
  4. #支持向量
  5. clf.support_vectors_#获得支持向量
  6. clf.support_#获得支持向量索引
  7. clf.n_support_#获得支持向量属于不同类别的个数

 

  1. #4、绘制决策边界和支持向量
  2. labelArr = np.array(labelList)
  3. x_min, x_max = dataArr[:, 0].min() - 1, dataArr[:, 0].max() + 1
  4. y_min, y_max = dataArr[:, 1].min() - 1, dataArr[:, 1].max() + 1
  5. xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))#meshgrid在空间上取点
  6. Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])#ravel平铺,相当于np.hstack(xx)
  7. row = len(np.arange(y_min,y_max,0.02))
  8. col = len(np.arange(x_min,x_max,0.02))
  9. Z = Z.reshape([row,col])
  10. #plt.cm中cm全称表示colormap,paired表示两个两个相近色彩输出,比如浅蓝、深蓝;浅红、深红;浅绿,深绿这种
  11. plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
  12. plt.scatter(dataArr[:, 0], dataArr[:, 1], c=labelList)#画出数据点
  13. plt.scatter(dataArr[clf.support_,0],dataArr[clf.support_,1],c = 'red',s = 100,marker='o')#画出支持向量

				<script>(function(){function setArticleH(btnReadmore,posi){var winH = $(window).height();var articleBox = $("div.article_content");var artH = articleBox.height();if(artH > winH*posi){articleBox.css({'height':winH*posi+'px','overflow':'hidden'})btnReadmore.click(function(){articleBox.removeAttr("style");$(this).parent().remove();})}else{btnReadmore.parent().remove();}}var btnReadmore = $("#btn-readmore");if(btnReadmore.length>0){if(currentUserName){setArticleH(btnReadmore,3);}else{setArticleH(btnReadmore,1.2);}}})()</script></article>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Struts2初始化过程代码分析

根据web.xml的配置 调用FilterDispatcher.init(FilterConfig filterConfig) 1. 创建org.apache.struts2.Dispatcher&#xff0c;并调用init()方法 1.1. 创建com.opensymphony.xwork2.config.ConfigurationManager,其中属性List<ContainerProvider> containerProviders存放…

LeetCode 1292. 元素和小于等于阈值的正方形的最大边长(DP)

1. 题目 给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold。 请你返回元素总和小于或等于阈值的正方形区域的最大边长&#xff1b; 如果没有这样的正方形区域&#xff0c;则返回 0 。 示例 1&#xff1a; 输入&#xff1a;mat [[1,1,3,2,4,3,2],[1,1,3,2,4,3,2],[…

从这十大算法开始学习机器学习与建模

本文介绍了机器学习新手需要了解的 10 大算法&#xff0c;包括线性回归、Logistic 回归、朴素贝叶斯、K 近邻算法等。 在机器学习中&#xff0c;有一种叫做「没有免费的午餐」的定理。简而言之&#xff0c;它指出没有任何一种算法对所有问题都有效&#xff0c;在监督学习&…

.NET 动态脚本语言Script.NET系列文章汇总 非常精彩的应用举例

对于Script.NET,我已经写了三篇文章来介绍它&#xff0c;文章汇总如下 .NET 动态脚本语言Script.NET 入门指南 Quick Start .NET 动态脚本语言Script.NET 开发指南 .NET 动态脚本语言Script.NET 应用举例 希望这三篇文章能帮助你了解Script.NET。 下面的例子&#xff0c;继续讲…

异常值处理 - iterrows()对 DataFrame 进行遍历,并修改遍历中的异常值 - Python代码

先要有一个很简单的被命名为 data 的表&#xff1a; 第三列是一个名曰周杰伦的人历年来每个月的月薪&#xff0c;其中2016年月薪10万&#xff0c;纵观他历年来的月薪基本不超过3万&#xff08;显然他不是我的偶像胖伦&#xff09;&#xff0c;因此对于这个人来说月薪10万是有些…

LeetCode 44. 通配符匹配(DP)

1. 题目 给定一个字符串 (s) 和一个字符模式 (p) &#xff0c;实现一个支持 ? 和 * 的通配符匹配。 ? 可以匹配任何单个字符。* 可以匹配任意字符串&#xff08;包括空字符串&#xff09;。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空&#xff0c;且只包含从 a-…

HtmlAgilityPack/xpath

【转载】HTML解析利器HtmlAgilityPack在网上发现了一个.NET下的HTML解析类库HtmlAgilityPack。HtmlAgilityPack是一个支持用XPath来解析HTML的类库&#xff0c;在花了一点时间学习了解HtmlAgilityPack的API和XPath之后&#xff0c;周公就做了一个简单的工具完成了这个功能&…

MVVM更容易内存泄露吗?

由于MVVM是把View, ViewModel, Model紧紧绑定在一起的模式&#xff0c;特别视图和视图模型通过实现观察者模式双向绑定和NotifyPropertyChanged事件&#xff0c;似乎更加容易造成内存泄露/内存不释放。网上也有这种说法。真的是这样的吗&#xff1f;我们来实际测试一下。 实际测…

分组统计 - 不同时间颗粒度下,按照秒、分、时、日、周、月、季度、年 GROUP BY 分组统计 - (MySQL)

数据处理时&#xff0c;经常需要&#xff1a;统计不同时间粒度下的数据分布情况。 例如&#xff0c;网站每天&#xff08;or每小时&#xff09;的访问量&#xff0c;周杰伦每年&#xff08;or每季度 or每月&#xff09;的收入等。 首先有一个表叫&#xff1a;table_test&…

LeetCode 971. 翻转二叉树以匹配先序遍历(DFS)

1. 题目 给定一个有 N 个节点的二叉树&#xff0c;每个节点都有一个不同于其他节点且处于 {1, …, N} 中的值。 通过交换节点的左子节点和右子节点&#xff0c;可以翻转该二叉树中的节点。 考虑从根节点开始的先序遍历报告的 N 值序列。将这一 N 值序列称为树的行程。 &…

缺失值处理 - 获取一段时间内所有日期的列表 - (Python、MySQL)

有的时候做数据清洗的时候 &#xff0c; 如果表中数据在某一天没有记录&#xff0c;但是业务要求不能有缺失日期&#xff0c;那么就需要我们将这些缺失日期补上。这个前提就是我们先要有一张包含所有日期的列表&#xff08;作为左表&#xff09;&#xff0c;供我们进行匹配&…

[Kaggle] Digit Recognizer 手写数字识别

文章目录1. Baseline KNN2. Try SVCDigit Recognizer 练习地址 相关博文&#xff1a;[Hands On ML] 3. 分类&#xff08;MNIST手写数字预测&#xff09; 1. Baseline KNN 读取数据 import pandas as pd train pd.read_csv(train.csv) X_test pd.read_csv(test.csv)特征、…

Power BI 数据分析可视化软件入门教程

入 门 l Power BI 的引导学习 什么是Power BI&#xff1f; Power BI 是软件服务、应用和连接器的集合&#xff0c;它们协同工作以将相关数据来源转换为连贯的视觉逼真的交互式见解。 Power BI 简单且快速&#xff0c;能够从 Excel 电子表格或本地数据库创建快速见解。同…

分组统计 - DataFrame.groupby() 所见的各种用法 - Python代码

目录 所见 1 &#xff1a;日常用法 所见 2 &#xff1a;解决groupby.sum() 后层级索引levels上移的问题 所见 3 &#xff1a;解决groupby.apply() 后层级索引levels上移的问题 所见 4 &#xff1a;groupby函数的分组结果保存成DataFrame groupby的函数定义&#xff1a; Da…

线性回归 - 多元线性回归案例 - 分析步骤、输出结果详解、与Python的结果对比 -(SPSS建模)

现在用 Python 写线性回归的博客都快烂大街了&#xff0c;为什么还要用 SPSS 做线性回归呢&#xff1f;这就来说说 SPSS 存在的原因吧。 SPSS 是一个很强大的软件&#xff0c;不用编程&#xff0c;不用调参&#xff0c;点巴两下就出结果了&#xff0c;而且出来的大多是你想要的…

R12 应付款模块(AP):预付款(prepayment)的标准处理流程

预付款的概念 财务会计的解释&#xff1a; 企业对于某些物资有时需要采取预先订购的方式&#xff0c;即按照购货合同规定预付一部分货款。这部分预先付给供货单位的订货款就构成了企业的预付账款。&#xff08;来自会计学概论&#xff0c;要区分定金和预付款的区别&#xff01;…

LeetCode 391. 完美矩形(set检查顶点+面积检查)

1. 题目 我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域。 每个矩形用左下角的点和右上角的点的坐标来表示。例如&#xff0c; 一个单位正方形可以表示为 [1,1,2,2]。 ( 左下角的点的坐标为 (1, 1) 以及右上角的点的坐标为 (2, 2) )。…

时间序列 - 案例按步骤详解 -(SPSS建模)

时间序列简单的说就是各时间点上形成的数值序列&#xff0c;通过观察历史数据的变化规律预测未来的值。在这里需要强调一点的是&#xff0c;时间序列分析并不是关于时间的回归&#xff0c;它主要是研究自身的变化规律的。 准备工作&#xff1a;SPSS - 中文版 SPSS 22.0 软件下…

特征计算 - 遍历求值提速 6 万倍 lambda...if...else(if...else...) +map() 对比 iterrows() - Python代码

Python 进行 DataFrame 数据处理的过程中&#xff0c;需要判断某一列中的值&#xff08;条件&#xff09;&#xff0c;然后对其他两列或三列进行求和&#xff08;均值/最值&#xff09;等运算&#xff0c;并把运算结果存储在新的一列中。干说可能觉得比较晕&#xff0c;我们来看…

非线性回归 - 案例按步骤详解 -(SPSS建模)

在上一篇时间序列的文章中&#xff0c;偶然发现另一份数据的整体趋势很符合非线性回归关系&#xff0c;那么就顺势写一篇非线性回归案例的文章吧。 准备工作&#xff1a;SPSS - 中文版 SPSS 22.0 软件下载与安装教程 - 【附产品授权许可码&#xff0c;永久免费】 数据解释&am…