如何在Matlab中使用Weka的MLP输出预测模型?

时间:2014-11-17 11:03:06

标签: matlab neural-network weka

我尝试使用Weka的单层MLP输出在Matlab中进行预测。 在我的例子中,我有一个包含100个节点和200个功能的单层。 我正在运行Weka 3.7.10,而weka.classifiers.functions.MultilayerPerceptron的选项是 -L 0.3 -M 0.2 -N 500 -V 0 -S 0 -E 20 -H a

在我的情况下,节点0是线性的,而不是Sigmoid。 节点1-100都是Sigmoid。我没有使用-C或-I选项,所以默认情况下Weka会对数据进行规范化。

当我尝试在Matlab中计算预测值时,我得不到与Weka相同的值。 在以下代码中:

  • 专长是我的特征向量(存储为200行)
  • featweightsall是Weka提供的100个节点中每个节点的200个特征权重。
  • nodeweights是Weka提供的100个节点权重。
  • nodethresh是Weka提供的101个阈值(第2-101行包含节点1-100的阈值,第1行包含节点0的阈值)。
featvalsnorm = interp1([min(featvals) max(featvals)],[-1 1],featvals,'linear');
featvalsnorm2 = (featvals - min(featvals))/(max(featvals)-min(featvals));
for j = 1:100
    featweights = featweightsall(  ((j-1)*200+1):(j*200));
    x = sum(featvalsnorm.*featweights) + nodethresh(j+1);
    nodenorm(j) = 1/(1+exp(-x));
end
predvalnorm = sum(nodenorm.*nodeweights)+nodethresh(1);
predval = interp1([-1 1],[min(featvals) max(featvals)],predvalnorm,'linear');

代码有什么问题?我应该在循环中取消规范化,还是应用 sigmoid到节点0?我尝试了很多这样的组合,但没有任何工作。任何帮助将不胜感激!

0 个答案:

没有答案