SVM连续值预测

2023-05-16

SVM连续值预测

  • 分类问题
  • 回归问题
    • 一、导入库和数据
    • 二、数据预处理
    • 三、模型训练和评估

使用svm既可以实现分类问题,即输出是标签的种类,例如手写数字识别,Iris鸢尾花分类,同时也能实现连续值的预测,即输出是连续值,也就是回归问题,例如波士顿房价预测。具体使用方法请见svm官方文档
下图中Classification函数即是分类函数,Regression即是回归函数。
在这里插入图片描述

分类问题

使用svm实现,Iris鸢尾花数据集分类问题,详情请见链接

回归问题

使用svm实现波士顿房价预测。在此说一下自己程序实现预处理的问题,在我的代码中本来是没有进行StandardScaler()标准化这一步,而且我的输出数据有8位小数,最后实现的预测效果很差,基本预测全是一样的值。加上预处理后,虽然预测值会进行标准化,但是可以得到模型的均方差MSE。

一、导入库和数据

本文采用dataset自带的Boston房价数据集,进行回归预测

# 导入库
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVR
from sklearn import metrics
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVR
import seaborn as sns
import matplotlib.pyplot as plt

# 导入数据集
boston = load_boston()
data = boston.data
target = boston.target

二、数据预处理

先用train_test_split切割出70%的训练集和30%的测试集。由于该数据集各样本取值范围差异很大,直接将数据输入到SVM中的话,学习将会变得困难且容易被噪声干扰。解决方法是对每个特征做标准化或归一化或正则化,本次采用sklearn库自带的z_值标准化

# 数据预处理
train_data,test_data,train_target,test_target = train_test_split(data,target,test_size=0.3)
Stand_X = StandardScaler()  # 特征进行标准化
Stand_Y = StandardScaler()  # 标签也是数值,也需要进行标准化
train_data = Stand_X.fit_transform(train_data)
test_data = Stand_X.transform(test_data)
train_target = Stand_Y.fit_transform(train_target.reshape(-1,1)) # reshape(-1,1)指将它转化为1列,行自动确定
test_target = Stand_Y.transform(test_target.reshape(-1,1))  

三、模型训练和评估

 # ① 线性核函数
clf = LinearSVR(C=2)
clf.fit(train_data,train_target)
y_pred = clf.predict(test_data)
print("线性核函数:")
print("训练集评分:", clf.score(train_data,train_target))
print("测试集评分:", clf.score(test_data,test_target))
print("测试集均方差:",metrics.mean_squared_error(test_target,y_pred.reshape(-1,1)))
print("测试集R2分:",metrics.r2_score(test_target,y_pred.reshape(-1,1)))

# ② 高斯核函数
clf = SVR(kernel='rbf',C=10,gamma=0.1,coef0=0.1)
clf.fit(train_data,train_target)
y_pred = clf.predict(test_data)
print("高斯核函数:")
print("训练集评分:", clf.score(train_data,train_target))
print("测试集评分:", clf.score(test_data,test_target))
print("测试集均方差:",metrics.mean_squared_error(test_target,y_pred.reshape(-1,1)))
print("测试集R2分:",metrics.r2_score(test_target,y_pred.reshape(-1,1)))

# ③ sigmoid核函数
clf = SVR(kernel='sigmoid',C=2)
clf.fit(train_data,train_target)
y_pred = clf.predict(test_data)
print("sigmoid核函数:")
print("训练集评分:", clf.score(train_data,train_target))
print("测试集评分:", clf.score(test_data,test_target))
print("测试集均方差:",metrics.mean_squared_error(test_target,y_pred.reshape(-1,1)))
print("测试集R2分:",metrics.r2_score(test_target,y_pred.reshape(-1,1)))

# ④ 多项式核函数
clf = SVR(kernel='poly',C=2)
clf.fit(train_data,train_target)
y_pred = clf.predict(test_data)
print("多项式核函数:")
print("训练集评分:", clf.score(train_data,train_target))
print("测试集评分:", clf.score(test_data,test_target))
print("测试集均方差:",metrics.mean_squared_error(test_target,y_pred.reshape(-1,1)))
print("测试集R2分:",metrics.r2_score(test_target,y_pred.reshape(-1,1)))

