#ifndef NETWORK_H #define NETWORK_H #include "Node.h" #include #include namespace bayesnet { class Network { private: map nodes; map> dataset; float maxThreads; int classNumStates; vector features; string className; int laplaceSmoothing; torch::Tensor samples; bool isCyclic(const std::string&, std::unordered_set&, std::unordered_set&); vector predict_sample(const vector&); vector exactInference(map&); double computeFactor(map&); double mutual_info(torch::Tensor&, torch::Tensor&); double entropy(torch::Tensor&); double conditionalEntropy(torch::Tensor&, torch::Tensor&); double mutualInformation(torch::Tensor&, torch::Tensor&); public: Network(); Network(float, int); Network(float); Network(Network&); ~Network(); torch::Tensor& getSamples(); float getmaxThreads(); void addNode(string, int); void addEdge(const string, const string); map& getNodes(); vector getFeatures(); int getStates(); int getClassNumStates(); string getClassName(); void fit(const vector>&, const vector&, const vector&, const string&); vector predict(const vector>&); //Computes the conditional edge weight of variable index u and v conditioned on class_node torch::Tensor conditionalEdgeWeight(); vector> predict_proba(const vector>&); double score(const vector>&, const vector&); inline string version() { return "0.1.0"; } }; } #endif