From be06e475f0612f6e0635b11e97c19751a336c0e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Montan=CC=83ana?= Date: Mon, 24 Jul 2023 13:22:53 +0200 Subject: [PATCH] Refactor tensor2vector --- .vscode/launch.json | 2 +- src/BayesNet/bayesnetUtils.cc | 17 ++++-------- src/BayesNet/bayesnetUtils.h | 2 +- src/Platform/Experiment.cc | 50 ++++++++++++++++++++++++++-------- src/Platform/m | Bin 180432 -> 0 bytes 5 files changed, 47 insertions(+), 24 deletions(-) delete mode 100755 src/Platform/m diff --git a/.vscode/launch.json b/.vscode/launch.json index 415f773..e881ccf 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -19,7 +19,7 @@ "name": "experiment", "program": "${workspaceFolder}/build/src/Platform/main", "args": [ - "-f", + "-d", "iris", "-m", "TAN", diff --git a/src/BayesNet/bayesnetUtils.cc b/src/BayesNet/bayesnetUtils.cc index 2e1176d..66502aa 100644 --- a/src/BayesNet/bayesnetUtils.cc +++ b/src/BayesNet/bayesnetUtils.cc @@ -11,21 +11,16 @@ namespace bayesnet { sort(indices.begin(), indices.end(), [&nums](int i, int j) {return nums[i] > nums[j];}); return indices; } - vector> tensorToVector(const Tensor& tensor) + vector> tensorToVector(Tensor& tensor) { // convert mxn tensor to nxm vector vector> result; - auto tensor_accessor = tensor.accessor(); - - // Iterate over columns and rows of the tensor - for (int j = 0; j < tensor.size(1); ++j) { - vector column; - for (int i = 0; i < tensor.size(0); ++i) { - column.push_back(tensor_accessor[i][j]); - } - result.push_back(column); + // Iterate over cols + for (int i = 0; i < tensor.size(1); ++i) { + auto col_tensor = tensor.index({ "...", i }); + auto col = vector(col_tensor.data_ptr(), col_tensor.data_ptr() + tensor.size(0)); + result.push_back(col); } - return result; } } \ No newline at end of file diff --git a/src/BayesNet/bayesnetUtils.h b/src/BayesNet/bayesnetUtils.h index bb03ca7..adfa8d7 100644 --- a/src/BayesNet/bayesnetUtils.h +++ b/src/BayesNet/bayesnetUtils.h @@ -6,6 +6,6 @@ namespace bayesnet { using namespace std; using namespace torch; vector argsort(vector& nums); - vector> tensorToVector(const Tensor& tensor); + vector> tensorToVector(Tensor& tensor); } #endif //BAYESNET_UTILS_H \ No newline at end of file diff --git a/src/Platform/Experiment.cc b/src/Platform/Experiment.cc index 27a2ef7..c0ede52 100644 --- a/src/Platform/Experiment.cc +++ b/src/Platform/Experiment.cc @@ -31,14 +31,20 @@ Result cross_validation(Fold* fold, bayesnet::BaseClassifier* model, Tensor& X, auto [train, test] = fold->getFold(i); auto train_t = torch::tensor(train); auto test_t = torch::tensor(test); - auto X_train = X.index({ train_t }); + auto X_train = X.index({ train_t, "..." }); auto y_train = y.index({ train_t }); - auto X_test = X.index({ test_t }); + auto X_test = X.index({ test_t, "..." }); auto y_test = y.index({ test_t }); model->fit(X_train, y_train, features, className, states); + cout << "Training Fold " << i + 1 << endl; + cout << "X_train: " << X_train.sizes() << endl; + cout << "y_train: " << y_train.sizes() << endl; + cout << "X_test: " << X_test.sizes() << endl; + cout << "y_test: " << y_test.sizes() << endl; train_time[i] = train_timer.getDuration(); test_timer.start(); - auto acc = model->score(X_test, y_test); + //auto acc = model->score(X_test, y_test); + auto acc = 7; test_time[i] = test_timer.getDuration(); accuracy[i] = acc; } @@ -64,7 +70,7 @@ int main(int argc, char** argv) valid_datasets.push_back(dataset.first); } argparse::ArgumentParser program("BayesNetSample"); - program.add_argument("-f", "--file") + program.add_argument("-d", "--dataset") .help("Dataset file name") .action([valid_datasets](const std::string& value) { if (find(valid_datasets.begin(), valid_datasets.end(), value) != valid_datasets.end()) { @@ -74,7 +80,7 @@ int main(int argc, char** argv) } ); program.add_argument("-p", "--path") - .help(" folder where the data files are located, default") + .help("folder where the data files are located, default") .default_value(string{ PATH } ); program.add_argument("-m", "--model") @@ -87,15 +93,33 @@ int main(int argc, char** argv) throw runtime_error("Model must be one of {AODE, KDB, SPODE, TAN}"); } ); - program.add_argument("--discretize").default_value(false).implicit_value(true); - bool class_last, discretize_dataset; + program.add_argument("--discretize").help("Discretize input dataset").default_value(false).implicit_value(true); + program.add_argument("--stratified").help("If Stratified KFold is to be done").default_value(false).implicit_value(true); + program.add_argument("-f", "--folds").help("Number of folds").default_value(5).scan<'i', int>().action([](const string& value) { + try { + auto k = stoi(value); + if (k < 2) { + throw runtime_error("Number of folds must be greater than 1"); + } + return k; + } + catch (const runtime_error& err) { + throw runtime_error(err.what()); + } + catch (...) { + throw runtime_error("Number of folds must be an integer"); + }}); + bool class_last, discretize_dataset, stratified; + int n_folds; string model_name, file_name, path, complete_file_name; try { program.parse_args(argc, argv); - file_name = program.get("file"); + file_name = program.get("dataset"); path = program.get("path"); model_name = program.get("model"); discretize_dataset = program.get("discretize"); + stratified = program.get("stratified"); + n_folds = program.get("folds"); complete_file_name = path + file_name + ".arff"; class_last = datasets[file_name]; if (!file_exists(complete_file_name)) { @@ -111,7 +135,11 @@ int main(int argc, char** argv) * Begin Processing */ auto [X, y, features, className, states] = loadDataset(path, file_name, class_last, discretize_dataset); - auto fold = StratifiedKFold(5, y, -1); + Fold* fold; + if (stratified) + fold = new StratifiedKFold(n_folds, y, -1); + else + fold = new KFold(n_folds, y.numel(), -1); auto classifiers = map({ { "AODE", new bayesnet::AODE() }, { "KDB", new bayesnet::KDB(2) }, { "SPODE", new bayesnet::SPODE(2) }, { "TAN", new bayesnet::TAN() } @@ -119,9 +147,9 @@ int main(int argc, char** argv) ); auto experiment = Experiment(); experiment.setDiscretized(discretize_dataset).setModel(model_name).setPlatform("cpp"); - experiment.setStratified(true).setNFolds(5).addRandomSeed(271).setScoreName("accuracy"); + experiment.setStratified(stratified).setNFolds(5).addRandomSeed(271).setScoreName("accuracy"); bayesnet::BaseClassifier* model = classifiers[model_name]; - auto result = cross_validation(&fold, model, X, y, features, className, states); + auto result = cross_validation(fold, model, X, y, features, className, states); result.setDataset(file_name); experiment.addResult(result); experiment.save(path); diff --git a/src/Platform/m b/src/Platform/m deleted file mode 100755 index 032330654739cca8f834dca3b32968077b824c53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180432 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�z#QDVlV|=F*D6AeQLun1@#Mw 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 dG7wUe2Ot~S>?t%9xFNYFWGkyV=!