机器学习-SVM预测

news2025/1/20 5:12:29

本文使用机器学习SVM对数据进行预测。仅供参考

1、数据

1.1 训练数据集:

medol.xlsx文件示例

otv
3015-1.915362209
3018-1.963409776
3021-1.762028408
3024-1.789477583

1.2 预测数据集

test.xlsx文件示例

ot
3516
3519

2、模型训练

train.py

import pandas as pd
from sklearn.svm import SVR
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler
import joblib
import numpy as np
import matplotlib.pyplot as plt

# 加载数据
df = pd.read_excel("model.xlsx")

# 定义特征列
feature_columns = ['o', 't']

# 初始化标准化器
scaler = StandardScaler()

# 归一化数据集
X_scaled = scaler.fit_transform(df[feature_columns])

target_column = 'v'

# 将数据拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, df[target_column], test_size=0.1)

# 初始化SVM回归器
svm = SVR()

# 定义参数网格
param_grid = {
    'kernel': ['linear', 'rbf'],
    'C': [1, 10, 100],
    'gamma': [0.1, 1, 10],
}

# 使用GridSearchCV进行网格搜索
grid_search = GridSearchCV(svm, param_grid, cv=5, scoring='neg_mean_squared_error', verbose=1)
grid_search.fit(X_train, y_train)

# 获取最佳模型
best_model_svm = grid_search.best_estimator_

# 输出最佳超参数
print("最佳超参数 for SVM:", grid_search.best_params_)

# 计算训练集和测试集的指标
train_predictions_svm = best_model_svm.predict(X_train)
test_predictions_svm = best_model_svm.predict(X_test)

# 训练集指标
print("\n[训练集指标 - SVM]")
print("平均绝对误差: {}".format(mean_absolute_error(y_train, train_predictions_svm)))
print("均方误差: {}".format(mean_squared_error(y_train, train_predictions_svm)))
print("均方根误差: {}".format(np.sqrt(mean_squared_error(y_train, train_predictions_svm))))
print("R2分数: {}".format(r2_score(y_train, train_predictions_svm)))

# 测试集指标
print("\n[测试集指标 - SVM]")
print("平均绝对误差: {}".format(mean_absolute_error(y_test, test_predictions_svm)))
print("均方误差: {}".format(mean_squared_error(y_test, test_predictions_svm)))
print("均方根误差: {}".format(np.sqrt(mean_squared_error(y_test, test_predictions_svm))))
print("R2分数: {}".format(r2_score(y_test, test_predictions_svm)))

# 绘制训练集误差随循环次数的变化图
plt.plot(range(1, len(best_model_svm.support_vectors_) + 1), best_model_svm.dual_coef_.ravel(), label='Train Error')
plt.xlabel('Support Vectors')
plt.ylabel('Dual Coefficients')
plt.title('Training Set Error Over Support Vectors')
plt.legend()
plt.show()

# 绘制测试集的实际值和预测值的对比图
plt.scatter(y_test, test_predictions_svm, alpha=0.5)
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], '--', color='red', label='Identity Line')
plt.xlabel('Actual Values')
plt.ylabel('Predicted Values')
plt.title('Actual vs Predicted Values on Test Set - SVM')
plt.legend()
plt.show()

# 保存训练好的SVM模型
svm_model_filename = 'svm_model'
joblib.dump(best_model_svm, svm_model_filename)

# 保存训练好的标准化器
joblib.dump(scaler, 'scaler_model_svm')

3、预测模型

test.py

import pandas as pd
import joblib
from sklearn.preprocessing import StandardScaler

# 加载训练好的模型并在新数据上进行预测 (test.xlsx)
test_df = pd.read_excel("test.xlsx")

# 初始化 StandardScaler
scaler = joblib.load('scaler_model')

predicted_columns = []


model_filename = f'svm_model'

# 加载模型
loaded_model = joblib.load(model_filename)

# 在新数据上进行预测
predictions = loaded_model.predict(scaler.transform(test_df[['o', 't']]))

# 将预测结果存储在列表中
predicted_columns.append(predictions)

# 使用 pd.concat(axis=1) 将所有列一次性连接到 DataFrame 中
predicted_df = pd.concat([test_df] + [pd.Series(predictions, name=f'v') for i, predictions in enumerate(predicted_columns, start=1)], axis=1)

# 保存更新后的 test_df
predicted_df.to_excel("predicted.xlsx", index=False)

