あなたのコードが何も出力しない理由は、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