4#include <torch/torch.h>
14namespace svm_classifier {
42 const torch::Tensor& y = torch::Tensor());
51 const torch::Tensor& y = torch::Tensor());
94 void validate_tensors(
const torch::Tensor& X,
const torch::Tensor& y = torch::Tensor());
128 double sparse_threshold_;
131 std::vector<std::vector<svm_node>> svm_nodes_storage_;
132 std::vector<svm_node*> svm_x_space_;
133 std::vector<double> svm_y_space_;
136 std::vector<std::vector<feature_node>> linear_nodes_storage_;
137 std::vector<feature_node*> linear_x_space_;
138 std::vector<double> linear_y_space_;
141 std::vector<svm_node> single_svm_nodes_;
142 std::vector<feature_node> single_linear_nodes_;
149 std::vector<std::vector<svm_node>> tensor_to_svm_nodes(
const torch::Tensor& X);
156 std::vector<std::vector<feature_node>> tensor_to_linear_nodes(
const torch::Tensor& X);
163 std::vector<svm_node> sample_to_svm_nodes(
const torch::Tensor& sample);
170 std::vector<feature_node> sample_to_linear_nodes(
const torch::Tensor& sample);
177 std::vector<double> extract_labels(
const torch::Tensor& y);
184 torch::Tensor ensure_cpu_tensor(
const torch::Tensor& tensor);
192 void validate_tensor_properties(
const torch::Tensor& tensor,
int expected_dims,
const std::string& name);
int get_n_samples() const
Get number of samples from last conversion.
svm_node * to_svm_node(const torch::Tensor &sample)
Convert single sample to libsvm format.
double get_sparse_threshold() const
Get sparse threshold.
int get_n_features() const
Get number of features from last conversion.
void cleanup()
Clean up all allocated memory.
torch::Tensor from_decision_values(const std::vector< std::vector< double > > &decision_values)
Convert decision values back to PyTorch tensor.
torch::Tensor from_probabilities(const std::vector< std::vector< double > > &probabilities)
Convert probabilities back to PyTorch tensor.
DataConverter()
Default constructor.
std::unique_ptr< svm_problem > to_svm_problem(const torch::Tensor &X, const torch::Tensor &y=torch::Tensor())
Convert PyTorch tensors to libsvm format.
feature_node * to_feature_node(const torch::Tensor &sample)
Convert single sample to liblinear format.
std::unique_ptr< problem > to_linear_problem(const torch::Tensor &X, const torch::Tensor &y=torch::Tensor())
Convert PyTorch tensors to liblinear format.
void set_sparse_threshold(double threshold)
Set sparse threshold (features with absolute value below this are ignored)
void validate_tensors(const torch::Tensor &X, const torch::Tensor &y=torch::Tensor())
Validate input tensors.
torch::Tensor from_predictions(const std::vector< double > &predictions)
Convert predictions back to PyTorch tensor.
~DataConverter()
Destructor - cleans up allocated memory.