简介
支持向量机 (Support Vector Machine) 是由Vapnik等人于1995年提出来的,之后随着统计理论的发展,支持向量机 SVM 也逐渐受到了各领域研究者的关注,在很短的时间就得到了很广泛的应用。
支持向量机是被公认的比较优秀的分类模型。同时,在支持向量机的发展过程中,其理论方面的研究得到了同步的发展,为支持向量机的研究提供了强有力的理论支撑。
本实训项目主要围绕支持向量机的原理和技术进行介绍,并基于实际案例进行实战实训。

线性支持向量机

#encoding=utf8
from sklearn.svm import LinearSVCdef linearsvc_predict(train_data,train_label,test_data):'''input:train_data(ndarray):训练数据train_label(ndarray):训练标签output:predict(ndarray):测试集预测标签'''#********* Begin *********# clf = LinearSVC(dual=False)clf.fit(train_data,train_label)predict = clf.predict(test_data)#********* End *********# return predict

非线性支持向量机

#encoding=utf8
from sklearn.svm import SVCdef svc_predict(train_data,train_label,test_data,kernel):'''input:train_data(ndarray):训练数据train_label(ndarray):训练标签kernel(str):使用核函数类型:'linear':线性核函数'poly':多项式核函数'rbf':径像核函数/高斯核output:predict(ndarray):测试集预测标签'''#********* Begin *********# clf =SVC(kernel=kernel)clf.fit(train_data,train_label)predict = clf.predict(test_data)#********* End *********# return predict

序列最小优化算法

#encoding=utf8
import numpy as np
class smo:def __init__(self, max_iter=100, kernel='linear'):'''input:max_iter(int):最大训练轮数kernel(str):核函数,等于'linear'表示线性,等于'poly'表示多项式'''self.max_iter = max_iterself._kernel = kernel#初始化模型def init_args(self, features, labels):self.m, self.n = features.shapeself.X = featuresself.Y = labelsself.b = 0.0# 将Ei保存在一个列表里self.alpha = np.ones(self.m)self.E = [self._E(i) for i in range(self.m)]# 错误惩罚参数self.C = 1.0#********* Begin *********#    #kkt条件    def _KKT(self, i):y_g = self._g(i)*self.Y[i]if self.alpha[i] == 0:return y_g >= 1elif 0 < self.alpha[i] < self.C:return y_g == 1else:return y_g <= 1# g(x)预测值,输入xi(X[i])def _g(self, i):r = self.bfor j in range(self.m):r += self.alpha[j]*self.Y[j]*self.kernel(self.X[i], self.X[j])return r# 核函数,多项式添加二次项即可def kernel(self, x1, x2):if self._kernel == 'linear':return sum([x1[k]*x2[k] for k in range(self.n)])elif self._kernel == 'poly':return (sum([x1[k]*x2[k] for k in range(self.n)]) + 1)**2    return 0# E(x)为g(x)对输入x的预测值和y的差def _E(self, i):return self._g(i) - self.Y[i]#初始alphadef _init_alpha(self):# 外层循环首先遍历所有满足0<a<C的样本点,检验是否满足KKTindex_list = [i for i in range(self.m) if 0 < self.alpha[i] < self.C]# 否则遍历整个训练集non_satisfy_list = [i for i in range(self.m) if i not in index_list]index_list.extend(non_satisfy_list)for i in index_list:if self._KKT(i):continueE1 = self.E[i]# 如果E2是+,选择最小的;如果E2是负的,选择最大的if E1 >= 0:j = min(range(self.m), key=lambda x: self.E[x])else:j = max(range(self.m), key=lambda x: self.E[x])return i, j#选择alpha参数   def _compare(self, _alpha, L, H):if _alpha > H:return Helif _alpha < L:return Lelse:return _alpha#训练def fit(self, features, labels):'''input:features(ndarray):特征label(ndarray):标签'''self.init_args(features, labels)for t in range(self.max_iter):i1, i2 = self._init_alpha()# 边界if self.Y[i1] == self.Y[i2]:L = max(0, self.alpha[i1]+self.alpha[i2]-self.C)H = min(self.C, self.alpha[i1]+self.alpha[i2])else:L = max(0, self.alpha[i2]-self.alpha[i1])H = min(self.C, self.C+self.alpha[i2]-self.alpha[i1])E1 = self.E[i1]E2 = self.E[i2]# eta=K11+K22-2K12eta = self.kernel(self.X[i1], self.X[i1]) + self.kernel(self.X[i2], self.X[i2]) - 2*self.kernel(self.X[i1], self.X[i2])if eta <= 0:continuealpha2_new_unc = self.alpha[i2] + self.Y[i2] * (E2 - E1) / etaalpha2_new = self._compare(alpha2_new_unc, L, H)alpha1_new = self.alpha[i1] + self.Y[i1] * self.Y[i2] * (self.alpha[i2] - alpha2_new)b1_new = -E1 - self.Y[i1] * self.kernel(self.X[i1], self.X[i1]) * (alpha1_new-self.alpha[i1]) - self.Y[i2] * self.kernel(self.X[i2], self.X[i1]) * (alpha2_new-self.alpha[i2])+ self.b b2_new = -E2 - self.Y[i1] * self.kernel(self.X[i1], self.X[i2]) * (alpha1_new-self.alpha[i1]) - self.Y[i2] * self.kernel(self.X[i2], self.X[i2]) * (alpha2_new-self.alpha[i2])+ self.b if 0 < alpha1_new < self.C:b_new = b1_newelif 0 < alpha2_new < self.C:b_new = b2_newelse:# 选择中点b_new = (b1_new + b2_new) / 2# 更新参数self.alpha[i1] = alpha1_newself.alpha[i2] = alpha2_newself.b = b_newself.E[i1] = self._E(i1)self.E[i2] = self._E(i2)       def predict(self, data):'''input:data(ndarray):单个样本output:预测为正样本返回+1,负样本返回-1'''r = self.bfor i in range(self.m):r += self.alpha[i] * self.Y[i] * self.kernel(data, self.X[i])return 1 if r > 0 else -1#********* End *********#