从结果上看,模型评分:高斯> 多项式>线性>sigmoid
因为SVM对参数十分敏感,不同的参数会导致模型的评分差距非常大,因此用GridSearchCV进行调参,看下是否高斯的得分依然最高

# 调参
clf = GridSearchCV(SVR(),param_grid={'kernel':['poly','sigmoid','rbf'],'C': [0.1,1,10],'gamma': [0.1,1,10]},cv=5)
clf.fit(train_data,train_target)
print("best_param:",clf.best_params_)
print("best_score:", clf.best_score_)

果然还是高斯核函数的评分最高,说明在线性不可分情况下,可以优先使用高斯核函数

详情见链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SVM连续值预测 的相关文章

  • 目标缩放导致 Scikit-learn SVM 回归崩溃

    训练 SVM 回归时 通常建议在训练之前缩放输入特征 但如何扩大目标呢 通常这不被认为是必要的 而且我看不出有什么充分的理由说明为什么有必要这样做 然而 在 scikit learn 的 SVM 回归示例中 http scikit lear
  • 如何训练 libsvm 格式的图像(像素)数据以用于 Java 识别

    我想制作一个 Java 应用程序来使用 libsvm 来识别字符 但是当进入这个过程时 我不明白如何训练图像数据以与 libsvm 一起使用 最近为了学习它 我做了一个测试现有数据 我也创建了32x32基于训练图像数据 将每个像素转换为0
  • 如何在Matlab中使用libsvm?

    我是 matlab 新手 不知道如何使用 libsvm 是否有任何示例代码可以使用 SVM 对某些数据 具有 2 个特征 进行分类 然后将结果可视化 使用内核 RBF 多项式和 Sigmoid 怎么样 我在 libsvm 包中看到了该自述文
  • SVM 的标准化特征值

    我一直在尝试一些 SVM 实现 我想知道 标准化特征值以适应一个范围的最佳方法是什么 从0到1 假设我有 3 个特征 其值范围为 3 5 0 02 0 05 10 15 如何将所有这些值转换为 0 1 范围 如果在训练期间 我将遇到的特征号
  • 使用 Scikit Learn SVM 准备文本分类数据

    我正在尝试应用 Scikit learn 中的 SVM 对我收集的推文进行分类 因此 将有两个类别 将它们命名为 A 和 B 目前 我将所有推文分类为两个文本文件 A txt 和 B txt 但是 我不确定 Scikit Learn SVM
  • Predict.svm 中的错误:测试数据与模型不匹配

    我有一个大约 500 行和 170 列的数据框 我正在尝试使用 e1071 包中的 svm 运行分类模型 分类变量称为 SEGMENT 是一个有 6 个级别的因子变量 数据框中还有其他三个因子变量 其余都是数字 data lt my dat
  • 使用线性内核调整 SVM 时,R 插入符异常缓慢

    在调整 SVM 参数时 我观察到一个非常奇怪的行为caret 当训练单个模型而不进行调整时 具有径向基核的 SVM 比具有线性核的 SVM 花费更多时间 这是预期的 然而 当在相同的惩罚网格上调整具有两个核的 SVM 时 具有线性核的 SV
  • scikit-learn 中奇怪的 SVM 预测性能 (SVMLIB)

    我在 10000x1000 的大型数据集 10000 个对象 1000 个特征 上使用 scikit learn 的 SVC 我已经在其他来源中看到 SVMLIB 的扩展范围不能超过约 10000 个对象 我确实观察到了这一点 traini
  • Opencv:使用 FAST 关键点和 Brief 特征训练 SVM

    我想训练一个用于对象检测的支持向量机 此时 我有一个 python 脚本 可以检测 FAST 关键点并提取该位置的 Brief 特征 现在我不知道如何使用这些描述符来训练 SVM 请你告诉我 如何使用描述符来训练SVM 据我所知这些描述符应
  • Scikit - SVM 的 3D 特征数组

    我正在尝试在 scikit 中训练 SVM 我正在遵循该示例并尝试将其调整为我的 3d 特征向量 我尝试了页面中的示例http scikit learn org stable modules svm html http scikit lea
  • 无法绘制 svm 图。 terms.default(x) 中的错误:没有术语组件或属性

    我可以在我的数据集上使用 R 包 e1071 运行 svm 但我无法使用任何两个预测变量来绘制图表 即使在谷歌搜索了很多之后我也无法找到它的解决方案 请专家帮我解决这个问题 我有一个具有以下属性的数据集 gt dim fulldata 1
  • 在 Matlab 中使用 svmtrain 内存不足

    我有一组数据正在尝试使用 SVM 来学习 对于上下文 数据的维数为 35 包含大约 30 000 个数据点 我之前用这个数据集在 Matlab 中训练过决策树 大约花了 20 秒 由于对错误率不太满意 我决定尝试 SVM 我第一次尝试svm
  • Scikit Learn SVC Decision_function 和预测

    我试图理解 Decision function 和 Predict 之间的关系 它们是 SVC 的实例方法 http scikit learn org stable modules generated sklearn svm SVC htm
  • 测试示例集属性应等于训练示例集 Rapidminer SVM 的 OR 超集

    I am new to Rapid Miner and using SVM Linear in it My model is as I made Training Example set which consist of 3552 exam
  • 插入符 rfe + sum 与 ROC 中的特征选择

    我一直在尝试使用插入符包应用递归功能选择 我需要的是 ref 使用 AUC 作为性能衡量标准 经过一个月的谷歌搜索后 我无法让该过程正常运行 这是我使用过的代码 library caret library doMC registerDoMC
  • 如何使用 SVM 预测多类情感分析问题中的所有类?

    好吧 我正在制作一个情感分析分类器 我有三个类别 标签 积极 中性和消极 我的训练数据的形状是 14640 15 其中 negative 9178 neutral 3099 positive 2363 我对数据进行了预处理 使其标准化 并将
  • 使用 SVM 预测概率

    我编写了这段代码并想获得分类的概率 from sklearn import svm X 0 0 10 10 20 30 30 30 40 30 80 60 80 50 y 0 1 2 3 4 5 6 clf svm SVC clf prob
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • libsvm 收缩启发法

    我在 C SVC 模式下使用 libsvm 和 2 次多项式内核 并且需要训练多个 SVM 在训练期间 我训练的一些 SVM 会收到以下一个或什至两个警告 WARNING using h 0 may be faster WARNING re
  • OpenCV SVM 给出奇怪的预测结果

    我对 OpenCV 和支持向量机都很陌生 我想使用 SVM 训练具有两个标签的数据集 然后预测给定集合的标签 我当前的集合包含大约 600 行 具有相等的类分布 1 为 300 行 1 为 300 行 包含 34 列 这是我当前用于设置 O

