22222153513 2023-03-13 23:01 采纳率: 60%
浏览 80
已结题

LSTM进行超参数搜索

使用LSTM多变量时间预测模型,实现对海洋中S、T浓度预测,在已经分好的训练集中进行超参数搜索,获取最优参数进行数据预测,数据来源:http://mds.nmdis.org.cn/pages/dataViewDetail.html?dataSetId=18


import os
import pandas as pd
#import re
path = r"C:\Users\Asus\Desktop\毕设\data\new"  # 读取csv文件目录路径
# listdir()--返回path指定 的 文件夹中包含的文件或者文件夹名字 的 列表
FileNames = os.listdir(path)# 因此Filename是一个列表
df = []
for fn in FileNames:
    fullfilename = os.path.join(path, fn)
    df.append(pd.read_csv(fullfilename,encoding='utf-8',index_col = None))
data = pd.concat(df)
data=data[['Station', 'date', 'lat', 'lon', 'SampleDepth','T', 'S']]
data["date"] = pd.to_datetime(data["date"], format='%m/%d/%Y')

group = data.groupby(['Station'])
SAT=data['Station'].value_counts()
n_SAT=pd.DataFrame(SAT)
n_SAT=n_SAT[n_SAT['Station']>=100]
n_SAT['counts']=n_SAT['Station']
n_SAT['Station'] = n_SAT.index
n_SAT

n_data=[]
for i in n_SAT['Station']:
    n_data.append(data.loc[data["Station"]==i])
data0 = pd.concat(n_data)
a = data0[['lat','lon']]
data0['location']=a.apply(lambda x: str(x['lat'])+" "+str(x['lon']),axis=1)
#准备数据
#T_data = data0[[ 'date', 'location','SampleDepth','T']]
#S_data = data0[[ 'date', 'location','SampleDepth','S']]

#T_data = T_data.groupby('date').mean()
data0 =data0.sort_values(by='date')
b =  data0.groupby(['date','location']).mean()
b['indexs']=b.index

ls = list(b['indexs'])
bd = []
bl = []

for i in range(0,len(ls)):
    d = ls[i]
    for j in range(0,len(d)):
        if j == 0:
            n = str(d[j])
            bd.append(n.split(' ')[0])
        else:
            bl.append(d[j])
b['location']=bl
b['date']=bd
T_data = b[[ 'date', 'lat','lon','SampleDepth','T']]
T_data= T_data.set_index('date')
  • 写回答

5条回答 默认 最新

  • 王家新 2023-03-14 02:00
    关注

    接下来是使用LSTM进行超参数搜索的步骤:
    1.准备训练集和测试集。首先,将数据集分为训练集和测试集。通常情况下,将70%的数据用于训练,30%的数据用于测试。这里可以使用scikit-learn库的train_test_split函数来完成这一步。
    2.定义LSTM模型。可以使用Keras库来定义LSTM模型。根据经验,LSTM模型通常需要调整的参数包括神经元数量、层数、批大小和时序长度等。
    3.进行超参数搜索。可以使用GridSearchCV函数或RandomizedSearchCV函数来进行超参数搜索。GridSearchCV函数通过指定一组参数网格来进行搜索,而RandomizedSearchCV函数则通过随机采样一组参数来进行搜索。这里可以使用RandomizedSearchCV函数进行搜索,代码如下:

    from keras.wrappers.scikit_learn import KerasRegressor
    from sklearn.model_selection import RandomizedSearchCV
    from keras.models import Sequential
    from keras.layers import LSTM, Dense, Dropout
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import mean_squared_error
    from sklearn.preprocessing import MinMaxScaler
    import numpy as np
    
    # 定义LSTM模型
    def create_model(neurons, dropout_rate):
        model = Sequential()
        model.add(LSTM(neurons, input_shape=(X_train.shape[1], X_train.shape[2])))
        model.add(Dropout(dropout_rate))
        model.add(Dense(1))
        model.compile(loss='mean_squared_error', optimizer='adam')
        return model
    
    # 准备数据
    scaler = MinMaxScaler(feature_range=(0, 1))
    T_data_scaled = scaler.fit_transform(T_data)
    X = []
    y = []
    for i in range(1, len(T_data_scaled)):
       
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月20日
  • 创建了问题 3月13日