支持向量回归

#encoding=utf8
from sklearn.svm import SVRdef svr_predict(train_data,train_label,test_data):'''input:train_data(ndarray):训练数据train_label(ndarray):训练标签output:predict(ndarray):测试集预测标签'''#********* Begin *********#svr = SVR(kernel='rbf',C=100,gamma= 0.001,epsilon=0.1)svr.fit(train_data,train_label)predict = svr.predict(test_data)#********* End *********#return predict

感谢大家的支持!!!!!!!!!!!

机器学习之支持向量回归(SVR)相关推荐

  1. 机器学习之支持向量回归(SVR)——南京审计大学金审学院

    第1关:线性可分支持向量机 本关任务:根据本节课所学知识完成本关所设置的选择题. 第1题 B 第2题 B 第3题 C 第4题 B 第5题 D 第6题 AC 第2关:线性支持向量机 本关任务:使用skl ...

  2. 机器学习——支持向量回归(SVR)

    机器学习--支持向量回归(SVR) educoder平台练习题 如果博客中图片加载失败可点击链接跳转至实训详情 https://www.educoder.net/shixuns/b6yi97f2/ch ...

  3. 【机器学习系列】之支持向量回归SVR

    作者:張張張張 github地址:https://github.com/zhanghekai [转载请注明出处,谢谢!] [机器学习系列]之SVM硬间隔和软间隔 [机器学习系列]之SVM核函数和SMO ...

  4. 机器学习西瓜书笔记:软间隔和支持向量回归SVR

    1.首先由SVM问题(最大间隔超平面模型):所有样本都可以正确分类的最优化问题,引入软间隔SVM(允许分类错误)的最优化问题,即需要添加损失函数(样本不满足约束的程度,或者说分类错误的程度),然后最优 ...

  5. 【视频】支持向量机SVM、支持向量回归SVR和R语言网格搜索超参数优化实例

    最近我们被客户要求撰写关于SVM的研究报告,包括一些图形和统计输出. 什么是支持向量机 (SVM)? 我们将从简单的理解 SVM 开始. [视频]支持向量机SVM.支持向量回归SVR和R语言网格搜索超 ...

  6. ❤️解决非线性回归问题的机器学习方法总结:多项式线性模型、广义线性(GAM)模型、回归树模型、支持向量回归(SVR)模型

    文章目录 前言 多项式回归模型 概念解释: sklearn实现多项式回归模型: 广义线性可加(GAM)模型 概念解释: pygam实现广义线性可加模型: GAM模型的优点与不足: 回归树模型 概念解释 ...

  7. 基于DDTBOX,使用线性支持向量回归(SVR)从ERP数据中解码连续变量

    导读 事件相关电位(ERP)数据的多变量分类分析是预测认知变量的强大工具.然而,分类通常仅限于分类变量,并未充分利用连续数据,如反应时间.反应力或主观评分.另一种方法是支持向量回归(SVR),它使用单 ...

  8. 使用最大离散重叠小波变换MODWT和支持向量回归 SVR的金融时间序列预测

    本例使用的数据链接如下:https://www.histdata.com/download-free-forex-historical-data/?/ascii/tick-data-quotes/AU ...

  9. [翻译] 支持向量回归SVR的介绍

    X. Introduction 本文先翻译一下: http://www.saedsayad.com/support_vector_machine_reg.htm Support Vector Mach ...

  10. 机器学习之支持向量回归(SVR)预测房价—基于python

    大家好,我是带我去滑雪! 本期使用爬取到的有关房价数据集data.csv,使用支持向量回归(SVR)方法预测房价.该数据集中"y1"为响应变量,为房屋总价,而x1-x9为特征变量, ...

