深度学习预测出现大量相似值,相关性图呈水平线问题求助
深度学习预测出现大量相似值的排查求助
我在使用深度学习模型进行预测时,出现大量预测值高度相似的情况,导致相关性图中出现一条水平线。
我生成了一个可复现该问题的小型数据集,但实际数据集规模更大。模型设置了较大的网络层,即使适配小型数据集规模,问题仍存在。
使用随机森林算法对该小型数据集进行目标值预测时,相关系数R可达0.4;在完整数据集上,使用深度学习方法预测后移除水平线对应的样本,得到的R值与随机森林相近。不清楚为何水平线对应的样本无法得到正常预测,恳请提供排查思路。
复现代码
import torch, torch.nn as nn import pandas as pd import matplotlib.pyplot as plt import numpy as np var='target' data = pd.read_csv('data800.csv', index_col=0) train_dataset = data.sample(frac=0.8,random_state=1) test_dataset = data.drop(train_dataset.index) train_labels = train_dataset.pop(var) test_labels = test_dataset.pop(var) model = nn.Sequential(nn.Linear(train_dataset.shape[1], 1024), nn.ReLU(), nn.BatchNorm1d(1024), nn.Linear(1024, 128), nn.ReLU(), nn.BatchNorm1d(128), nn.Linear(128, 64), nn.ReLU(), nn.BatchNorm1d(64), nn.Linear(64, 1)) optim = torch.optim.Adam(model.parameters(), 0.01) for epoch in range(200): yhat = model(torch.tensor(train_dataset.values).to(torch.float32)) loss = nn.MSELoss()(yhat.ravel(), torch.tensor(train_labels).to(torch.float32)) optim.zero_grad() loss.backward() optim.step() yhatt=model(torch.tensor(test_dataset.values).to(torch.float32)) yhatt = yhatt.detach().numpy() score = np.corrcoef(test_labels, yhatt.reshape(test_labels.shape)) if epoch % 20 == 0: print('epoch', epoch, '| loss:', loss.item(), '| R:', score[0,1]) yhat = model(torch.tensor(test_dataset.values).to(torch.float32)) yhat = yhat.detach().numpy() plt.scatter(test_labels, yhat) plt.xlabel('True Values') plt.ylabel('Predictions') plt.axis('equal') plt.axis('square') _ = plt.plot([-1000, 1000], [-1000, 1000]) plt.show()
相关性图示例
- 小型数据集相关性图:

- 完整数据集相关性图:

内容的提问来源于stack exchange,提问作者Igbin
相关产品推荐
相关产品推荐

