首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Informer时间序列预测模型超参数优化?

Informer时间序列预测模型超参数优化?

提问于 2023-03-28 03:17:18
回答 0关注 0查看 422

我是用的sklearn库里的RandomizedSearchCV()函数随机优化,但是在后面拟合fit()函数的时候出现了TypeError: fit() takes from 2 to 3 positional arguments but 5 were given的问题,fit()输入和exp_informer.py文件里Exp_Informer类中 _process_one_batch函数里给model输入的数据相同,不知道是不是数据输入还是有问题,请教一下,万分感谢,代码如下:

代码语言:javascript
运行
AI代码解释
复制
import os
import numpy as np
import pandas as pd

import torch
from torch.utils.data import Dataset, DataLoader
from sklearn.preprocessing import StandardScaler

from utils.tools import StandardScaler
from utils.timefeatures import time_features
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import GridSearchCV
from scipy.stats import uniform
from models import model

import warnings
warnings.filterwarnings('ignore')


class Dataset_Custom(Dataset):
    def __init__(self, root_path='./data/TEC_Dataset/', flag='train', size=None,
                 features='M', data_path='3_years_data.csv',
                 target='F324', scale=True, inverse=False, timeenc=0, freq='h', cols=None,
                 ):

        # size [seq_len, label_len, pred_len]
        # info
        if size == None:
            self.seq_len = 96
            self.label_len = 48
            self.pred_len = 24
        else:
            self.seq_len = size[0]
            self.label_len = size[1]
            self.pred_len = size[2]
        # init
        assert flag in ['train', 'test', 'val']
        type_map = {'train':0, 'val':1, 'test':2}
        self.set_type = type_map[flag]

        self.features = features
        self.target = target
        self.scale = scale
        self.inverse = inverse
        self.timeenc = timeenc
        self.freq = freq
        self.cols = cols
        self.root_path = root_path
        self.data_path = data_path
        self.use_gpu = False
        self.use_multi_gpu = False
        self.devices = '0,1,2,3'
        self.gpu = 0
        self.__read_data__()

    def __read_data__(self):
        self.scaler = StandardScaler()
        df_raw = pd.read_csv(os.path.join(self.root_path,
                                          self.data_path))
        '''
        df_raw.columns: ['date', ...(other features), target feature]
        '''
        # cols = list(df_raw.columns);
        if self.cols:
            cols =self.cols.copy()
            cols.remove(self.target)
        else:
            cols = list(df_raw.columns); cols.remove(self.target); cols.remove('date')
        df_raw = df_raw[['date' ] +cols +[self.target]]

        num_train = int(len(df_raw ) *0.7)
        num_test = int(len(df_raw ) *0.2)
        num_vali = len(df_raw) - num_train - num_test
        border1s = [0, num_train -self.seq_len, len(df_raw) -num_test -self.seq_len]
        border2s = [num_train, num_train +num_vali, len(df_raw)]
        border1 = border1s[self.set_type]
        border2 = border2s[self.set_type]

        if self.features=='M' or self.features=='MS':
            cols_data = df_raw.columns[1:]
            df_data = df_raw[cols_data]
        elif self.features=='S':
            df_data = df_raw[[self.target]]

        if self.scale:
            train_data = df_data[border1s[0]:border2s[0]]
            self.scaler.fit(train_data.values)
            data = self.scaler.transform(df_data.values)
        else:
            data = df_data.values

        df_stamp = df_raw[['date']][border1:border2]
        df_stamp['date'] = pd.to_datetime(df_stamp.date)
        data_stamp = time_features(df_stamp, timeenc=self.timeenc, freq=self.freq)

        self.data_x = data[border1:border2]
        if self.inverse:
            self.data_y = df_data.values[border1:border2]
        else:
            self.data_y = data[border1:border2]
        self.data_stamp = data_stamp

    def __getitem__(self, index):
        s_begin = index
        s_end = s_begin + self.seq_len
        r_begin = s_end - self.label_len
        r_end = r_begin + self.label_len + self.pred_len

        seq_x = self.data_x[s_begin:s_end]
        if self.inverse:
            seq_y = np.concatenate([self.data_x[r_begin:r_begin +self.label_len], self.data_y[r_begin +self.label_len:r_end]], 0)
        else:
            seq_y = self.data_y[r_begin:r_end]
        seq_x_mark = self.data_stamp[s_begin:s_end]
        seq_y_mark = self.data_stamp[r_begin:r_end]

        return seq_x, seq_y, seq_x_mark, seq_y_mark

    def __len__(self):
        return len(self.data_x) - self.seq_len- self.pred_len + 1

    def inverse_transform(self, data):
        return self.scaler.inverse_transform(data)

    def _get_data(self, flag):

        embed = 'timeF'
        batch_size = 32
        freq = 'h'
        seq_len = 96
        label_len = 48
        pred_len = 24
        num_workers = 0
        data = 'TEC3y'

        data_dict = {
            'WTH': Dataset_Custom,
            'ECL': Dataset_Custom,
            'Solar': Dataset_Custom,
            'TEC3y': Dataset_Custom,
            'TEC5y': Dataset_Custom,
            'TEC8y': Dataset_Custom,
            'TEC10Y': Dataset_Custom,
            'custom': Dataset_Custom,
        }
        Data = data_dict[data]
        timeenc = 0 if embed!='timeF' else 1

        if flag == 'test':
            shuffle_flag = False; drop_last = True; batch_size = batch_size; freq=freq
        else:
            shuffle_flag = True; drop_last = True; batch_size = batch_size; freq=freq
        data_set = Data(
            root_path=self.root_path,
            data_path=self.data_path,
            flag=flag,
            size=[seq_len, label_len, pred_len],
            features=self.features,
            target=self.target,
            inverse=self.inverse,
            timeenc=timeenc,
            freq=freq,
            cols=self.cols
        )
        print(flag, len(data_set))
        data_loader = DataLoader(
            data_set,
            batch_size=batch_size,
            shuffle=shuffle_flag,
            num_workers=num_workers,
            drop_last=drop_last)

        return data_set, data_loader

    def _acquire_device(self):
        if self.use_gpu:
            os.environ["CUDA_VISIBLE_DEVICES"] = str(self.gpu) if not self.use_multi_gpu else self.devices
            device = torch.device('cuda:{}'.format(self.gpu))
            print('Use GPU: cuda:{}'.format(self.gpu))
        else:
            device = torch.device('cpu')
            print('Use CPU')
        return device

