如何在Waffles c ++ API中预测实例的类

时间:2012-08-15 04:19:27

标签: c++ machine-learning classification

我的名字是titiri,很高兴我找到华夫饼库来分类。我认为华夫饼是一个很好的机器学习算法库。 我有关于华夫饼库的问题。

在训练模型后,我希望打印一个预测,例如:

我的代码是:

GMatrix Instance(1,8);//instance have 8 real attribute and 
double out;// value in attribute 'class' is nomial 
Instance[0][0]=6;
Instance[0][1]=148;
Instance[0][2]=72;
Instance[0][3]=35;
Instance[0][4]=0;
Instance[0][5]=33.6;
Instance[0][6]=0.62;
Instance[0][7]=50;
modell->predict(Instance[0],&out);
cout<<&out;

此代码无效,无法打印任何内容。 请帮我! 我需要预测一个实例的类,然后打印它的类, 有一个很好的性能'预测'方法来分类一个实例? 或者有更好的方法来完成这项工作吗?

感谢, 快乐并赢得

1 个答案:

答案 0 :(得分:2)

我怀疑您的代码没有打印任何内容的原因是因为您忘记了endl。 (这是他在评论中提到的Joachim Pileborg。)

如果您使用的是Visual Studio,则可能需要在代码末尾添加断点(可能在return语句中),因为在某些模式下它可以在您看到输出之前关闭应用程序,这可以使似乎什么也没发生。

实施例

以下是一个适合我的完整示例。它包括您的实例。它从2blobs_knn.json加载K-最近邻学习者,然后在其上评估您的实例。您可以使用华夫饼工具生成的任何经过培训的监督模型的名称替换该文件名。

使用我使用的模型,程序打印“1”并退出。

如果你想使用我测试代码的确切模型(如果构建你的学习者的方法是问题),请参阅示例代码后面的部分。

#include <GClasses/GMatrix.h>
#include <GClasses/GHolders.h>
#include <GClasses/GRand.h>
#include <GClasses/GLearner.h>
#include <GClasses/GDom.h>
#include <iostream>
#include <cassert>

using namespace GClasses;
using std::cout; using std::endl;

int main(int argc, char *argv[])
{
  //Load my trained learner from a file named 2blobs_knn.json and put
  //it in hModel which is a shared-pointer class.
  GLearnerLoader ll(GRand::global());
  GDom dom;
  dom.loadJson("2blobs_knn.json");
  Holder<GSupervisedLearner> hModel(ll.loadSupervisedLearner(dom.root()));
  assert(hModel.get() != NULL);


  //Here is your code
  GMatrix Instance(1,8);// Instance has 8 real attributes and one row
  double out;           // The value in attribute 'class' is nominal 
  Instance[0][0]=6;
  Instance[0][1]=148;
  Instance[0][2]=72;
  Instance[0][3]=35;
  Instance[0][4]=0;
  Instance[0][5]=33.6;
  Instance[0][6]=0.62;
  Instance[0][7]=50;

  hModel.get()->predict(Instance[0],&out);
  cout << out << endl;
  return 0;
}

我在示例中使用的学习者是如何构建的

为了得到学习者,我使用Matlab(Octave是自由模仿者)来生成一个CSV文件,其中0级是一个8维球面单位高斯,以(0,0,0,0, 0,0,0,0)和1级具有相同的分布,但以(2,2,2,2,2,2,2,2)

为中心
m=[[randn(200,8);randn(200,8)+2], [repmat(0,200,1);repmat(1,200,1)]];
csvwrite('2blobs.csv',m)

然后,我使用该CSV,使用

将其转换为ARFF
waffles_transform import 2blobs.csv > 2blobs.arff

接下来,我将最后一个属性从@ATTRIBUTE attr8 real更改为 @ATTRIBUTE class {0,1}在文本编辑器中,因此它是名义上的。

最后,我用

训练了模型
waffles_learn train 2blobs.arff knn -neighbors 10 > 2blobs_knn.json