Neural network 多输入线性回归适用于一个数据集,但不适用于另一个数据集

Neural network 多输入线性回归适用于一个数据集,但不适用于另一个数据集,neural-network,pytorch,logistic-regression,Neural Network,Pytorch,Logistic Regression,我试图使用Pytorch运行逻辑回归算法(并使用一个具有一个隐藏层的神经网络),但我偶然发现了一个问题。我对两个不同的输入数据运行相同的算法。我的输入是二维的。第一组数据是我自己创建的,而第二组数据来自真实世界的数据,我从csv文件中获取,转换成列表,然后转换成pytorch张量 对于第一个输入数据,逻辑回归代码中插入的张量I为: First tensor has rank torch.Size([1000, 2]) and it's given by: T1= tensor([[ 0

我试图使用Pytorch运行逻辑回归算法(并使用一个具有一个隐藏层的神经网络),但我偶然发现了一个问题。我对两个不同的输入数据运行相同的算法。我的输入是二维的。第一组数据是我自己创建的,而第二组数据来自真实世界的数据,我从csv文件中获取,转换成列表,然后转换成pytorch张量

对于第一个输入数据,逻辑回归代码中插入的张量I为:

 First tensor has rank
 torch.Size([1000, 2]) 
 
and it's given by:
T1= tensor([[ 0.6258,  0.9683],
        [-0.0833,  0.5691],
        [-0.4657, -0.8722],
        ...,
        [ 0.5868, -1.0565],
        [ 0.1611, -0.1716],
        [-0.1515, -0.8408]])
而第二组数据的张量为:

Second tensor has rank
 torch.Size([1064, 2]) 
 
and it's given by:
T2= tensor([[918.0600,  74.8220],
        [917.3477,  71.4038],
        [923.0400,  60.6380],
        ...,
        [916.6000,  71.0960],
        [912.6000,  58.4060],
        [921.5300,  77.7020]])
现在,对于第一组数据,我得到以下结果:

如您所见,该算法在reb/蓝色决策区域中做得相当好,因为大多数红色点最终位于红色区域(蓝色点也是如此)。 现在,对于第二组数据,我得到以下结果:

如您所见,它将整个区域绘制为红色。我试着玩弄我隐藏层中的神经元数量、学习速度、历次次数和其他一些东西,但似乎没有任何效果。然后我认为这可能与x轴数据的值比y轴数据的值大得多有关,所以我用平均值除以x轴数据,对它们进行了归一化,但这并没有解决问题


算法是相同的,但它不适用于这组数据。我想知道比我更专业的人是否能预感到这里可能出了什么问题。

如果不规范数据,模型很容易被愚弄

您的列车组由1000个示例组成,从外观上看,大多数值都在
[-1,1]
范围内

然而,当你测试你的模型时,你会给它输入更高的数字

解决方案是规范化。当您规范化输入时,您的模型可以自由地学习数据的真实分布函数,而不是“记忆”数字

您应该规范化训练集和测试集。然后,您的值将介于0和1之间,您的网络将有更好的机会获得所需的相关性

import torch
import torch.nn.functional as f

train = torch.rand((4, 2))*100


tensor([[36.9267,  7.3306],
        [63.5794, 42.9968],
        [61.3316, 67.6096],
        [88.4657, 11.7254]])

f.normalize(train, p=2, dim=1)

tensor([[0.9809, 0.1947],
        [0.8284, 0.5602],
        [0.6719, 0.7407],
        [0.9913, 0.1314]])
“具有一个隐藏层的深层神经网络”在术语上是矛盾的,因为深层网络被定义为具有许多隐藏层(编辑)。