print('数据读取完成')


train_set, train_loader = Dataset_Custom()._get_data(flag='train')
print(train_set)
print(train_loader)

'''
a = Dataset_Custom().data_x
b,c,d,e = Dataset_Custom().__getitem__()
print(a.shape)
print(b.shape)
print(b)
print(c.shape)
print(c)
print(d.shape)
print(d)
print(e.shape)
print(e)

'''
print('开始超参数寻优试验')
rand = model.Informer(enc_in=324, dec_in=324, c_out=324, out_len=24, factor=5, d_model=512, n_heads=8,
                              e_layers=3, d_layers=2, d_ff=512, attn='prob', embed='fixed', freq='h', activation='gelu',
                              output_attention=False, distil=True, mix=True, device=torch.device('cuda:0'), seq_len=96,
                              label_len=48)

param_dict =dict( dropout=uniform(loc=0, scale=4), # dropout取值空间
                  early_stopping_patience=range(3, 15, 1), # early_stopping_patience取值空间
                  lr=np.linspace(0.0001, 0.000001, 50), # learning_rate取值空间
                  epoch=range(100, 400, 10),

)

rand_model = RandomizedSearchCV(rand,
                                param_distributions=param_dict,
                                n_iter=300,
                                scoring='neg_mean_squared_error',
                                verbose=3,
                                n_jobs=-1,
                                refit=True,
                                cv=5,
                                pre_dispatch=-2,
                                random_state=0,
                                return_train_score=False,
                                error_score=np.nan
                                )

