深入探究sklearnsvr

一、简介

支持向量回归 (Support Vector Regression, SVR) 是一种回归分析的方法,和 SVM 相关。SVR 同样采用 SVM 中的技巧,使用核函数,最终目的是求解支持向量。与 SVM 不同的是,SVR 对每个样本都有一个不同的目标函数和不同的损失函数。

在 Scikit-learn 中,SVR 实现就是 sklearn.svm.SVR。Scikit-learn 中也提供了 Decision Tree、Gradient Boosting、Random Forest、K-Neighbor 等一系列回归分析的方法,而 SVM 是其中一种,它是在高维空间指定样本之间的最大间隔用分离超平面来实现分类的。

二、使用

使用 SVR 进行回归分析需要采取下面几个步骤:

1. 导入数据

import pandas as pd

dataset=pd.read_csv("sample.csv")
X=dataset.iloc[:,:-1].values
y=dataset.iloc[:,-1].values

2. 训练模型

from sklearn.svm import SVR
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error 

model=make_pipeline(StandardScaler(),SVR(C=1.0, epsilon=0.2))
model.fit(X,y)

y_pred=model.predict(X)
error=mean_squared_error(y,y_pred)
print('MSE: %.3f' % error)

3. 评估模型

评估模型时,可以使用 Scikit-learn 中的 scoring 函数,比如 r2_score、mean_squared_error、mean_absolute_error 等。

from sklearn.metrics import r2_score

r_square=r2_score(y, y_pred)
print('R-Square: %.3f' % r_square)

三、参数

1. C 参数

C 参数是 SVM 优化问题的惩罚因子,它决定了训练误差的容忍度。

当 C 越小,模型会容忍更大的误差,但泛化误差可能会受到影响;当 C 越大,模型会尽可能去减少训练误差,但泛化误差也可能会变大。

model=SVR(C=1.0)

2. kernel 参数

kernel 参数是用于指定用于执行非线形特征映射的内核类型。Scikit-learn 中提供了四种内核类型:

  • linear:线性核函数
  • poly:多项式核函数
  • rbf:径向基核函数
  • sigmoid:Sigmoid 核函数
model=SVR(kernel='rbf')

四、优化

1. Grid Search

Grid Search 是一种超参数优化算法,它会尝试用不同的超参数组合来训练模型,并选择使评分最佳的超参数组合。在 Scikit-learn 中,可以使用 GridSearchCV 让算机自动搜索超参数组合。

from sklearn.model_selection import GridSearchCV 

param_grid={'C':[1,10],'kernel':['rbf','linear']}

grid=GridSearchCV(SVR(),param_grid,refit=True,verbose=3)

grid.fit(X,y)

print(grid.best_params_)
print(grid.best_estimator_)

2. Random Search

Random Search 和 Grid Search 类似,不过它是随机选择超参数,并在一定次数里选取最优超参数。在 Scikit-learn 中,可以使用 RandomizedSearchCV 让算机自动搜索超参数组合。

from sklearn.model_selection import RandomizedSearchCV

param_dist={'C':[0.1,0.5,1],'kernel':['rbf','linear']}

rand=RandomizedSearchCV(SVR(),param_distributions=param_dist,n_iter=10,refit=True,verbose=3)

rand.fit(X,y)

print(rand.best_params_)
print(rand.best_estimator_)

五、总结

本文介绍了 SVM 的回归分析方法 SVR,并详细介绍了 SVR 的使用、参数和优化。在实际应用中,我们可以选择不同的核函数、适度调整参数,来得到更好的回归分析结果。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/293657.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-26 13:14
下一篇 2024-12-26 13:14

相关推荐

  • 深入解析Vue3 defineExpose

    Vue 3在开发过程中引入了新的API `defineExpose`。在以前的版本中,我们经常使用 `$attrs` 和` $listeners` 实现父组件与子组件之间的通信,但…

    编程 2025-04-25
  • 深入理解byte转int

    一、字节与比特 在讨论byte转int之前,我们需要了解字节和比特的概念。字节是计算机存储单位的一种,通常表示8个比特(bit),即1字节=8比特。比特是计算机中最小的数据单位,是…

    编程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什么是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一个内置小部件,它可以监测数据流(Stream)中数据的变…

    编程 2025-04-25
  • 深入探讨OpenCV版本

    OpenCV是一个用于计算机视觉应用程序的开源库。它是由英特尔公司创建的,现已由Willow Garage管理。OpenCV旨在提供一个易于使用的计算机视觉和机器学习基础架构,以实…

    编程 2025-04-25
  • 深入了解scala-maven-plugin

    一、简介 Scala-maven-plugin 是一个创造和管理 Scala 项目的maven插件,它可以自动生成基本项目结构、依赖配置、Scala文件等。使用它可以使我们专注于代…

    编程 2025-04-25
  • 深入了解LaTeX的脚注(latexfootnote)

    一、基本介绍 LaTeX作为一种排版软件,具有各种各样的功能,其中脚注(footnote)是一个十分重要的功能之一。在LaTeX中,脚注是用命令latexfootnote来实现的。…

    编程 2025-04-25
  • 深入探讨冯诺依曼原理

    一、原理概述 冯诺依曼原理,又称“存储程序控制原理”,是指计算机的程序和数据都存储在同一个存储器中,并且通过一个统一的总线来传输数据。这个原理的提出,是计算机科学发展中的重大进展,…

    编程 2025-04-25
  • 深入剖析MapStruct未生成实现类问题

    一、MapStruct简介 MapStruct是一个Java bean映射器,它通过注解和代码生成来在Java bean之间转换成本类代码,实现类型安全,简单而不失灵活。 作为一个…

    编程 2025-04-25
  • 深入理解Python字符串r

    一、r字符串的基本概念 r字符串(raw字符串)是指在Python中,以字母r为前缀的字符串。r字符串中的反斜杠(\)不会被转义,而是被当作普通字符处理,这使得r字符串可以非常方便…

    编程 2025-04-25
  • 深入了解Python包

    一、包的概念 Python中一个程序就是一个模块,而一个模块可以引入另一个模块,这样就形成了包。包就是有多个模块组成的一个大模块,也可以看做是一个文件夹。包可以有效地组织代码和数据…

    编程 2025-04-25

发表回复

登录后才能评论