4、结果

最佳超参数 for SVM: {'C': 1, 'gamma': 0.1, 'kernel': 'linear'}

[训练集指标 - SVM]
平均绝对误差: 0.09572890288084648
均方误差: 0.01428879779657209
均方根误差: 0.11953575948883284
R2分数: 0.9939848933501038

[测试集指标 - SVM]
平均绝对误差: 0.06024996260030221
均方误差: 0.00572260737850485
均方根误差: 0.07564791721194213
R2分数: 0.9956600567712165

若有问题,欢迎讨论

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

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

相关文章

国内常用的项目管理软件有哪些?六大企业级项目管理软件大盘点

一、 奥博思 PowerProject 项目管理软件 官方网址:http://www.powerproject.com.cn 北京奥博思软件技术有限公司自成立以来,一直专注于企业级项目管理软件的开发及解决方案,致力于为各类企业(制造业、IT交付、金融、汽车及汽车零…

【工具】macOS、window11访问limux共享目录/共享磁盘,samba服务安装使用

一、samba服务安装 Samba是一个免费的开源软件实现,使得非Windows操作系统能够与Windows系统进行文件和打印服务共享。它实现了SMB/CIFS协议,并且能够在Linux、Unix、BSD等多种系统上运行。 安装 samba: sudo yum install samba配置 samba…

通过阿里云的PAI基于开源LLM搭建RAG检索增强对话系统

5月9日参加阿里云AI云峰会活动,学习了下如何借助阿里云的PAI服务进行搭建RAG检索增加对话系统。 前提: 为了方便省钱,建议先通过免费的优惠圈,这样就可以先不花钱学习一下啦。开始实验之前,请务必打开 阿里云免费试用…

VUE 滚动到指定区域scrollIntoView

背景&#xff1a;当前 VUE 页面数据量很大&#xff0c;右侧出现滚动条, 进入该页面&#xff0c;页面定位到指定区域&#xff1b; 项目要求&#xff1a; 进入页面&#xff0c;定位到指定行&#xff08;红色标记&#xff09; 直接看效果&#xff1a; 代码demo&#xff1a; <…

堆的概念及结构

目录 堆的性质&#xff1a; 堆的实现 堆向下调整算法 堆的创建 堆的插入 堆的删除 堆的应用 堆排序 对比冒泡的优势&#xff1a; 代码 头文件 源文件 如果有一个关键码的集合K { &#xff0c; &#xff0c; &#xff0c;…&#xff0c; }&#xff0c;把它的所有元…

操作系统磁盘管理类问题

例题&#xff1a;在磁盘上存储数据的排列方式会影响1/0服务的总时间。假设每个磁道被划分成10个物理块&#xff0c;每个物理块存放1个逻辑记录。逻辑记录R1,R2....R10存放在同一个磁道上&#xff0c;记录的排列顺序如下表所示&#xff1a; 假定磁盘的旋转速度为10ms/周&#xf…

问界新M5交付,「975」组合站稳中国豪华智电定位

‍作者 |老缅 编辑 |德新 5月15日&#xff0c;问界新M5已正式开启全国用户交付。从网传图片可以看到&#xff0c;华为余承东以及赛力斯AITO问界BU总裁何利扬亲自出席了首批交车仪式。 4月23日&#xff0c;在不到1个月前&#xff0c;新M5发布。新M5共推出三款车型&#xff1a; …

Pikachu 靶场敏感信息泄露通关解析

前言 Pikachu靶场是一种常见的网络安全训练平台&#xff0c;用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境&#xff0c;供安全专业人士、学生和爱好者练习和测试他们的技能。 Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术&#xff0c;…

你好 GPT-4o!

你好 GPT-4o&#xff01; OpenAI公司宣布推出 GPT-4o&#xff0c;这是OpenAI的新旗舰模型&#xff0c;可以实时对音频、视觉和文本进行推理。 GPT-4o&#xff08;“o”代表“o​​mni”&#xff09;是迈向更自然的人机交互的一步——它接受文本、音频、图像和视频的任意组合作…

财富加速器!AI智能无人直播,矩阵操作引领您卖货、卖团购券、拓客,助力财富梦想实现!

财富加速器&#xff01;AI智能无人直播&#xff0c;矩阵操作引领您卖货、卖团购券、拓客&#xff0c;助力财富梦想实现&#xff01; 在当今数字化时代&#xff0c;AI智能技术正以惊人的力量催生新的商机&#xff0c;为经济增长注入源源不断的动力。如果您渴望实现财富梦想&…

