得られたモデルを実際に適用する方法についての約束された話を続け、同時に、TMVA排他性のトピックをより詳細に拡大していきます。
最大のシステムパフォーマンス(ゲーム開発、マップサービス、またはコライダーからのデータ)を必要とするプロジェクトで作業している場合、コードがハードウェアに非常に近い言語(C / C ++)で記述されていることは明らかです。 そして、プロジェクトのニーズに応じて、いくつかの数学をサービスに追加する必要があります。 通常、目はプロトタイプのアイデアを作成するための多くの便利な数学ライブラリを備えた蛇行言語に目を向けますが、本当に大量のデータを操作し、マシンのすべてのリソースを持っているかのように食べるのは無意味です。
この場合、チームに人材を採用する必要があります。 ひざを描く Pythonでのコーディング、として 工業用YPでの開発には通常少し時間がかかります(通常はそのようなものですが、実際には、平均的なpythonistで優れたC ++コードを書いている人に会いました)。
CERNのROOTライブラリは、プロトタイピングアルゴリズムの問題を解決し、愛好家の開発プロセスを高速化します。
「ROOTは、統計分析のためにRやMATLABのようなツールボックスを提供しますが、マクロのアイデアのプロトタイプ作成にもC ++を使用することで、生産環境への研究のより迅速な実装を可能にします。効率的な方法」
コードをコンパイルでき、マクロを書くことができます。これは重要です-開発速度が向上します。このため、非実動ツールのサポートに時間を費やす必要はありません。
TMVAのReaderに直接行きましょう。 既に述べたように、ビルドされたモデルを読み取り、同様の構造を持つデータに適用することができます。特定のカットオフスピードスコアで情報(ID、電話番号、メール)をアップロードできます。 つまり TMVAで取得したモデルは移植可能です...
リーダーのサンプル:
{ cout <<" >>>> _____________________Reader application launched_________________________________________________________\n"; // TFile* realdata = new TFile("ForScoring.csv"); // root- TFile *target = new TFile("real_data-mva.root","RECREATE" ); // TMVA::Reader *reader = new TMVA::Reader( "V:Color:!Silent" ); // Float_t var[2]; reader->AddVariable ("Param0", &var[0]); reader->AddVariable ("Param1", &var[1]); reader->AddVariable ("Param2", &var[2]); //reader->AddSpectator("id", &var[3]); //if we need download it cout <<" >>>> All is good, next phase \n"; // xml , weights reader->BookMVA("SVM", "weights/TMVAClassification_SVM.weights.xml"); Float_t uservar[3]; //Long64_t id; realdataTree->SetBranchAddress("Param0",&uservar[0]); realdataTree->SetBranchAddress("Param1",&uservar[1]); realdataTree->SetBranchAddress("Param2",&Param2); // id' Float_t SVM_response; tree->Branch("SVM_response",&SVM_response); outputListFileName = "Output_mva.csv"; cout << "opening file "<<outputListFileName <<"\n"; ofstream* outCsv = new ofstream(outputListFileName.c_str()); for (Long64_t ievt=0; ievt<realdataTree->GetEntries();ievt++) { if (ievt%5000000 == 0) std::cout << "--- ... Processing event: " << ievt <<std::endl; realdataTree->GetEntry(ievt); // var[0]=Param0; var[1]=Param1; var[2]=Param2; // . 0.9 BDT_response=reader->EvaluateMVA("SVM"); if (SVM_response >= 0.9) *outCsv << id << ";" << SVM_response <<"\n"; tree->Fill(); } outCsv->close(); delete outCsv; delete reader; tree->Write(); target->Close(); }