最新文章

  1. 吴裕雄 10-MySQL插入数据
  2. git 清除 另一个git进程似乎在这个仓库中运行。。。。。
  3. RubyMine 1.0加入Ruby IDE大家庭
  4. java 监听窗口是否改变_JAVA项目监听文件是否发生变化
  5. React 组件间传值的几种情形
  6. 爬虫python区别_Python爬虫-04:贴吧爬虫以及GET和POST的区别
  7. SDK里报错[NSConcreteMutableData wbsdk_base64EncodedString]
  8. JdbcTemplate查询返回JavaBean的几种方法
  9. Application.mk文件官方使用说明
  10. 计算机专业行业分析300字,计算机专业毕业生自我鉴定范文300字(精选5篇)
  11. Matlab图像识别/检索系列(8)—开源工具介绍之vlfeat
  12. layui表头样式_Layui表格好看样式
  13. 035 浅谈WebGame
  14. Python微信公众号后台开发教程001
  15. 你画过哪些好玩儿的作品?
  16. 华为x86服务器销售额,x86服务器销量排行
  17. 简述窄带调频和宽带调频的_宽带调频和窄带调频的简单区别方法
  18. 中文.com域名如何申请 什么是.com域名过期
  19. 利用Joypy绘制嵴线图的案例
  20. cass怎么添加指北针图例_答疑|CASS怎么添加图例?

热门文章

  1. 802.1QCC TSN配置模型
  2. IP地址快速切换(转)
  3. 大前端完整学习路线(完整版)
  4. 图文详解Modbus-RTU协议
  5. 安川机器人原点丢失_安川机器人原点及校准浅析
  6. 小米路由2+安装+php,小米路由器作为二级路由,完美使用APP和文件共享
  7. 给树莓派安装手柄驱动
  8. android 自定义圆形进度条,Android自定义控件实现圆形进度条
  9. ProgressBar 圆形进度条
  10. java 屏幕坐标_Java的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点。...