多输入线性回归适用于一个数据集,但不适用于另一个数据集
Multiple-Input Linear Regression works for one dataset but not another
我正在尝试 运行 使用 Pytorch 的逻辑回归算法(并使用具有一个隐藏层的神经网络),我偶然发现了一个问题。我 运行 对两个不同的输入数据使用相同的算法。我的输入是二维的。第一组数据是我自己创建的,而第二组数据来自我从 csv 文件中获取的真实世界数据,转换为列表,然后转换为 pytorch 张量。
对于第一个输入数据,我插入到逻辑回归代码中的张量是:
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/blue 决策区域上做得相当好,因为大多数红点最终都位于红色区域(蓝色区域也是如此)。
现在,对于第二组数据,我得到以下信息:
如您所见,它将整个区域涂成红色。我试着调整隐藏层中的神经元数量、学习率、时期数和其他一些东西,但似乎没有任何效果。然后我认为这可能与 x 轴数据的值比 y 轴数据大得多有关,所以我通过将每个数据除以它们的平均值来对它们进行归一化,但这并没有解决问题。
算法是一样的,只是对这组数据不起作用。我想知道是否有比我更专业的人能预感到这里可能出了什么问题。
当您不规范化数据时,模型很容易被愚弄。
您的训练集由 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]])
我正在尝试 运行 使用 Pytorch 的逻辑回归算法(并使用具有一个隐藏层的神经网络),我偶然发现了一个问题。我 运行 对两个不同的输入数据使用相同的算法。我的输入是二维的。第一组数据是我自己创建的,而第二组数据来自我从 csv 文件中获取的真实世界数据,转换为列表,然后转换为 pytorch 张量。
对于第一个输入数据,我插入到逻辑回归代码中的张量是:
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/blue 决策区域上做得相当好,因为大多数红点最终都位于红色区域(蓝色区域也是如此)。
现在,对于第二组数据,我得到以下信息:
如您所见,它将整个区域涂成红色。我试着调整隐藏层中的神经元数量、学习率、时期数和其他一些东西,但似乎没有任何效果。然后我认为这可能与 x 轴数据的值比 y 轴数据大得多有关,所以我通过将每个数据除以它们的平均值来对它们进行归一化,但这并没有解决问题。
算法是一样的,只是对这组数据不起作用。我想知道是否有比我更专业的人能预感到这里可能出了什么问题。
当您不规范化数据时,模型很容易被愚弄。
您的训练集由 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]])