机器学习-支持向量回归

机器学习-支持向量回归一,介绍支持向量回归(SVR)是期望找到一条线,能让所有的点都尽量逼近这条线,从而对数据做出预测。SVR的基本思路和SVM中是一样的,在ϵ−SVR需要解决如下的优化问题:                                       其回归图形如下:           …

大家好,又见面了,我是你们的朋友全栈君。

一,介绍

支持向量回归(SVR)是期望找到一条线,能让所有的点都尽量逼近这条线,从而对数据做出预测。

SVR的基本思路和SVM中是一样的,在ϵ−SVR需要解决如下的优化问题:

                                                                            机器学习-支持向量回归

其回归图形如下:

                                          机器学习-支持向量回归

如上左图可知,在灰色区域,是正确回归的点。而还有一部分变量落在区域外,我们采用类似SVM中使用的方法,引入松弛因子,采取软边界的方法,如上右图。

二,拉格朗日对偶求解

类似与SVM,在SVR中,引入拉格朗日乘子,获得拉格朗日函数,再求解更加容易计算。拉格朗日函数如下:

机器学习-支持向量回归机器学习-支持向量回归

分别对w,b,机器学习-支持向量回归机器学习-支持向量回归求导得:

                                                              机器学习-支持向量回归

转化为对偶问题:

                                       机器学习-支持向量回归

                                       机器学习-支持向量回归

将w代入后获得:

                                                                  机器学习-支持向量回归

三,Python代码:

import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt

# 随机产生样本点
X = np.sort(5 * np.random.rand(40, 1), axis=0)  #产生40组数据,每组一个数据,axis=0决定按列排列,=1表示行排列
y = np.sin(X).ravel()   #np.sin()输出的是列,和X对应,ravel表示转换成行

# 产生噪声
y[::5] += 3 * (0.5 - np.random.rand(8))

# SVC拟合
def svcrbfModel():
    svr_rbf10 = SVR(kernel='rbf',C=100, gamma=10.0)
    svr_rbf1 = SVR(kernel='rbf', C=100, gamma=0.1)
    y_rbf10 = svr_rbf10.fit(X, y).predict(X)
    y_rbf1 = svr_rbf1.fit(X, y).predict(X)
    return  y_rbf10,y_rbf1

#画图
def showPlot(y_rbf10,y_rbf1):
    lw = 2 #line width
    plt.scatter(X, y, color='darkorange', label='data')
    plt.hold('on')
    plt.plot(X, y_rbf10, color='navy', lw=lw, label='RBF gamma=10.0')
    plt.plot(X, y_rbf1, color='c', lw=lw, label='RBF gamma=1.0')
    plt.xlabel('data')
    plt.ylabel('target')
    plt.title('Support Vector Regression')
    plt.legend()
    plt.show()

if __name__ == '__main__':
    y_rbf10, y_rbf1= svcrbfModel()
    showPlot(y_rbf10,y_rbf1)

产生如下结果:

机器学习-支持向量回归

