0

私の名前はティティリです。ワッフル ライブラリを見つけて分類できてうれしいです。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は無料の模倣者です) を使用して、クラス 0 が (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 に答える