我的法线方程实现对于一维和多维问题的某些配置(包括高阶)都给出了非常准确的结果,但是它只能求解特征彼此不相乘的方程。一旦我涉及到特征的乘法,结果就会出错。
根据输入自动假定要素数量。尺寸是手动设置的。如果将维度设置为高于估算函数,则多余的权重将变得很小,因此它们不会影响最终解决方案。
示例:
F1。 x1 + x1 ^ 2 + x1 ^ 3-正确解决
F2。 x1 + x2 + x3-正确解决了
F3。 x1 + x2 + x3 + x1 ^ 2 + x2 ^ 2 + x3 ^ 2-正确解决了
F4。 x1 + x2 + x3 + x1 ^ 2 + x2 ^ 2 + x3 ^ 2 + x1 * x2 + x2 * x3 + x1 * x3-错误的结果
重要:
如果我尝试使用配置为F3的更高维度的法向方程来求解F2,则该解决方案仍然是准确的,因为不必要的权重很小-大约10 ^ -12。
但是
当我尝试在F3问题中使用F4配置时,未将多余的权重最小化。所有功能权重都很高,与解决方案不匹配。
我想到的第一个解释是,列之间是相互依赖的,这以某种方式破坏了正态方程。不幸的是,我没有看到这种功能的其他解决方案。
通过以下等式获得重量。我知道我可以使用numpy,但是我需要使用其他方式。无论如何,它不会产生任何影响,因为前三个示例中找到的解决方案是完美的。
weights = matmult(getMatrixInverse(matmult(transposed_x, train_set_x)),
matmult(transposed_x, expected_outputs))
我准备了一些示例数据:
1 2 2 22.28
4 2 3 37.97
5 3 3 49.17
6 4 6 66.94
最后一个数字是正确的输出-输入和权重的乘积之和。这些是使用参数准备的(第一个值是阈值-与任何功能均不相关。在示例中为0。): 0 4.5 6.7 2.19
在F1配置中,正确找到了近似值,权重约为: [[0.0],[4.499999999999982],[6.699999999999999],[2.190000000000026]]
其中第一个值是阈值,只是一个与任何功能均不相关的值。 接下来的3个值是适当的权重。乘法总和始终提供适当的解决方案。
在F2配置中,正确找到了近似值,权重约为: [[-9.094947017729282e-13],[4.500000000000059],[6.70000000000141],[2.1899999999996],[-1.8207657603852567e-14],[-3.410605131648481e-13],[-5.684341886080802e-14]]
其中第一个值是阈值,只是一个与任何功能均不相关的值。由于未在功能中使用,因此它非常低。接下来的3个值是适当的权重,其余的是多余的权重,已按预期最小化。乘法总和始终提供适当的解决方案。
在f3配置中:
[[5924.943766734235],[-1322.797113801977],[-953.6679353156687],[-1461.4574242834683],[50.30783678925443],[36.12622388603999],[113.07309358853317],[65.41037286567017],[107.23349570429868] [147。 >
这里甚至阈值很大,更不用说冗余值了。必要的权重也太大。乘法的总和甚至不接近解。
什么可能导致此类问题?如何用正态方程近似x所描述的函数?