该代码可以正常工作,但效果不佳,因为它无法解决一些非线性问题,例如函数极限处的二次行为
LinearRegression finalClassifier = new LinearRegression();
finalClassifier.buildClassifier(adjInstances);
double predictedValue = finalClassifier.classifyInstance(finalInstance);
这段代码会产生完全伪造的结果
MultilayerPerceptron finalClassifier = new MultilayerPerceptron();
finalClassifier.buildClassifier(adjInstances);
double predictedValue = finalClassifier.classifyInstance(finalInstance);
我相信MultilayerPerceptron应该永远胜过LinearRegression。 LinearRegression无法处理某些函数形状(例如f(x)= x ^ 2),这对于MultilayerPerceptron神经网络来说是小菜一碟。
因此,我可能使用了错误的API,或者
MultilayerPerceptron
的可接受输入有一些未记录的要求。会是什么呢?我的数据实例包含20个数字和名义属性的组合,例如:
A01 750
A02 1
A03 1
A04 true
A05 false
A06 false
A07 false
A08 false
A09 true
A10 false
A11 true
A12 false
A13 false
A14 false
A15 true
A16 false
A17 false
A18 false
A19 Yes
A20 34
最佳答案
您的问题中唯一可以回答的部分是
我相信MultilayerPerceptron应该永远胜过LinearRegression。 LinearRegression无法处理某些函数形状(例如f(x)= x ^ 2),这对于MultilayerPerceptron神经网络来说是小菜一碟。
这是完全错误的。为什么LR可以更好?
您的数据可以用线性模型很好地表示,在这种情况下,MLP可能会过拟合,而LR会很好用。这是一个非常普遍的误解-复杂的模型不会“更好”,它们只是“关系是否复杂才需要”,但是对于简单的问题-复杂的模型会失败。
您的模型拟合得不好。 LR很容易拟合,实际上,没有正则化(Ridge回归),它是最简单的拟合模型之一,实际上您有一个封闭形式的解决方案(OLS方法)并且没有超参数。但是,即使对于最简单的MLP,您也没有任何保证最佳解决方案的训练方法,并且您必须适合多个超参数(隐藏的单元数,激活函数,学习率,动量率,...)。在现实生活中,您几乎永远无法很好地训练神经网络,这实际上是NN的最大问题-很难训练它们,因此,经验不足的机器学习者切勿使用它们。无需深入了解该领域的人还可以使用许多其他回归器,例如SVR,Ridge回归(及其内核版本)。
如果提供的代码是您的实际代码,那么导致结果的最可能原因是上述第二点-您不能简单地说“为我构建神经网络!”并期望它能正常工作,但是这种方式是行不通的:)
关于machine-learning - Weka LinearRegression胜过MultilayerPerceptron…我在做什么错?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33478498/