#!/usr/bin/env python
# coding: utf-8
# In[1]:
import numpy as np # 导入NumPy库进行数值操作
import matplotlib.pyplot as plt # 导入matplotlib库的pyplot模块用于创建图表和可视化
import pandas as pd # 导入pandas库用于数据结构和数据分析工具
from sklearn import preprocessing # 导入sklearn库的preprocessing模块用于数据预处理
from math import sqrt # 导入math库的sqrt函数用于计算平方根
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score # 导入sklearn库的metrics模块中的评估指标
import math # 导入math库用于数学计算
import joblib # 导入joblib库用于模型的保存和加载
from numpy import concatenate # 从NumPy库导入concatenate函数用于数组拼接操作
# In[2]:
feanum = 1 # 特征数量
window = 5 # 窗口大小
Ra = 0.8 # 训练集所占比例
#更多模型咸鱼搜索机器学习之心,支持模型定制
df1 = pd.read_csv('焦作.csv', usecols=[1]) # 从CSV文件中读取数据,仅使用第二列数据
train_d, test_d = df1[0:int(len(df1)*Ra)], df1[int(len(df1)*Ra):] # 将数据集划分为训练集和测试集
#更多模型咸鱼搜索机器学习之心,支持模型定制
# In[3]:
min_max_scaler = preprocessing.MinMaxScaler() # 创建MinMaxScaler对象
df0 = min_max_scaler.fit_transform(df1) # 对df1进行归一化处理
df = pd.DataFrame(df0, columns=df1.columns) # 将归一化后的数据转换为DataFrame,列名与df1保持一致
#更多模型咸鱼搜索机器学习之心,支持模型定制
# In[4]:
stock = df # 将归一化后的DataFrame赋值给stock
seq_len = window # 设置序列长度为window
amount_of_features = len(stock.columns) # 获取列数,即特征数量
data = stock.values # 将DataFrame转换为矩阵,即将stock的值提取出来
sequence_length = seq_len + 1 # 序列长度加1
result = []#更多模型咸鱼搜索机器学习之心,支持模型定制
for index in range(len(data) - sequence_length): # 循环 len(data) - sequence_length 次
result.append(data[index: index + sequence_length]) # 将每个窗口大小为sequence_length的数据段添加到result中
result = np.array(result) # 将result转换为NumPy数组
#更多模型咸鱼搜索机器学习之心,支持模型定制
cut = len(test_d) # 定义切割点,即测试集的长度
train = result[:-cut, :] # 切割训练集,取前面的部分作为训练集
x_train = train[:, :-1] # 训练集的特征部分,即除最后一列外的所有列
y_train = train[:, -1][:, -1] # 训练集的目标值,即最后一列的最后一个元素
x_test = result[-cut:, :-1] # 测试集的特征部分,即除最后一列外的所有列
y_test = result[-cut:, -1][:, -1] # 测试集的目标值,即最后一列的最后一个元素
#更多模型咸鱼搜索机器学习之心,支持模型定制
X_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], amount_of_features)) # 将x_train的形状调整为(样本数量, 时间步长, 特征数量)
X_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], amount_of_features)) # 将x_test的形状调整为(样本数量, 时间步长, 特征数量)
# In[5]:
X_train = X_train.reshape(len(X_train), window) # 将X_train的形状调整为(样本数量, 窗口大小)
y_train = y_train.reshape(len(X_train)) # 将y_train的形状调整为(样本数量,)
X_test = X_test.reshape(cut, window) # 将X_test的形状调整为(样本数量, 窗口大小)
y_test = y_test.reshape(cut) # 将y_test的形状调整为(样本数量,)
# In[6]:
class ELMRegressor():
def __init__(self, L=10, random_state=None):
self.L = L # 隐藏神经元的数量
self.random_state = random_state # 随机种子
#更多模型咸鱼搜索机器学习之心,支持模型定制
def fit(self, X, y=None):
M = np.size(X, axis=0) # 样本数
N = np.size(X, axis=1) # 特征数
np.random.seed(seed=self.random_state) # 设置随机种子
#更多模型咸鱼搜索机器学习之心,支持模型定制
self.w1 = np.random.uniform(low=-1, high=1, size=(self.L, N + 1)) # 带偏置的权重
bias = np.ones(M).reshape(-1, 1) # 偏置项定义
Xa = np.concatenate((bias, X), axis=1) # 带偏置的输入
S = Xa.dot(self.w1.T) # 隐藏层加权求和
H = np.tanh(S) # 激活函数 f(x) = tanh(x),维度为 M X L
bias = np.ones(M).reshape(-1, 1) # 偏置项定义
Ha = np.concatenate((bias, H), axis=1) # 带偏置的激活函数
self.w2 = (np.linalg.pinv(Ha).dot(y)).T # w2' = pinv(Ha)*D
#更多模型咸鱼搜索机器学习之心,支持模型定制
return self
def predict(self, X):
M = np.size(X, axis=0) # 样本数
N = np.size(X, axis=1) # 特征数
#更多模型咸鱼搜索机器学习之心,支持模型定制
bias = np.ones(M).reshape(-1, 1) # 偏置项定义
Xa = np.concatenate((bias, X), axis=1) # 带偏置的输入
S = Xa.dot(self.w1.T) # 隐藏层加权求和
H = np.tanh(S) # 激活函数 f(x) = tanh(x),维度为 M X L
bias = np.ones(M).reshape(-1, 1) # 偏置项定义
Ha = np.concatenate((bias, H), axis=1) # 带偏置的激活函数
y_pred = Ha.dot(self.w2.T) # 预测值
return y_pred
# In[7]:
L = 10 # 隐藏神经元的数量
random_state = 60 # 随机种子
elm = ELMRegressor(L=L, random_state=random_state) # 创建一个ELMRegressor对象,设置隐藏神经元数量和随机种子
elm.fit(X_train, y_train) # 使用训练数据X_train和目标变量y_train训练ELM模型
# In[8]:
#在训练集上的拟合结果
y_train_predict=elm.predict(X_train)
#在测试集上的预测
y_test_predict=elm.predict(X_test)
# In[9]:
X = pd.DataFrame(y_test) # 将y_test转换为DataFrame,并将其赋值给变量X
Y = pd.DataFrame(y_test_predict) # 将y_test_predict转换为DataFrame,并将其赋值给变量Y
X = min_max_scaler.inverse_transform(X) # 使用min_max_scaler对X进行逆标准化
Y = min_max_scaler.inverse_transform(Y) # 使用min_max_scaler对Y进行逆标准化
#更多模型咸鱼搜索机器学习之心,支持模型定制
# In[10]:
testScore = math.sqrt(mean_squared_error(X, Y)) # 计算X和Y之间的均方根误差(RMSE)
print('RMSE为:%.3f ' %(testScore)) # 打印RMSE的值
testScore = mean_absolute_error(X, Y) # 计算X和Y之间的平均绝对误差(MAE)
print('MAE为:%.3f ' %(testScore)) # 打印MAE的值
testScore = r2_score(X, Y) # 计算X和Y之间的R平方值(R2)
print('R2为:%.3f ' %(testScore)) # 打印R2的值
# In[11]:
plt.figure(figsize=(10, 4), dpi=150) # 创建一个图形窗口,设置图形的尺寸为宽度10英寸,高度4英寸,dpi为150
plt.plot(X, label="Actual", color='red', linewidth=4) # 绘制实际值曲线,设置线条颜色为红色,线宽为4
plt.plot(Y, color='blue', label='Prediction', linewidth=2.5, linestyle="--") # 绘制预测值曲线,设置线条颜色为蓝色,线宽为2.5,线型为虚线
plt.title('Prediction', size=15) # 设置图表的标题为'Prediction',字体大小为15
plt.ylabel('AQI', size=15) # 设置y轴的标签为'AQI',字体大小为15
plt.xlabel('time/day', size=15) # 设置x轴的标签为'time/day',字体大小为15
plt.legend() # 显示图例
plt.show() # 显示图形
# In[ ]:
没有合适的资源?快使用搜索试试~ 我知道了~
Python实现ELM时间序列预测(完整源码和数据)
共3个文件
csv:2个
py:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 21 浏览量
2024-04-06
13:10:41
上传
评论
收藏 46KB ZIP 举报
温馨提示
1.Python实现ELM时间序列预测(完整源码和数据) anaconda + pycharm + python +Tensorflow 注意事项:保姆级注释,几乎一行一注释,方便小白入门学习! 2.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 4.作者介绍:某大厂资深算法工程师,从事Matlab、Python算法仿真工作8年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+
资源推荐
资源详情
资源评论
收起资源包目录
ELM.zip (3个子文件)
ELM.py 7KB
焦作.csv 62KB
焦作全.csv 112KB
共 3 条
- 1
资源评论
机器学习之心
- 粉丝: 1w+
- 资源: 702
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- stm32cubemx can通信 一个板子负责传感器采集 一个板子负责wifi传递到网页 网页可控制传感器板子.zip
- k8s集群搭建1.27.1版本(来源于图灵k8s笔记)
- 树莓派连接 DS18B20 温度传感器读取温度时监控客户端,服务器端连接状况,实现断线重连机制
- 最好用的富文本编辑器wangeditor
- jQuery 3.7.1
- 校园失物招领小程序源码可作毕业设计
- SAP客户端GUI740安装包(JAVA版本)
- winlibs-x86-64-posix-seh-gcc-13.2.0-llvm-16.0.6-mingw-w64msvcrt
- HTML5小游戏【愤怒的小红帽-优秀H5小游戏合集射击游戏-过关游戏】游戏源码分享下载 - fndxhm.zip
- 医学影像处理-图像分割-肿瘤识别-诊断辅助-matlab图像分割肿瘤代码-DeepBTSeg.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功