for i, (batch_x, batch_y, batch_x_mark,batch_y_mark) in enumerate(train_loader):
    device = Dataset_Custom()._acquire_device()
    batch_x = batch_x.float().to(device)
    batch_y = batch_y.float()

    batch_x_mark = batch_x_mark.float().to(device)
    batch_y_mark = batch_y_mark.float().to(device)
    inp = torch.zeros([batch_y.shape[0], 24, batch_y.shape[-1]]).float()
    dec_inp = torch.cat([batch_y[:, : 48, :], inp], dim=1).float().to(device)

    rand_model.fit(batch_x, batch_x_mark,dec_inp, batch_y_mark)
    best_estimator = rand_model.best_estimator_
    print(best_estimator)

    print(rand_model.best_score_)

回答 2

天使的炫翼

发布于 2020-02-14 09:59:31

20003 消息发送方或接收方 UserID 无效或不存在,请检查 UserID 是否已导入即时通信 IM。调用这个接口检查账号https://cloud.tencent.com/document/product/269/38417

视频云-Q 2562367495

发布于 2021-03-11 08:50:42

👌

和开发者交流更多问题细节吧,去 写回答
相关文章
微信小程序发送模板消息
登录 https://mp.weixin.qq.com/ “功能”-“模板消息”-“模板库” 这里我们选择合适的模板,点"选用”。 回到"我的模板",这里会看到选用的模板,有相应的模板id。
孤烟
2020/09/27
3.4K0
微信小程序发送消息推送_小程序推送消息设置
在小程序开发中,如果想实现:用户发给小程序的消息以及开发者需要的事件推送,在小程序项目中,我们想要实现这样一个功能,
全栈程序员站长
2022/11/08
3.9K0
微信小程序发送消息推送_小程序推送消息设置
微信小程序 python 发送订阅消息
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
前Thoughtworks-杨焱
2021/12/07
1.3K0
java发送微信小程序模板消息
注意在访问的时候需要将关键字替换成自己的信息,比如APPID、APPSECRET、ACCESS_TOKEN 等。
请叫我师哥
2021/12/31
2.2K0
微信小程序发送模版消息(事例)
鉴于目前网络上都还找不到小程序下发模板消息的相关资源,在仔细阅读了官方文档今天终于把小程序的模版消息给测通了,接下来介绍在不使用服务器的情况下,前端开发人员在本地怎么测试模板消息的发送。 1、在微信公
honey缘木鱼
2018/06/13
2.5K0
微信小程序开发学习——小程序发送模板消息
微信小程序的消息推送简单的说就是发送一条微信通知给用户,用户点开消息可以查看消息内容,可以链接进入到小程序的指定页面。     微信小程序消息推送需要用户触发动作才能发送消息,比如用户提交订单、支付成功。一次只能发一条,当然可以通过某种方法发送多条,小的就不在这里赘述了。下面就介绍一下如何推送消息。 一、准备工作     首先,在微信公众平台开通消息推送功能,并添加消息模板。可以从模板库选择模板也可以创建一个模板,模板添加之后,模板ID我们接下来要用的。     发送模板消息需要用到accesstoken、formId和openID。accesstoken获取及更新可以看我的上一篇文章;formID就是消息模板ID,openID我们最好在获取用户信息或用户登录时储存到全局变量里。
KEVINGUO_CN
2020/03/17
2.4K0
微信小程序 python 发送客服消息
发表于2020-03-312020-04-03 作者 wind #!/usr/bin/python # coding=utf-8 import requests, json, sys, time, logging if sys.getdefaultencoding() != 'utf-8': reload(sys) sys.setdefaultencoding('utf-8') logging.basicConfig(format='%(asctime)s - %(pathname)
前Thoughtworks-杨焱
2021/12/07
1.1K0
微信开发之小程序发送订阅消息
微信小程序在年初也是进行了升级.将原来的模板消息升级为订阅消息.也是在这几天研究了下.发现和公众号的模板消息有一种异曲同工的感觉.
桑先生
2020/02/13
8030
微信小程序-代码实现发送订阅消息
之前做小程序项目时,用到了小程序的订阅消息,用户可以主动订阅或退订它。订阅消息它是一个卡片信息,所有消息由“服务通知”下发,并附带小程序外链入口,用户点击收到的订阅消息会进入小程序指定的页面,效果图是这样的。
用户4945346
2020/06/16
1.8K0
企业微信发送应用消息部分失败
最近公司使用企业微信,让我写了一个通知中心通过发送应用消息通知成员。后来发现有部分成员会漏收,仔细看了api文档发现发送应用消息也是有限制的。
用户4191150
2021/08/12
1.8K0
微信小程序接入EngineerCMS
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/details/82431619
hotqin888
2018/09/11
1.2K0
微信小程序接入EngineerCMS
微信生态圈|如何发送小程序订阅消息
要实现的效果是订阅消息。消息通知、一次性订阅消息。 订阅消息简介: 订阅消息的能力,可以实现服务的闭环和更优的体验。 订阅消息推送位置:服务通知
烟雨平生
2023/03/07
1.4K0
微信生态圈|如何发送小程序订阅消息
微信小程序模板消息
登录 https://mp.weixin.qq.com ,功能->订阅消息->获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用。
神葳
2021/01/22
3.6K0
【小程序】微信公众号模板消息跳转小程序发送失败:errcode=40013 , errmsg=invalid appid rid:
errcode=40013 , errmsg=invalid appid rid:
唯一Chat
2022/09/21
2K0
【小程序】微信公众号模板消息跳转小程序发送失败:errcode=40013 , errmsg=invalid appid rid:
微信小程序支付接入实战
  最近接到一个小程序微信支付的需求,需要我写后台支持,本着能不自己写就不自己写的cv原则,在网上找到了些第三方程序,经过尝试后,最后决定了这不要脸作者的这款
