#!/usr/bin/env python
# coding: utf-8
# In[1]:
import numpy as np # 导入numpy库
import matplotlib.pyplot as plt # 导入matplotlib库,用于绘图
import pandas as pd # 导入pandas库,用于数据处理和分析
from sklearn import preprocessing # 导入preprocessing模块,用于数据预处理
from math import sqrt # 导入sqrt函数,用于计算平方根
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score # 导入评估指标函数
import math # 导入math库
from numpy import concatenate # 导入concatenate函数,用于数组拼接
from sklearn.base import BaseEstimator, RegressorMixin # 导入BaseEstimator和RegressorMixin类
from scipy.spatial.distance import cdist#导入 cdist 函数
# 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 LSSVMRegression(BaseEstimator, RegressorMixin):
def __init__(self, gamma: float = 1.0, kernel: str = None, c: float = 1.0,
d: float = 2, sigma: float = 1.0):
# 初始化函数,用于设置模型的参数
self.gamma = gamma # LSSVM模型的gamma参数
self.c = c # LSSVM模型的c参数
self.d = d # LSSVM模型的d参数
self.sigma = sigma # LSSVM模型的sigma参数
#更多模型咸鱼搜索机器学习之心,支持模型定制
# 设置kernel参数,默认为'rbf'
if kernel is None:
self.kernel = 'rbf'
else:
self.kernel = kernel
#更多模型咸鱼搜索机器学习之心,支持模型定制
# 根据kernel参数设置对应的核函数
params = dict() # 创建一个空字典 params,用于存储核函数的参数
if kernel == 'poly': # 如果核函数类型是多项式核函数('poly'),则将 c 和 d 参数分别存储到 params 字典中
params['c'] = c
params['d'] = d
elif kernel == 'rbf': # 如果核函数类型是高斯径向基核函数('rbf'),则将 sigma 参数存储到 params 字典中
params['sigma'] = sigma
self.kernel_ = LSSVMRegression.__set_kernel(self.kernel, **params)
# 调用 LSSVMRegression 类中的 __set_kernel() 方法,传入核函数类型和对应的参数(通过 **params 将字典解包为关键字参数),
# 返回设置好参数的核函数对象,并将其赋值给 self.kernel_ 属性
self.x = None # 训练集的输入数据
self.y = None # 训练集的输出数据
self.coef_ = None # 模型的权重系数
self.intercept_ = None # 模型的截距项
def get_params(self, deep=True):
# 获取模型的参数#更多模型咸鱼搜索机器学习之心,支持模型定制
return {"c": self.c, "d": self.d, "gamma": self.gamma,
"kernel": self.kernel, "sigma":self.sigma}
def set_params(self, **parameters):
# 遍历 'parameters' 字典中的键值对
for parameter, value in parameters.items():
# 将 'self' 的属性名设置为 'parameter',并赋值为对应的 'value'
setattr(self, parameter, value)
params = dict() # 创建一个空字典,用于存储特定的核函数参数
if self.kernel == 'poly': # 如果核函数是多项式核函数,设置参数 'c' 和 'd'
params['c'] = self.c
params['d'] = self.d
elif self.kernel == 'rbf': # 如果核函数是径向基函数(RBF)核函数,设置参数 'sigma'
params['sigma'] = self.sigma
self.kernel_ = LSSVMRegression.__set_kernel(self.kernel, **params)
# 调用 LSSVMRegression 类的 __set_kernel 方法,设置 kernel_ 属性为相应的核函数
return self # 返回结果 self#更多模型咸鱼搜索机器学习之心,支持模型定制
def set_attributes(self, **parameters):
# 遍历 'parameters' 字典中的键值对
for param, value in parameters.items():
# 如果键是 'intercept_',将值赋给 self.intercept_
if param == 'intercept_':
self.intercept_ = value
elif param == 'coef_': # 如果键是 'coef_',将值赋给 self.coef_
self.coef_ = value
elif param == 'support_': # 如果键是 'support_',将值赋给 self.x
self.x = value
def __set_kernel(name: str, **params):# 定义线性核函数
def linear(xi, xj):
return np.dot(xi, xj.T)
def poly(xi, xj, c=params.get('c', 1.0), d=params.get('d', 2)): # 定义多项式核函数
return ((np.dot(xi, xj.T))/c + 1)**d
def rbf(xi, xj, sigma=params.get('sigma', 1.0)): # 定义径向基函数(RBF)核函数
#更多模型咸鱼搜索机器学习之心,支持模型定制
if (xi.ndim == 2 and xi.ndim == xj.ndim): # 计算欧几里德距离的平方,并应用 RBF 核函数
return np.exp(-(cdist(xi, xj, metric='sqeuclidean'))/(2*(sigma**2)))
elif ((xi.ndim < 2) and (xj.ndim < 3)):
ax = len(xj.shape)-1
# 计算包含向量和标量的 RBF 核函数
return np.exp(-(np.dot(xi, xi) + (xj**2).sum(axis=ax)
- 2*np.dot(xi

机器学习之心
- 粉丝: 3w+
最新资源
- 微信小程序 蓝牙实现.zip
- A191基于springboot+vue的可追溯果蔬生产过程的管理系统(LW文档+完整前后端代码+sql脚本+开发文档+全套软件)
- 基于多智能体协调的车路协同关键技术研究仿真平台_城市规模交通信号控制仿真系统_多智能体算法优化与深度强化学习模型集成_实时交通流模拟与信号灯智能调度_用于提升城市交通效率与减少拥堵.zip
- taro + vue3 开发微信小程序的模板.zip
- 基于ghost的微信小程序版博客.zip
- 微信小程序 自定义tabbar.zip
- 微信小程序-家居电商(1).zip
- 基于强化学习的智能空战决策系统_深度强化学习_多智能体对抗_空战模拟器_OpenAIGym环境_自主决策算法_无人机与战斗机对抗_战术机动与武器使用_实时动态环境_奖励函数设计_.zip
- 基于多算法融合的信号源仿真系统_包含信号生成调制解调噪声模拟频谱分析波形重构参数优化实时处理多线程计算数据可视化性能评估误差校正动态调整模型验证实验对比.zip
- 基于ROS的智能车轨迹跟踪算法的仿真与设计项目_2021年江苏理工学院王博的毕业设计_通过ROS系统实现智能车轨迹跟踪算法的仿真与设计_包括PID法轨迹跟踪_纯跟踪结合PID的轨迹.zip
- 多进程并发环境模拟与低级调度算法仿真实现_操作系统实验项目_通过程序仿真掌握并发环境原理进程PCB与控制操作原语进程切换以及进程调度算法的实现步骤_设计并实现时钟中断产生模块文件操.zip
- 微信小程序开发资源汇总.zip
- VIENNA电路控制算法Psim仿真项目_虚拟零序解耦滞环控制数字控制抛物线法电力电子变换器仿真模型_用于研究和优化Vienna整流器的控制策略性能比较与验证_基于Psim平台的电.zip
- 多肉物语的微信小程序.zip
- 微信小程序-云课堂.zip
- 基于HivisionIDPhotos + Uniapp 实现的微信小程序端.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


