#!/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 math import sqrt # 导入math库的sqrt函数用于计算平方根
from sklearn import preprocessing # 导入sklearn库的preprocessing模块用于数据预处理
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函数用于数组拼接操作
from sklearn.base import ClassifierMixin, BaseEstimator # 导入sklearn库的ClassifierMixin和BaseEstimator类
from sklearn.utils.validation import check_X_y # 导入sklearn库的check_X_y函数用于输入数据的验证
from sklearn.metrics.pairwise import pairwise_kernels # 导入sklearn库的pairwise_kernels函数用于计算核矩阵
#更多模型咸鱼搜索机器学习之心,支持模型定制
# 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 KELM(ClassifierMixin, BaseEstimator):
def __init__(self, C=1, method="full", S=None, eps=1e-5, kernel="linear", gamma=None, degree=3, coef0=1, kernel_params=None):
self.C = C # 松弛因子
self.kernel = kernel # 核函数类型
self.method = method # 训练方法
self.S = S # 选择矩阵
self.eps = eps # 容差
self.gamma = gamma # 核函数参数
self.degree = degree # 多项式核函数的次数
self.coef0 = coef0 # 核函数的常数项
self.kernel_params = kernel_params # 核函数的其他参数
def fit(self, X, y):#更多模型咸鱼搜索机器学习之心,支持模型定制
X, y = check_X_y(X, y) # 验证输入的X和y是否合法
self.X, self.y = X, y # 存储训练数据
n, d = X.shape # 样本数和特征数
self.le_ = preprocessing.LabelEncoder() # 创建LabelEncoder对象
self.le_.fit(y) # 对目标变量y进行编码
y = self.le_.transform(y) # 对编码后的y进行转换
classes = np.unique(y) # 获取类别列表
nclasses = len(classes) # 类别数
self.M = np.array([[(i - j) ** 2 for i in range(nclasses)] for j in range(nclasses)]) # 构造类别间距离矩阵
T = self.M[y, :] # 构造目标变量的编码矩阵
K = self._get_kernel(X) # 计算核矩阵
#更多模型咸鱼搜索机器学习之心,支持模型定制
if self.method == "full":
self.beta = np.linalg.inv((1 / self.C) * np.eye(n) + K).dot(T) # 计算权重矩阵
else:
raise ValueError("Invalid value for argument 'method'.") # 抛出异常,不支持的训练方法
return self#更多模型咸鱼搜索机器学习之心,支持模型定制
def predict(self, X):
K = self._get_kernel(X, self.X) # 计算测试样本与训练样本之间的核矩阵
coded_preds = K.dot(self.beta) # 计算编码后的预测值
predictions = np.argmin(np.linalg.norm(coded_preds[:, None] - self.M, axis=2, ord=1), axis=1) # 根据编码后的预测值进行分类
predictions = self.le_.inverse_transform(predictions) # 对预测结果进行解码
return predictions
def _get_kernel(self, X, Y=None):
if callable(self.kernel): # 检查self.kernel是否是可调用对象(如自定义的核函数)
params = self.kernel_params or {} # 如果是可调用对象,则使用self.kernel_params作为参数
else:
params = {'gamma': self.gamma,
'degree': self.degree,
'coef0': self.coef0} # 如果不是可调用对象,则使用默认的参数设置
return pairwise_kernels(X, Y, metric=self.kernel, filter_params=True, **params)
@property
def _pairwise(self):#更多模型咸鱼搜索机器学习之心,支持模型定制
return self.kernel == "precomputed"
# In[7]:
kelm = KELM(C=10, kernel="rbf") # 创建一个KELM对象,设置松弛因子C为10,核函数为"rbf"
kelm.fit(X_train, y_train) # 使用训练数据X_train和标签y_train拟合模型
# In[8]:
#在训练集上的拟合结果
y_train_predict=kelm.predict(X_train)#更多模型咸鱼搜索机器学习之心,支持模型定制
#在测试集上的预测
y_test_predict=kelm.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
没有合适的资源?快使用搜索试试~ 我知道了~
Python实现KELM时间序列预测(完整源码和数据)
共3个文件
csv:2个
py:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 141 浏览量
2024-04-07
21:19:23
上传
评论 1
收藏 47KB ZIP 举报
温馨提示
1.Python实现KELM时间序列预测(完整源码和数据) anaconda + pycharm + python +Tensorflow 注意事项:保姆级注释,几乎一行一注释,方便小白入门学习! 2.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 4.作者介绍:某大厂资深算法工程师,从事Matlab、Python算法仿真工作8年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+
资源推荐
资源详情
资源评论
收起资源包目录
KELM.zip (3个子文件)
KELM.py 9KB
焦作.csv 62KB
焦作全.csv 112KB
共 3 条
- 1
资源评论
机器学习之心
- 粉丝: 1w+
- 资源: 708
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 《计算机网络-自顶向下方法》答案
- 基于pyqt5框架开发的demo项目 全栈开发,短小精悍,入门学习,上手简单
- 国内IP地址大全 站长资源 访问IP设置 Order allow,deny 使用方法
- 【JavaScript实现点击鼠标出现爱心特效脚本】直接引入index.html文件可用!!!
- OPC Core Components Redistributable (x86).msi
- 一套基于Python的交易量化框架,详细复现步骤
- 顺序表定义及12个基本操作实现
- xilinx vbyone IP 网表文件
- 【JavaScript实现点击鼠标出现爱心特效脚本】直接引入index.html文件可用!!!
- Erlang环境,26.1.0.0和Erlang环境,26.1.0.0
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功