sklearn.svm.SVR参数说明如下:

  • C:惩罚项,float类型,可选参数,默认为1.0,C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低,也就是对测试数据的分类准确率降低。相反,减小C的话,容许训练样本中有一些误分类错误样本,泛化能力强。对于训练样本带有噪声的情况,一般采用后者,把训练样本集中错误分类的样本作为噪声。
  • kernel:核函数类型,str类型,默认为’rbf’。可选参数为:
    • ‘linear’:线性核函数
    • ‘poly’:多项式核函数
    • ‘rbf’:径像核函数/高斯核
    • ‘sigmod’:sigmod核函数
    • ‘precomputed’:核矩阵
    • precomputed表示自己提前计算好核函数矩阵,这时候算法内部就不再用核函数去计算核矩阵,而是直接用你给的核矩阵,核矩阵需要为n*n的。
  • degree:多项式核函数的阶数,int类型,可选参数,默认为3。这个参数只对多项式核函数有用,是指多项式核函数的阶数n,如果给的核函数参数是其他核函数,则会自动忽略该参数。
  • gamma:核函数系数,float类型,可选参数,默认为auto。只对’rbf’ ,’poly’ ,’sigmod’有效。如果gamma为auto,代表其值为样本特征数的倒数,即1/n_features。
  • coef0:核函数中的独立项,float类型,可选参数,默认为0.0。只有对’poly’ 和,’sigmod’核函数有用,是指其中的参数c。
  • probability:是否启用概率估计,bool类型,可选参数,默认为False,这必须在调用fit()之前启用,并且会fit()方法速度变慢。
  • shrinking:是否采用启发式收缩方式,bool类型,可选参数,默认为True。
  • tol:svm停止训练的误差精度,float类型,可选参数,默认为1e^-3。
  • cache_size:内存大小,float类型,可选参数,默认为200。指定训练所需要的内存,以MB为单位,默认为200MB。
  • class_weight:类别权重,dict类型或str类型,可选参数,默认为None。给每个类别分别设置不同的惩罚参数C,如果没有给,则会给所有类别都给C=1,即前面参数指出的参数C。如果给定参数’balance’,则使用y的值自动调整与输入数据中的类频率成反比的权重。
  • verbose:是否启用详细输出,bool类型,默认为False,此设置利用libsvm中的每个进程运行时设置,如果启用,可能无法在多线程上下文中正常工作。一般情况都设为False,不用管它。
  • max_iter:最大迭代次数,int类型,默认为-1,表示不限制。
  • decision_function_shape:决策函数类型,可选参数’ovo’和’ovr’,默认为’ovr’。’ovo’表示one vs one,’ovr’表示one vs rest。
  • random_state:数据洗牌时的种子值,int类型,可选参数,默认为None。伪随机数发生器的种子,在混洗数据时用于概率估计。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140014.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月28日 下午8:46
下一篇 2022年5月28日 下午8:46


相关推荐

  • sql2012安装错误代码0x84b10001_sql2008配置系统未能初始化

    sql2012安装错误代码0x84b10001_sql2008配置系统未能初始化【错误描述】Sql2008安装启动失败,弹出 配置系统未能初始化0x84B10001【解决方法】先安装sql2008sp3补丁.然后再安装Sql2008,最后再装一次sp3补丁.

    2025年10月23日
    5
  • vbs代码弹计算机,如何恶搞朋友的电脑?超简单的vbs代码

    vbs代码弹计算机,如何恶搞朋友的电脑?超简单的vbs代码这东西不好做成视频教程,我们就做成文章出来分享吧!编写vbs有多简单?新建“文本文档”,输入msgbox”一大波病毒正在靠近…”,点击文件->另存为->重命名为“代码.vbs”。文件名不重要,重要的是后缀要是“.vbs”双击保存的文件:代码.vbs,即弹出一个对话框。记下这段小小的代码,去同学家里恶搞吧。当然你还可以输入其他有趣的文字。当然,如此恶搞还是不够的。那就来一个无限循…

    2022年6月4日
    46
  • java连接MySQL几种方法_Java连接MySQL数据库三种方法

    java连接MySQL几种方法_Java连接MySQL数据库三种方法好久没有更新博客了 今天利用周目时学习了一下数据库 mysql 介绍一下数据库的三种连接方式 开发工具 MyeclipseMyS 6MySQL 连接驱动 mysql connector java 5 1 27 jar 加载驱动 1 在工程目录中创建 lib 文件夹 将下载好的 JDBC 放到该文件夹下 如下图所示 2 右键工程名 在 javabuildpat 中的 Libraries 分页中选择 Add

    2025年8月7日
    17
  • MAC 系统安装 Maven 及环境变量配置

    MAC 系统安装 Maven 及环境变量配置1、概述本文主要为在MAC苹果系统下安装Maven及环境变量配置Maven是Apache下的一个纯Java开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven是一个项目管理工具,可以对Java项目进行构建、依赖管理。Maven也可被用于构建和管理各种项目,例如C#,Ruby,Scala和其他语言编写的项目。Maven曾是Jakarta项目的子项目,现为由Apache软件基金会主持

    2022年7月24日
    10
  • Grok4 根本没有免费[附充值指南教程]

    Grok4 根本没有免费[附充值指南教程]

    2026年3月15日
    9
  • 常用加密方式

    常用加密方式<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8&quo

    2022年7月3日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号