Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Informer时间序列预测模型超参数优化?

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

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

我是用的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_)

回答 1

流浪的法师斗篷

发布于 2017-11-10 01:57:30

那就去控制台买呀 三年五折优惠呢

和开发者交流更多问题细节吧,去 写回答
相关文章
选择香港主机,让网站实现全球覆盖
如果您拥有一个网站,并且希望将其扩展到全球观众,选择香港主机可能是一个明智的决策。香港主机提供了全球覆盖的能力,具备出色的速度、可靠性、安全性以及搜索引擎优化特性。此外,香港主机还拥有语言和文化优势,使其成为一个理想的选择。在本文中,我们将探讨香港主机的各个方面,以及如何选择适合您的需求的香港主机提供商。
一只扑棱蛾子
2023/05/23
2.8K0
选择香港主机,让网站实现全球覆盖
选择中国香港服务器时需要考虑的事项
将您的网络托管选项升级到香港服务器是让您的生活更加轻松并确保您的托管服务更加可靠的可靠方法。如果你还在考虑阶段,那么在选择一个托管包时,有几个要点值得记住。
用户9973510
2022/10/19
9.3K0
主机安全厂商怎么选择 主机安全有何用处
主机安全非常重要,因为主机安全关乎到了很多方面,比如数据安全和访问限制等等。如果主机能够有一个安全的防护,就可以避免被黑客攻击,所以现在有很多的主机安全厂商,但很多人并不知道要如何选择这些厂商。
用户8715145
2021/11/26
1.7K0
中国香港主机CN2线路双向和单向到底什么意思?
我们经常会遇到说CN2线路,尤其是接触到香港主机的时候,需要服务器请到TG@Daisy9677/@Vicky105805找我,很多的主机商都会说线路是CN2,双向CN2,本文要介绍一下什么是CN2线路,单向CN2与双向CN2线路香港主机有什么区别。
用户9305758
2021/12/20
6.7K0
香港主机大流量处理能力分析
随着互联网的普及和移动互联网的发展,人们对于网站访问速度和响应速度的要求越来越高,尤其对于那些有着高访问量和大流量的网站来说,网站的处理能力就显得尤为重要。而在香港,由于其独特的地理位置和优越的电信基础设施,越来越多的企业和网站选择在香港建设自己的香港主机,以提高网站的性能和稳定性。
一枕寒凉
2023/05/05
2.8K0
电感参数有哪些?怎么选择电感?
被绕制成螺旋形状的线圈具有感性,用于电气用途线圈被称为电感器,电感这个元件在电子电路中使用非常广泛,并且可以分为两类,一类是用于信号系统的电感,另一类是用于电源系统的功率电感。
工程师看海
2022/06/23
1.1K0
电感参数有哪些?怎么选择电感?
第08问:我有表,你有数据么?
在比较一般的虚拟机上,为一个 26 列的表生成十万条数据,大概需要近 4 分钟的时间。
爱可生开源社区
2020/04/26
5050
cleanmymac这个软件怎么样?cleanmymac到底好不好用?有必要买
很多关注cleanmymac这款软件的小伙伴就问了,clcleanmymac这个软件怎么样?cleanmymac软件还是非常不错的它可以流畅地与系统性能相结合清理我们电脑中的垃圾缓存还是非常好用的。
用户10371284
2023/07/24
7550
cleanmymac这个软件怎么样?cleanmymac到底好不好用?有必要买
AKShare-宏观数据-中国香港宏观
本次接口更新主要修复了之前接口命名的问题,通过规范了对返回结果的数据格式并修改了相应的文档。请升级 AKShare 到 1.2.60 版本使用。
数据科学实战
2022/01/12
9.1K0
AKShare-宏观数据-中国香港宏观
cleanmymac有必要买吗或者下载安装?
当前大家对于CleanMyMac都是颇为感兴趣的,大家都想要了解一下CleanMyMac,那么小编也是在网络上收集了一些关于CleanMyMac的一些信息来分析:
用户7442547
2022/10/17
1K0
中国香港服务器的优势
1.线路方面。香港服务器不存在国内电信和联通互联不互通的问题,不再为线路的选择和不畅通而烦恼。
用户9973510
2022/08/17
40.9K3
中国香港服务器与大陆服务器有什么区别
随着国家对国内互联网环境的整治,国内的网络环境也变得越来越安全、干净。同时也给很多企业和站长建站时提出了更多的要求,除了内容上限制的更多,备案也成为了业内褒贬不一的话题。抛开其他不讲,对于境外服务器来说,这是一个不错的机遇,事实也证明,越来越多的企业和站长开始选择租用境外服务器部署网站。那么,使用境外服务器还是国内服务器有什么区别? 不论是境外服务器还是国内的服务器,租用服务器一定要注意他的安全性,相比普通的服务器,境外高防服务器的安全性比较高一些,但是成本比较高,普通的服务器只要我们做好服务器的安全配置,
企鹅号小编
2018/01/25
13.5K0
应聘3万的职位,有必要这么刁难我么?
面试官:就是controller层交给一个spring容器加载,其他的service和dao层交给另外一个spring容器加载,web.xml中有这块配置,这两个容器组成了父子容器的关系。
路人甲Java
2020/04/27
5370
如何选择云主机
与购买任何业务系统一样,企业需要超越营销推广和销售的宣传,更好地找到满足自己需求的云主机。企业理想的云主机将像卷层云一样,永远存在,不受干扰,没有阻碍企业对云主机的主要关注可能是:成本、可靠性、支持和
静一
2018/06/08
16.6K0
我在外包公司做增删改查有前途么?
这是我无意中在筛选简历时,看到一位朋友发布的求职说明中,明确指出,外包勿扰,并给出了他做出这个决定的理由:
猿天地
2020/02/24
9060
我在外包公司做增删改查有前途么?
中国香港服务器未来前景如何
很多企业在建设网站之前总是担惊受怕,不知道哪个网页出了问题。网站刚建好,需要先申请备案,确保审核通过后才能入住。所以在香港不需要注册服务器的消息就成了更好的朋友们共识想法。
用户9973510
2022/09/27
13.3K0
虚拟网站建设怎么样 网站建设如何选择虚拟主机
大大小小企业都在建设属于自己的网站,然而就需要找到一个即合适又稳定的空间,当然所以不少人都会采用租用服务器的方式,在网站制作时选择使用好的虚拟主机,可以能节省不少成本,也很方便,还能提高空间性能,下面就来看看,虚拟网站建设怎么样吧。
用户8715145
2021/10/20
4.4K0
买了域名怎么用?买了域名还要买什么东西?
大家在互联网中浏览网页的时候是需要输入网址的,使用网址可以随意访问各种网站,由此也能看出网址对于网站来说是非常重要的,网站的网址中是包含了网页的域名信息的,所以域名不同网站的网址也是不一样的,大家如果了解过网站建设这方面肯定都知道网站的域名是需要购买才可以使用的,购买域名是建设网站的前提条件,那么买了域名怎么用?买了域名还要买什么东西?下面小编就为大家来详细介绍一下。
用户8739990
2021/07/30
4.1K0
买了域名怎么用?买了域名还要买什么东西?
购买了域名怎么使用?购买了域名还要买啥?
随着社会的不断发展人们在各个行业的发展都是非常快速的,在21世纪以来互联网行业的发展可以说是日新月异,人们对于互联网行业的需求也越来越大,也能看出互联网技术的提升大大方便了人们的日常生活,平时有什么不懂的地方都会通过互联网来查询一下,在使用互联网的过程中很多人都会需要浏览各种网页,对于网页来说是需要提前注册域名才可以正常使用的,很多人会问购买了域名怎么使用?购买了域名还要买啥?下面小编就为大家来详细介绍一下。
用户8739990
2021/08/06
27.7K0
购买了域名怎么使用?购买了域名还要买啥?
点击加载更多

相似问题

中国香港主机要备案么?

1222

中国香港主机需要备案么?

1893

不能选择中国香港区域么?

2422

中国香港主机要怎么认证?

0215

中国香港主机?

42K
相关问答用户
自由工作者
CVM专项擅长1个领域
腾讯科技(深圳)有限公司 | 高级工程师
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档