0

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

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

我的代码是:

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;

此代码不起作用,并且不打印任何内容。请帮我!我需要什么来预测一个实例的类,然后打印它的类,有一个良好的性能“预测”方法来分类一个实例?还是有更好的方法来完成这项工作?

谢谢,快乐并获胜

4

1 回答 1

2

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

如果您使用的是 Visual Studio,您可能希望在代码末尾添加一个断点(可能在 return 语句上),因为在某些模式下,它可以在您看到输出之前关闭您的应用程序,这可能使它看起来像如果什么都没发生。

例子

下面是一个对我来说很好的完整示例。它包括您的实例。它从中加载一个 K-最近邻学习器2blobs_knn.json,然后在其上评估您的实例。您可以将该文件名替换为由 waffles 工具生成的任何经过训练的监督模型的名称。

使用我使用的模型,程序打印“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
于 2012-08-15T17:39:37.150 回答