Files
SVMClassifier/data__converter_8hpp_source.html
2025-06-22 11:25:27 +00:00

26 KiB

<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> <head> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <script type="text/javascript" src="search/searchdata.js"></script> <script type="text/javascript" src="search/search.js"></script> </head>
SVM Classifier C++ 1.0.0
High-performance Support Vector Machine classifier with scikit-learn compatible API
<script type="text/javascript"> /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ var searchBox = new SearchBox("searchBox", "search/",'.html'); /* @license-end */ </script> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ $(function() { initMenu('',true,false,'search.php','Search'); $(document).ready(function() { init_search(); }); }); /* @license-end */ </script>
<script type="text/javascript"> /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ $(document).ready(function() { init_codefold(0); }); /* @license-end */ </script>
Loading...
Searching...
No Matches
data_converter.hpp
1#pragma once
2
3#include "types.hpp"
4#include <torch/torch.h>
5#include <vector>
6#include <memory>
7
8// Forward declarations for libsvm and liblinear structures
9struct svm_node;
10struct svm_problem;
11struct feature_node;
12struct problem;
13
14namespace svm_classifier {
15
24 public:
29
34
41 std::unique_ptr<svm_problem> to_svm_problem(const torch::Tensor& X,
42 const torch::Tensor& y = torch::Tensor());
43
50 std::unique_ptr<problem> to_linear_problem(const torch::Tensor& X,
51 const torch::Tensor& y = torch::Tensor());
52
58 svm_node* to_svm_node(const torch::Tensor& sample);
59
65 feature_node* to_feature_node(const torch::Tensor& sample);
66
72 torch::Tensor from_predictions(const std::vector<double>& predictions);
73
79 torch::Tensor from_probabilities(const std::vector<std::vector<double>>& probabilities);
80
86 torch::Tensor from_decision_values(const std::vector<std::vector<double>>& decision_values);
87
94 void validate_tensors(const torch::Tensor& X, const torch::Tensor& y = torch::Tensor());
95
100 int get_n_features() const { return n_features_; }
101
106 int get_n_samples() const { return n_samples_; }
107
111 void cleanup();
112
117 void set_sparse_threshold(double threshold) { sparse_threshold_ = threshold; }
118
123 double get_sparse_threshold() const { return sparse_threshold_; }
124
125 private:
126 int n_features_;
127 int n_samples_;
128 double sparse_threshold_;
129
130 // Memory management for libsvm structures
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_;
134
135 // Memory management for liblinear structures
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_;
139
140 // Single sample storage (for prediction)
141 std::vector<svm_node> single_svm_nodes_;
142 std::vector<feature_node> single_linear_nodes_;
143
149 std::vector<std::vector<svm_node>> tensor_to_svm_nodes(const torch::Tensor& X);
150
156 std::vector<std::vector<feature_node>> tensor_to_linear_nodes(const torch::Tensor& X);
157
163 std::vector<svm_node> sample_to_svm_nodes(const torch::Tensor& sample);
164
170 std::vector<feature_node> sample_to_linear_nodes(const torch::Tensor& sample);
171
177 std::vector<double> extract_labels(const torch::Tensor& y);
178
184 torch::Tensor ensure_cpu_tensor(const torch::Tensor& tensor);
185
192 void validate_tensor_properties(const torch::Tensor& tensor, int expected_dims, const std::string& name);
193 };
194
195} // namespace svm_classifier
Data converter between libtorch tensors and SVM library formats.
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.

Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by doxygen 1.9.8 </html>