老梁
2019/09/10
1.8K0
微信小程序支付接入实战
微信小程序订阅消息
1. 前言 ---- 一、订阅消息的类型 订阅消息的类型: 一次性订阅消息,长期订阅消息,设备订阅消息 一次性订阅消息: 用户对订阅消息模板授权 n 次,则可以推送 n 次订阅消息 长期订阅消息: 用户订阅一次后,开发者可长期下发多条消息,仅向政务民生、医疗、交通、教育等线下公共服务开放 设备订阅消息: 特殊类型的订阅消息,也是长期订阅消息,需要完成设备接入才能使用 二、微信小程序订阅消息相关文章 uniapp API 文档 - 微信小程序订阅消息 微信小程序开发文档 - 订阅消息功能介绍 微信小程序
很酷的站长
2023/01/05
1.1K0
微信小程序订阅消息
【微信小程序】使用Java后端语言发送订阅(模板)消息
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html
小帅丶
2021/12/28
2.3K0
【微信小程序】使用Java后端语言发送订阅(模板)消息
微信小程序 上传图片失败
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149889.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/05
5.8K0
微信小程序 上传图片失败
微信小程序的模板消息与小程序订阅消息
小程序订阅消息 功能介绍 消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验。
达达前端
2019/12/16
4.6K0
微信小程序的模板消息与小程序订阅消息
点击加载更多

相似问题

腾讯云从业者认证怎么退款?

21.1K

腾讯云认证考试可以全部远程参加吗?

1196

腾讯云从业者培训如何重新报名?

1462

腾讯云从业者认证的线下培训?

2420

腾讯云开发者认证和腾讯云从业者认证有什么区别?

0140
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
相关问答用户
腾讯 | 行业应用产品经理擅长4个领域
腾讯云视频产品中心擅长4个领域
新浪微博 | 高级总监擅长4个领域
到家集团 | 技术VP擅长5个领域
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档