過去数年で、Pythonとscikit-learnがデータサイエンスのある種のゴールドスタンダードであると聞いたことがあります。
C ++で書かれたライブラリである機械学習の分野での代替開発の可能性についてお話ししたいと思います。
TMVA( ROOTを使用した多変量データ分析用ツールキット)は、 ROOT Big Data Analysisパッケージに追加される機械学習アルゴリズムのオープンソースライブラリであり、それに応じてインストールされます。 インストールの詳細はマニュアルに記載されているため、この点については考慮しません。
最近まで、 TMVAはプロジェクトのメインサイトと見なされていましたが、 見てわかるように、 TMVAには長い間更新がありませんでした。 これは懐疑論やパニックの理由ではありません。 現在、 Cern開発者の新しいチームが開発に従事しています。
CERN (欧州原子力研究機関)は、 大量のデータを分析するためのソフトウェアを作成する先駆者でした。 オブジェクト指向ライブラリROOTが開発されたのは、物理学の世界だけでなくアプリケーションが見つかったためです 。
ROOTでは、データは非常に経済的な * .root 形式で保存されますが、任意のテキスト形式で作業できます。 簡単にするために、TMVAで作業するときは通常のテキスト形式csv / txtを使用します。
残念ながら、現時点では、TMVAは教師トレーニングアルゴリズムのみを使用しています。
TMVAの相関行列は次のようになります。
機能の比率:
Ro曲線は非標準に見えます:
そこで、すでにROOTがインストールされており、2つのテキストファイルがあることを想像してみましょう。「良い」ものと分類する(または予測のための回帰を作成する)必要のあるものです。 これらの2つのファイルを入力としてファイリングするには、ファイルヘッダーを必要な形式にする必要があります。
id / F:Param1 / I:Param2 / I:Param3 / F
id / F:Param1 / I:Param2 / I:Param3 / F
2,59,1,0
3.85,0.44
4.39.0.78
...
TMVAには2つのデータ型があります:FloatおよびInteger(Readerではfloatのみ)
デフォルトでは、変数の区切りとしてカンマがあります。
ユーザーガイドでアルゴリズムのリストを表示できます。
コードに移りましょう。
#include "TMVA/Types.h" #include "TMVA/Factory.h" #include "TMVA/Tools.h" using std::cout; //For Reader std::string outputListFileName; void Model_BDT() { std::cout << std::endl; std::cout << "===> Start TMVAClassification" << std::endl; // ROOT-, : , , RO-) TFile* outFputFile = new TFile("Model.root", "RECREATE"); // ( MakeClass, weights, xml TMVA::Factory *factory = new TMVA::Factory("TMVAClassification_Model",outFputFile,"V:!Silent:Color:Transformations=I:DrawProgressBar:AnalysisType=Classification"); // TString sigFile="Signal.csv"; TString bkgFile ="Background.csv"; cout << ">>>> Adding variables phase\n"; factory->AddVariable("Param1",'I'); factory->AddVariable("Param2",'I'); factory->AddVariable("Param3",'F'); //Id factory->AddSpectator("id", 'F'); Double_t sigWeight = 1.0; // overall weight for all signal events Double_t bkgWeight = 1.0; // overall weight for all background events factory->SetInputTrees( sigFile, bkgFile, sigWeight, bkgWeight ); cout << ">>>> Cutting\n"; // Param1 Param3; - TCut preselectionCut("Param1 > 0. && Param3<350.0"); TCut mycutS = ""; // n- Background, , TCut mycutB = "id%100==0"; // factory->PrepareTrainingAndTestTree(mycutS, mycutB, "nTrain_Signal=16000:nTest_Signal=1451:nTrain_Background=800000:nTest_Background=118416:VerboseLevel=Debug"); // Boosted Decision and Regression Trees, factory->BookMethod(TMVA::Types::kBDT, "BDT", "MaxDepth=5:NTrees=2000:MinNodeSize=9%:PruneStrength=10:SeparationType=GiniIndex"); // help factory->PrintHelpMessage("BDT"); //, cout << ">>>> doing TrainAllMethods\n"; factory->TrainAllMethods(); cout << ">>>> doing TestAllMethods\n"; factory->TestAllMethods(); cout << ">>>> doing EvaluateAllMethods\n"; factory->EvaluateAllMethods(); // Save the output outFputFile->Close(); std::cout << "===> Wrote root file: " << outFputFile->GetName() << std::endl; std::cout << "===> TMVAClassification is done!" << std::endl; delete factory; }
ターミナル「root Model_BDT.C」からコマンドを使用してマクロを実行できます。
すべてがカウントされた後、「TBrowser b;」コマンドを使用してコンソールでROOTブラウザを開くことができます 多くのかわいいグラフィックをお楽しみください。
次の記事では、結果モデルを他のデータに適用し、特定のカットオフスコアで高速化された配列をアンロードできるReaderモデルの作成方法について説明します。