go语言数组与切片

1.数组 数组 类型名是[n]elemetType&#xff0c;其中n是数组长度&#xff0c;elementType是数组元素类型。比如一个包 含2个int类型元素的数组类型可表示为[2]int。 数组一般在创建时通过字面量初始化&#xff0c;单独声明一个数组类型变量而不进行初始化是没有意义的。 packa…

Linux-CentOS-7忘记密码-修改登录密码图文详解

Linux-CentOS-7忘记密码-修改登录密码图文详解 1.重启系统&#xff1a; 在登录界面&#xff0c;选择要登录的用户并点击"Power"按钮&#xff0c;然后选择"Restart"或"Reboot"重新启动系统。 在系统启动时持续按下 “e” 键进入编辑模式。 2…

人工智能到底是什么玩意儿?

说实话&#xff0c;每次听到“人工智能”这个词&#xff0c;我都感觉像是在听天书一样。它似乎总是被包裹在一堆高大上的术语和概念里&#xff0c;让人摸不着头脑。但今天&#xff0c;我决定挑战一下自己&#xff0c;把这个问题搞个明白&#xff01; 首先&#xff0c;我得承认&…

通过gen_compile_commands.py产生compile_commands.json文件的方法

大家在使用vscode查看linux源代码时&#xff0c;会有很多飘红处&#xff0c;而且函数的跳转非常不方便。所以linux给了一个脚本gen_compile_commands.py&#xff0c;此脚本类似ctags这样&#xff0c;产生相应的关联之类的数据库&#xff0c;方便函数及文件的跳转等等。非常好。…

每日一练 2024.5.16 (补 2024.5.15)

题目&#xff1a; 给定一个 正整数 数组 beans &#xff0c;其中每个整数表示一个袋子里装的魔法豆的数目。 请你从每个袋子中 拿出 一些豆子&#xff08;也可以 不拿出&#xff09;&#xff0c;使得剩下的 非空 袋子中&#xff08;即 至少还有一颗 魔法豆的袋子&#xff09;…

Docker mysql主从同步

1. 在主节点注册一个账号&#xff0c;用于子节点访问主节点 #mysql 1主2从&#xff0c;先创建主节点 ,注意 \ 后面不要带空格 docker run --name mysql-m \ -v /usr/local/mysql/data:/var/lib/mysql \ -v /usr/local/mysql/conf:/etc/mysql/conf.d \ -v /usr/local/mysql/log:…

20231911 2023-2024-2 《网络攻防实践》实践九报告

1.实践内容 1.1 缓冲区 缓冲区是内存空间的一部分&#xff0c;在内存中预留了一定的存储空间&#xff0c;用来暂时保存输入和输出等I/O操作的一些数据&#xff0c;这些预留的空间就叫做缓冲区。 1.2 shellcode shellcode是一段用于利用软件漏洞而执行的代码&#xff0c;也可以…

哪款桌面便签app能帮助我提升工作效率

作为上班族&#xff0c;我们每天都要处理大量的工作事项&#xff0c;从策划方案到处理邮件&#xff0c;每一个环节都需高效且有条不紊。在这样的工作环境下&#xff0c;提升效率显得尤为重要。而选择一款优秀的桌面便签app&#xff0c;无疑是提高工作效率的关键。 桌面便签app…

6-10 阶乘计算升级版

void Print_Factorial ( const int N ) {if(N<0){printf("Invalid input");return;} int nN;int a[10000]{};a[0]1; //0和1的阶乘都是1&#xff0c;同时又是用该个位去&#xff0c;所以初始化为1&#xff1b;int i,j;int len0;//当前数组所占的最大下标in…

多客开源】游戏陪玩系统,游戏陪玩源码,游戏陪玩语音社交源码运营版游戏陪玩平台源码/tt语音聊天/声优服务/陪玩系统源码开黑/约玩源码

介绍 我们针对陪玩app源码市场的发展趋势&#xff0c;整合市面上主流陪玩app应用功能&#xff0c;自主开发了多客陪玩系统源码&#xff0c;并可为客户提供全部原生陪玩源码&#xff0c;进行二次开发&#xff0c;打造适用于线上游戏陪玩、语音聊天、心理咨询、情感陪伴等业务场…