使用 MLP 预测 12x12 矩阵

人工智能 多层感知器
2021-11-18 08:57:44

因此,我需要使用 MLP 来预测由浮点组成的 12x12 矩阵。矩阵如下: 在此处输入图像描述 大多数矩阵都有这种“模式”。

作为输入,我有 7 个浮点数,例如:

“2.0”、“0.23”、“239.10”、“3.5”、“12,0”、“10.6”、“0.62”。

为了简化输出矩阵,我将它转换为一个包含 144 个矩阵元素的数组。到目前为止,我使用的是 Scikit 的 MLPRegressor。问题是,预测结果中绝对没有模式。预测结果包括负数、非常大的数字,并且没有任何索引的“模式”。有没有办法在模型中调整这些东西,或者问题出在我的数据集上?非常感谢你!

更新:

我对这个问题不是很清楚,所以我会尝试更好地解释它。

关于问题:预测灌溉系统中的水分布。我已经有一个程序来模拟这一点,并且可以以相当好的精度工作。现在的挑战是制作一个 AI 模型来模拟这一点,而不是旧方法。

关于输入:输入是一个浮点数,代表用于分配水的洒水器的压力,两个浮点数代表收集数据时的风速和角度。剩下的 4 个是代表喷水器的某些配置的数字(这些数字在实例之间变化很小,但它们确实对结果有影响,这就是我决定将它们保留在数据集中的原因)。

关于输出:输出是一个144个元素的数组,代表12*12的矩阵。矩阵的每个元素都包含一个数字,表示在该点收集的水量。这些收集器均匀地分布在洒水器周围。所以矩阵的位置很重要,因为在大多数情况下,第一行和最后一行和列将有 0 或接近 0(但为正)的数字 - 这可能会特别取决于风的速度和角度,但也在洒水器上。

关于数据集:我有 75 个可用实例。它们都存储在一个 CSV 文件中,其中 7 个输入和 144 个输出在一行中。

1个回答

您的问题的简短回答是:您可能并不完全了解您的数据。请记住,ML 不是魔杖。它需要您了解数据及其行为。尽管公认最多具有两个隐藏层的神经网络可以以可接受的精度逼近任何模型,但设置神经网络的结构仍然是您的任务;另请注意,您的数据越干净,结构化 NN 的精确度就越容易接受。

以下更详细的解释也可能有所帮助。理解我上面指出的您的数据意味着:

  1. 机器学习管道的设计是首先要考虑的事情,也是最重要的事情。你确定你已经正确处理了训练集和测试集吗?比率标准吗?你是否很好地进行了随机抽样?

  2. 数据集的大小也是一个考虑因素。请记住n/p>10(n:实例数,p:特征数)的比率是必要的。所以如果你有 7 个特性,你应该有超过 100 个实例。检查您的数据集有多大

  3. 数据集的分布也很重要。如果您在此处遇到问题,应考虑处理分布不均的数据。使用绘图和直方图来了解数据集在特征轴上的分布。如果您的数据分布不均,则存在过度拟合的高风险

  4. 还要照顾你的输出分布如果您的输出数据分布不佳(区域中的集中输出),您会失去模型泛化的能力

  5. 检查不同特征之间的关系。检查是否有任何成对的因变量您可以使用散点图或计算成对协方差。如果这里有任何问题,PCA 或更复杂的方法(如自动编码器)将有所帮助

  6. 一种可能性是您的数据可能根本不携带任何潜在信息。也许潜在的模式是如此随机和非线性,以至于它似乎是随机的。换句话说:无论您的数据集有多大,您都无法通过查看世界杯比赛的结果来预测您的祖母煮了什么样的食物。

现在关于你的输出矩阵:

将矩阵重塑为 144 的数组可能是最好或最坏的事情。这取决于您的数据的特征。也许矩阵中每个元素的位置对于预测值也很重要。所以你可能也想i,j在输入数组中包含每个元素的。也许每个输出也会从邻居那里生效。还有一些其他选项需要考虑:

  1. 您可以使用 144 个不同的 MLP 网络,每个元素一个(有点像您在重塑矩阵时已经完成的操作。因为您的库构建了一个在输出层中有 144 个神经元的单个 MLP 网络。所以看起来像 144仅在输出层变化的网络,并注意权重校正步骤也不同,因为所有输出的训练误差同时在各层中传播回)

  2. 您可以从每个实例中创建 144 个实例,每个实例都有 7+2 个输入和 1 个输出。另外 2 个输入是输出值 (i,j) 的位置。这样做可能是一个糟糕的决定,但这种方法帮助了我几次,所以测试一下

  3. 执行第二步,但也包括邻居值。所以你会有例如 7+2+4 个输入(7 个初始值 + 2 个 i,j + 4 个相邻值)

  4. 还可以考虑使用 RNN(循环神经网络)。如果您认为矩阵是具有内部依赖性的值序列加上对这 7 个特征的外部依赖性,那么您可以使用像 LSTM 这样的 RNN 网络。

随时用更具体​​的实验和问题更新您的帖子。