随机推荐

  • 配置VNC图形界面服务

    第一步 xff1a 安装Gnome图形化界面 要能远程访问图形化界面 xff0c 首先服务器自身要安装图形化界面 xff0c 在此我们还要安装中文支持套件 yum groupinstall 34 X window System 34 34
  • Activity四种启动模式及onNewIntent()方法

    1 Standard xff1a 是活动默认的启动模式 xff0c 在不进行显式指定的情况下 xff0c 所有活动都会自动使用这种启动模式 系统不在乎这个活动是否已经在返回栈中存在 xff0c 每次启动都会创建该活动的一个新的实例 2 Si
  • Lnuix中查看pytorch和python安装版本和路径

    Lnuix中查看pytorch和python安装版本和路径 1 查看pytorch安装版本和路径 conda activate pytorch环境名称输入python查看版本号 span class token function impor
  • Python之FileNotFoundError: [Errno 2] No such file or directory问题处理

    错误信息 xff1a FileNotFoundError Errno 2 No such file or directory 39 AutoFrame temp report xlsx 39 相对于当前文件夹的路径 xff0c 其实就是你写
  • 基于centos7学习总结 -- shell脚本

    shell 脚本必须要以 34 bin bash 34 开头 脚本建议内容 xff1a 脚本的功能脚本的版本信息脚本的作者与联系方式脚本的版权声明方式脚本的History脚本内特殊的命令 xff0c 使用 绝对路径 的方式来执行脚本运行时需
  • 关于java里的Collections工具类的max和min以及Arrays工具的二分查找。

    标题和沙雕 xff0c 很乱 xff1a 本文主要介绍两个在Java util里的工具类里的一小部分小小的方法 xff1a Collections类的max 和min Arrays类的asList 和二分查找 数组和集合的转换 一 Coll
  • js基本输入输出,变量,数据类型,案例。

    文章目录 1 计算机编程基础 xff1a 2 JS3 变量4 数据类型a 5种简单数据类型 xff1a 案例 b typeof获取变量类型 xff1a c 转化为数值型的放法 xff1a d 转化为字符型的方法 案例 xff1a 5 扩展阅
  • Android 7.0Settings加载主界面流程

    新人一枚 xff0c 没有整机环境 xff0c 有什么写的不对欢迎批评指正 xff0c 万分感谢 xff01 Settings主界面加载时序图 xff08 这里很多判断逻辑我省略掉了 更多的是想把加载主界面流程跑通 xff09 这张流程图将
  • C# 获取图片,Pdf中的文字

    识别图片中的文字 首先把下载好的tessdata放在自己项目的bin Debug tessdata文件夹中 附一个tessdata的下载地址 xff1a https github com tesseract ocr tessdata 命名空
  • 1449-The user specified as a definer (‘mysql.infoschema‘@‘localhost‘) does not exit

    navicat连接MySQL数据库时1449 The user specified as a definer 把本机mysql数据库5 6版本的数据备份后 xff0c 卸载5 6 版本 xff0c 安装了最新的8 0 27版本 xff0c
  • 最新版Docker Desktop安装在windows10上会出现的WSL2错误

    有科技的可以去这个帖子看 xff0c 解决WSL是最新版也无法运行docker的情况 查了很多帖子都是牛头不对马嘴 xff0c 不说废话直接上解决方案 1 Docker运行出现的问题 Docker Core HttpBadResponseE
  • C#各种官网文档链接

    目录 1 WinFrom NET Framework 2 TeeChart 3 C 教程 xff1a C 入门经典教程 4 C语言中文网 1 WinFrom NET Framework 官方文档YYDS xff0c 以前忽略了 xff0c
  • PMS(PackageManagerService)原理简单介绍,启动过程源码简单解析

    文章目录 前言1 PMS2 源码和关键方法SystemServerPackageManagerServiceParallelPackageParserPackageParser 3 细节总结4 时序图startuml代码参考材料 前言 先想
  • Android Studio 提示 Unable to load class ‘org.slf4j.LoggerFactory‘.

    将项目切换成Project模式 路径gradle wrapper gradle wrapper properties 将distributionUrl改为https services gradle org distributions gra
  • OpenCV 在 Android Studio 的使用教程

    本文内容是本人经过多次踩坑 xff0c 并参考网上众多OpenCV On Android的配置教程总结而来 xff0c 尽希望能帮助学习移动图像处理的朋友们少走弯路 xff0c 如有转载 xff0c 请标明出处 开发环境 Android S
  • 去哪儿网2019秋招笔试题

    1 题目描述 xff1a 给出一个由 100 100 之间整数组成的数组 xff0c 求其相加和最大的连续子数组 输入 一个连续整数组成的数组 输出 子数组相加的最大值 样例输入 1 2 3 2 4 6 样例输出 7 2 题目描述 xff1
  • IEEE论文参考文献引用格式

    IEEE论文参考文献引用格式 格式要求字体段落格式 期刊格式书写顺序书写要求 xff1a 作者格式的书写文章名的书写格式期刊名字简写卷号 xff0c 期号 会议格式专利书籍链接 URL 了解一个期刊书写格式最快方法 xff0c 请先进入该期
  • python使用numpy加载和保存txt文件

    python使用numpy加载和保存txt文件 问题 xff1a 1 如何将array保存到txt文件中 xff1f 2 如何将存到txt文件中的数据读出为ndarray类型 xff1f 解决 xff1a 直接用numpy中的方法 1 nu
  • HTML标签,CSS选择器,属性,盒子模型,浮动

    文章目录 HTML标签 xff0c 表格 xff0c 表单HTML 标签 表格 table表单 form1 表单域 xff0c 表单元素 xff0c 提示信息 CSS选择器 xff0c 属性 xff0c 显示模式 xff0c 背景图 xff
  • SVM连续值预测

    SVM连续值预测 分类问题回归问题一 导入库和数据二 数据预处理三 模型训练和评估 使用svm既可以实现分类问题 xff0c 即输出是标签的种类 xff0c 例如手写数字识别 Iris鸢尾花分类 xff0c 同时也能实现连续值的预测 xff