def build_sequences(text, window_size): #text:list of capacity x, y = [],[] for i in range(len(text) - window_size): sequence = text[i:i+window_size] target = text[i+1:i+1+window_size] x.append(sequence) y.append(target) return np.array(x), np.array(y) # 留一评估:一组数据为测试集,其他所有数据全部拿来训练 def get_train_test(data_dict, name, window_size=8): data_sequence=data_dict[name][1] train_data, test_data = data_sequence[:window_size+1], data_sequence[window_size+1:] train_x, train_y = build_sequences(text=train_data, window_size=window_size) for k, v in data_dict.items(): if k != name: data_x, data_y = build_sequences(text=v[1], window_size=window_size) train_x, train_y = np.r_[train_x, data_x], np.r_[train_y, data_y] return train_x, train_y, list(train_data), list(test_data) def relative_error(y_test, y_predict, threshold): true_re, pred_re = len(y_test), 0 for i in range(len(y_test)-1): if y_test[i] <= threshold >= y_test[i+1]: true_re = i - 1 break for i in range(len(y_predict)-1): if y_predict[i] <= threshold: pred_re = i - 1 break return abs(true_re - pred_re)/true_re def evaluation(y_test, y_predict): mae = mean_absolute_error(y_test, y_predict) mse = mean_squared_error(y_test, y_predict) rmse = sqrt(mean_squared_error(y_test, y_predict)) return mae, rmse def setup_seed(seed): np.random.seed(seed) # Numpy module. random.seed(seed) # Python random module. os.environ['PYTHONHASHSEED'] = str(seed) # 为了禁止hash随机化,使得实验可复现。 torch.manual_seed(seed) # 为CPU设置随机种子 if torch.cuda.is_available(): torch.cuda.manual_seed(seed) # 为当前GPU设置随机种子 torch.cuda.manual_seed_all(seed) # if you are using multi-GPU,为所有GPU设置随机种子 torch.backends.cudnn.benchmark = False torch.backends.cudnn.deterministic = True
时间: 2024-02-22 12:01:47 浏览: 184
这段代码主要是用来进行数据预处理和模型评估的。其中,`build_sequences`函数用来将数据转化为序列数据,`get_train_test`函数用来获取训练集和测试集,`relative_error`函数用来计算相对误差,`evaluation`函数用来计算模型的MAE、MSE和RMSE指标。另外,`setup_seed`函数用来设置随机种子,以保证实验的可复现性。整个代码涉及到了numpy、random、os和torch等库的使用,可以用来进行深度学习相关的实验和研究。
相关问题
def cut_in_sequences(x,seq_len, inc=1):
这是一个用于将序列 x 切分为长度为 seq_len 的子序列的函数,inc 参数表示每次切分的步长,默认为 1。具体实现可以参考以下代码:
```python
def cut_in_sequences(x, seq_len, inc=1):
n = len(x)
res = []
for i in range(0, n - seq_len + 1, inc):
res.append(x[i:i+seq_len])
return res
```
该函数会返回一个列表,其中每个元素都是长度为 seq_len 的子序列。如果 x 的长度不足 seq_len,则返回一个空列表。
def create_inout_sequences(input_data, tw):
def create_inout_sequences(input_data, tw) 是一个函数,它接受两个参数 input_data 和 tw。
input_data 是输入的数据,可以是一个列表、数组或其他数据结构。该参数表示原始数据,用于生成输入和输出序列。
tw 是一个整数参数,表示时间窗口的大小。时间窗口是用来定义输入序列和输出序列的长度。
该函数的作用是将输入数据 input_data 划分为输入序列和输出序列。输入序列的长度是时间窗口 tw,输出序列的长度是 1。函数返回一个包含输入序列和输出序列的列表。
具体实现时,函数根据时间窗口大小 tw,从输入数据 input_data 中截取连续的 tw 个元素作为一个输入序列,然后将该输入序列的下一个元素作为输出序列的值。这样,每个输入序列都会有一个对应的输出序列。
例如,假设输入数据 input_data 为 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],时间窗口 tw 为 3,则生成的输入序列和输出序列分别为:
输入序列 [1, 2, 3],输出序列 4
输入序列 [2, 3, 4],输出序列 5
输入序列 [3, 4, 5],输出序列 6
输入序列 [4, 5, 6],输出序列 7
输入序列 [5, 6, 7],输出序列 8
输入序列 [6, 7, 8],输出序列 9
输入序列 [7, 8, 9],输出序列 10
最后,将所有生成的输入序列和输出序列存储在列表中并返回。
阅读全文