This commit is contained in:
rmontanana
2025-06-22 11:25:27 +00:00
commit a1bf986365
173 changed files with 13677 additions and 0 deletions

0
.nojekyll Normal file
View File

95
annotated.html Normal file
View File

@@ -0,0 +1,95 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Class List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">Class List</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>svm_classifier</b></td><td class="desc"></td></tr>
<tr id="row_0_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classsvm__classifier_1_1DataConverter.html" target="_self">DataConverter</a></td><td class="desc">Data converter between libtorch tensors and SVM library formats </td></tr>
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html" target="_self">EvaluationMetrics</a></td><td class="desc">Model evaluation metrics </td></tr>
<tr id="row_0_2_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html" target="_self">MulticlassStrategyBase</a></td><td class="desc">Abstract base class for multiclass classification strategies </td></tr>
<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html" target="_self">OneVsOneStrategy</a></td><td class="desc">One-vs-One (OvO) multiclass strategy </td></tr>
<tr id="row_0_4_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html" target="_self">OneVsRestStrategy</a></td><td class="desc">One-vs-Rest (OvR) multiclass strategy </td></tr>
<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsvm__classifier_1_1PredictionResult.html" target="_self">PredictionResult</a></td><td class="desc">Prediction result structure </td></tr>
<tr id="row_0_6_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classsvm__classifier_1_1SVMClassifier.html" target="_self">SVMClassifier</a></td><td class="desc">Support Vector Machine Classifier with scikit-learn compatible API </td></tr>
<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsvm__classifier_1_1TrainingMetrics.html" target="_self">TrainingMetrics</a></td><td class="desc">Training metrics structure </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

BIN
bc_s.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

BIN
bc_sd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

106
classes.html Normal file
View File

@@ -0,0 +1,106 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Class Index</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">Class Index</div></div>
</div><!--header-->
<div class="contents">
<div class="qindex"><a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_E">E</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_O">O</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a></div>
<div class="classindex">
<dl class="classindex even">
<dt class="alphachar"><a id="letter_D" name="letter_D">D</a></dt>
<dd><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> (svm_classifier)</dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_E" name="letter_E">E</a></dt>
<dd><a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html">EvaluationMetrics</a> (svm_classifier)</dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_M" name="letter_M">M</a></dt>
<dd><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">MulticlassStrategyBase</a> (svm_classifier)</dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_O" name="letter_O">O</a></dt>
<dd><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">OneVsOneStrategy</a> (svm_classifier)</dd><dd><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">OneVsRestStrategy</a> (svm_classifier)</dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_P" name="letter_P">P</a></dt>
<dd><a class="el" href="structsvm__classifier_1_1PredictionResult.html">PredictionResult</a> (svm_classifier)</dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt>
<dd><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> (svm_classifier)</dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_T" name="letter_T">T</a></dt>
<dd><a class="el" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a> (svm_classifier)</dd></dl>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,119 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>svm_classifier</b></li><li class="navelem"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">svm_classifier::DataConverter Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8">cleanup</a>()</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8">cleanup</a>()</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056">DataConverter</a>()</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056">DataConverter</a>()</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f">from_decision_values</a>(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;decision_values)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f">from_decision_values</a>(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;decision_values)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741">from_predictions</a>(const std::vector&lt; double &gt; &amp;predictions)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741">from_predictions</a>(const std::vector&lt; double &gt; &amp;predictions)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff">from_probabilities</a>(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;probabilities)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff">from_probabilities</a>(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;probabilities)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a26342a8cc8b943f099112040aa960ae6">get_n_features</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a26342a8cc8b943f099112040aa960ae6">get_n_features</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a16999ded27bc2d42d2ebd9551b00c1cb">get_n_samples</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a16999ded27bc2d42d2ebd9551b00c1cb">get_n_samples</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a1905f60fef9ffd3a8e8e45e41395352d">get_sparse_threshold</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a1905f60fef9ffd3a8e8e45e41395352d">get_sparse_threshold</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a9259322e54d2477478a684e99d8e557a">set_sparse_threshold</a>(double threshold)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a9259322e54d2477478a684e99d8e557a">set_sparse_threshold</a>(double threshold)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a6bb2b4565b27df0db5f229dbd380795e">to_feature_node</a>(const torch::Tensor &amp;sample)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a6bb2b4565b27df0db5f229dbd380795e">to_feature_node</a>(const torch::Tensor &amp;sample)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a7e7d8f6102b7a9b3256ff0dc6f536a35">to_linear_problem</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a7e7d8f6102b7a9b3256ff0dc6f536a35">to_linear_problem</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a16e1539ef1266ca9ddd27a2ac5a53b92">to_svm_node</a>(const torch::Tensor &amp;sample)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a16e1539ef1266ca9ddd27a2ac5a53b92">to_svm_node</a>(const torch::Tensor &amp;sample)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a66f446e4decfe47bbba37c789f03f729">to_svm_problem</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#a66f446e4decfe47bbba37c789f03f729">to_svm_problem</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce">validate_tensors</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce">validate_tensors</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d">~DataConverter</a>()</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d">~DataConverter</a>()</td><td class="entry"><a class="el" href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,100 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>svm_classifier</b></li><li class="navelem"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">MulticlassStrategyBase</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">svm_classifier::MulticlassStrategyBase Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">classes_</a></td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ad1c4eb746cb1fdd67cf436ff85a9b0f0">decision_function</a>(const torch::Tensor &amp;X, DataConverter &amp;converter)=0</td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a548af7201b7970abee0c31e7ec07d896">fit</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y, const KernelParameters &amp;params, DataConverter &amp;converter)=0</td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a379c4000227cc46410bfbecce6e80c33">get_classes</a>() const =0</td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a1740d877a4d634ec1763cb8646f5e172">get_n_classes</a>() const =0</td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a31a0501fa1a6db1d41cbf825b2348e47">get_strategy_type</a>() const =0</td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8e74cd580feaac0da34d204274a24fea">is_trained_</a></td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a70f94cfcf8b2bf6d60133c688fe55f9d">predict</a>(const torch::Tensor &amp;X, DataConverter &amp;converter)=0</td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ab5348ee3b83547702ec7903ee7ee2da7">predict_proba</a>(const torch::Tensor &amp;X, DataConverter &amp;converter)=0</td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a2ab91902f8d6eb216f626ce9ea4be992">supports_probability</a>() const =0</td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8a5647dd57eed281288f0c9011b11395">~MulticlassStrategyBase</a>()=default</td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,535 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: svm_classifier::MulticlassStrategyBase Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>svm_classifier</b></li><li class="navelem"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">MulticlassStrategyBase</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classsvm__classifier_1_1MulticlassStrategyBase-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">svm_classifier::MulticlassStrategyBase Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div></div>
</div><!--header-->
<div class="contents">
<p>Abstract base class for multiclass classification strategies.
<a href="classsvm__classifier_1_1MulticlassStrategyBase.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for svm_classifier::MulticlassStrategyBase:</div>
<div class="dyncontent">
<div class="center"><img src="classsvm__classifier_1_1MulticlassStrategyBase__inherit__graph.png" border="0" usemap="#asvm__classifier_1_1MulticlassStrategyBase_inherit__map" alt="Inheritance graph"/></div>
<map name="asvm__classifier_1_1MulticlassStrategyBase_inherit__map" id="asvm__classifier_1_1MulticlassStrategyBase_inherit__map">
<area shape="rect" title="Abstract base class for multiclass classification strategies." alt="" coords="114,5,303,45"/>
<area shape="rect" href="classsvm__classifier_1_1OneVsOneStrategy.html" title="One&#45;vs&#45;One (OvO) multiclass strategy." alt="" coords="5,93,196,133"/>
<area shape="poly" title=" " alt="" coords="176,56,126,95,123,91,172,52"/>
<area shape="rect" href="classsvm__classifier_1_1OneVsRestStrategy.html" title="One&#45;vs&#45;Rest (OvR) multiclass strategy." alt="" coords="221,93,415,133"/>
<area shape="poly" title=" " alt="" coords="245,52,295,91,292,95,242,56"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a8a5647dd57eed281288f0c9011b11395" id="r_a8a5647dd57eed281288f0c9011b11395"><td class="memItemLeft" align="right" valign="top"><a id="a8a5647dd57eed281288f0c9011b11395" name="a8a5647dd57eed281288f0c9011b11395"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><b>~MulticlassStrategyBase</b> ()=default</td></tr>
<tr class="memdesc:a8a5647dd57eed281288f0c9011b11395"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual destructor. <br /></td></tr>
<tr class="separator:a8a5647dd57eed281288f0c9011b11395"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a548af7201b7970abee0c31e7ec07d896" id="r_a548af7201b7970abee0c31e7ec07d896"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a548af7201b7970abee0c31e7ec07d896">fit</a> (const torch::Tensor &amp;X, const torch::Tensor &amp;y, const KernelParameters &amp;params, <a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;converter)=0</td></tr>
<tr class="memdesc:a548af7201b7970abee0c31e7ec07d896"><td class="mdescLeft">&#160;</td><td class="mdescRight">Train the multiclass classifier. <br /></td></tr>
<tr class="separator:a548af7201b7970abee0c31e7ec07d896"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a70f94cfcf8b2bf6d60133c688fe55f9d" id="r_a70f94cfcf8b2bf6d60133c688fe55f9d"><td class="memItemLeft" align="right" valign="top">virtual std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a70f94cfcf8b2bf6d60133c688fe55f9d">predict</a> (const torch::Tensor &amp;X, <a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;converter)=0</td></tr>
<tr class="memdesc:a70f94cfcf8b2bf6d60133c688fe55f9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict class labels. <br /></td></tr>
<tr class="separator:a70f94cfcf8b2bf6d60133c688fe55f9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5348ee3b83547702ec7903ee7ee2da7" id="r_ab5348ee3b83547702ec7903ee7ee2da7"><td class="memItemLeft" align="right" valign="top">virtual std::vector&lt; std::vector&lt; double &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ab5348ee3b83547702ec7903ee7ee2da7">predict_proba</a> (const torch::Tensor &amp;X, <a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;converter)=0</td></tr>
<tr class="memdesc:ab5348ee3b83547702ec7903ee7ee2da7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict class probabilities. <br /></td></tr>
<tr class="separator:ab5348ee3b83547702ec7903ee7ee2da7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1c4eb746cb1fdd67cf436ff85a9b0f0" id="r_ad1c4eb746cb1fdd67cf436ff85a9b0f0"><td class="memItemLeft" align="right" valign="top">virtual std::vector&lt; std::vector&lt; double &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ad1c4eb746cb1fdd67cf436ff85a9b0f0">decision_function</a> (const torch::Tensor &amp;X, <a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;converter)=0</td></tr>
<tr class="memdesc:ad1c4eb746cb1fdd67cf436ff85a9b0f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get decision function values. <br /></td></tr>
<tr class="separator:ad1c4eb746cb1fdd67cf436ff85a9b0f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a379c4000227cc46410bfbecce6e80c33" id="r_a379c4000227cc46410bfbecce6e80c33"><td class="memItemLeft" align="right" valign="top">virtual std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a379c4000227cc46410bfbecce6e80c33">get_classes</a> () const =0</td></tr>
<tr class="memdesc:a379c4000227cc46410bfbecce6e80c33"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get unique class labels. <br /></td></tr>
<tr class="separator:a379c4000227cc46410bfbecce6e80c33"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ab91902f8d6eb216f626ce9ea4be992" id="r_a2ab91902f8d6eb216f626ce9ea4be992"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a2ab91902f8d6eb216f626ce9ea4be992">supports_probability</a> () const =0</td></tr>
<tr class="memdesc:a2ab91902f8d6eb216f626ce9ea4be992"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the model supports probability prediction. <br /></td></tr>
<tr class="separator:a2ab91902f8d6eb216f626ce9ea4be992"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1740d877a4d634ec1763cb8646f5e172" id="r_a1740d877a4d634ec1763cb8646f5e172"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a1740d877a4d634ec1763cb8646f5e172">get_n_classes</a> () const =0</td></tr>
<tr class="memdesc:a1740d877a4d634ec1763cb8646f5e172"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get number of classes. <br /></td></tr>
<tr class="separator:a1740d877a4d634ec1763cb8646f5e172"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a31a0501fa1a6db1d41cbf825b2348e47" id="r_a31a0501fa1a6db1d41cbf825b2348e47"><td class="memItemLeft" align="right" valign="top">virtual MulticlassStrategy&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a31a0501fa1a6db1d41cbf825b2348e47">get_strategy_type</a> () const =0</td></tr>
<tr class="memdesc:a31a0501fa1a6db1d41cbf825b2348e47"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get strategy type. <br /></td></tr>
<tr class="separator:a31a0501fa1a6db1d41cbf825b2348e47"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-attribs" name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:a15bb6eb53e91e604b259b3050bd40e27" id="r_a15bb6eb53e91e604b259b3050bd40e27"><td class="memItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">classes_</a></td></tr>
<tr class="memdesc:a15bb6eb53e91e604b259b3050bd40e27"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unique class labels. <br /></td></tr>
<tr class="separator:a15bb6eb53e91e604b259b3050bd40e27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e74cd580feaac0da34d204274a24fea" id="r_a8e74cd580feaac0da34d204274a24fea"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8e74cd580feaac0da34d204274a24fea">is_trained_</a> = false</td></tr>
<tr class="memdesc:a8e74cd580feaac0da34d204274a24fea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether the model is trained. <br /></td></tr>
<tr class="separator:a8e74cd580feaac0da34d204274a24fea"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Abstract base class for multiclass classification strategies. </p>
<p class="definition">Definition at line <a class="el" href="multiclass__strategy_8hpp_source.html#l00020">20</a> of file <a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="ad1c4eb746cb1fdd67cf436ff85a9b0f0" name="ad1c4eb746cb1fdd67cf436ff85a9b0f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad1c4eb746cb1fdd67cf436ff85a9b0f0">&#9670;&#160;</a></span>decision_function()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual std::vector&lt; std::vector&lt; double &gt; &gt; svm_classifier::MulticlassStrategyBase::decision_function </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;&#160;</td>
<td class="paramname"><em>converter</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get decision function values. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">converter</td><td>Data converter instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Decision function values </dd></dl>
<p>Implemented in <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a966b79bc8b6fac0fa78feefc2dd8a878">svm_classifier::OneVsRestStrategy</a>, and <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a6aae0b5cd72180e94212454da8b777d2">svm_classifier::OneVsOneStrategy</a>.</p>
</div>
</div>
<a id="a548af7201b7970abee0c31e7ec07d896" name="a548af7201b7970abee0c31e7ec07d896"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a548af7201b7970abee0c31e7ec07d896">&#9670;&#160;</a></span>fit()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual <a class="el" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a> svm_classifier::MulticlassStrategyBase::fit </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const KernelParameters &amp;&#160;</td>
<td class="paramname"><em>params</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;&#160;</td>
<td class="paramname"><em>converter</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Train the multiclass classifier. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">y</td><td>Target tensor of shape (n_samples,) </td></tr>
<tr><td class="paramname">params</td><td>Kernel parameters </td></tr>
<tr><td class="paramname">converter</td><td>Data converter instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Training metrics </dd></dl>
<p>Implemented in <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#aae14da8c0effd04731b5a4a0181eb1b6">svm_classifier::OneVsRestStrategy</a>, and <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#af5ce4aeb191c5feed178b6465eac66f6">svm_classifier::OneVsOneStrategy</a>.</p>
</div>
</div>
<a id="a379c4000227cc46410bfbecce6e80c33" name="a379c4000227cc46410bfbecce6e80c33"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a379c4000227cc46410bfbecce6e80c33">&#9670;&#160;</a></span>get_classes()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual std::vector&lt; int &gt; svm_classifier::MulticlassStrategyBase::get_classes </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get unique class labels. </p>
<dl class="section return"><dt>Returns</dt><dd>Vector of unique class labels </dd></dl>
<p>Implemented in <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a5e10800b16dbc66fd1c0d5e0a42871f0">svm_classifier::OneVsRestStrategy</a>, and <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a52f9c3d7d98077d1dec0d6034711b750">svm_classifier::OneVsOneStrategy</a>.</p>
</div>
</div>
<a id="a1740d877a4d634ec1763cb8646f5e172" name="a1740d877a4d634ec1763cb8646f5e172"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1740d877a4d634ec1763cb8646f5e172">&#9670;&#160;</a></span>get_n_classes()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual int svm_classifier::MulticlassStrategyBase::get_n_classes </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get number of classes. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of classes </dd></dl>
<p>Implemented in <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a53abe89ec25c33fd9c32d92ba08d01ed">svm_classifier::OneVsRestStrategy</a>, and <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a16ee2ae3623767af2165fef2d4b7d039">svm_classifier::OneVsOneStrategy</a>.</p>
</div>
</div>
<a id="a31a0501fa1a6db1d41cbf825b2348e47" name="a31a0501fa1a6db1d41cbf825b2348e47"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a31a0501fa1a6db1d41cbf825b2348e47">&#9670;&#160;</a></span>get_strategy_type()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual MulticlassStrategy svm_classifier::MulticlassStrategyBase::get_strategy_type </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get strategy type. </p>
<dl class="section return"><dt>Returns</dt><dd>Multiclass strategy type </dd></dl>
<p>Implemented in <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#af9e1bd6d08ce3e7afd5279c835ce6cfb">svm_classifier::OneVsRestStrategy</a>, and <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#aae80b4e75459b2aca4f561d62c3c5675">svm_classifier::OneVsOneStrategy</a>.</p>
</div>
</div>
<a id="a70f94cfcf8b2bf6d60133c688fe55f9d" name="a70f94cfcf8b2bf6d60133c688fe55f9d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a70f94cfcf8b2bf6d60133c688fe55f9d">&#9670;&#160;</a></span>predict()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual std::vector&lt; int &gt; svm_classifier::MulticlassStrategyBase::predict </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;&#160;</td>
<td class="paramname"><em>converter</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Predict class labels. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">converter</td><td>Data converter instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Predicted class labels </dd></dl>
<p>Implemented in <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a771903a821d5380ddd5d0b3a912e7df9">svm_classifier::OneVsRestStrategy</a>, and <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#ab60df2d9b6069a73369b0bf9d3675662">svm_classifier::OneVsOneStrategy</a>.</p>
</div>
</div>
<a id="ab5348ee3b83547702ec7903ee7ee2da7" name="ab5348ee3b83547702ec7903ee7ee2da7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab5348ee3b83547702ec7903ee7ee2da7">&#9670;&#160;</a></span>predict_proba()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual std::vector&lt; std::vector&lt; double &gt; &gt; svm_classifier::MulticlassStrategyBase::predict_proba </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;&#160;</td>
<td class="paramname"><em>converter</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Predict class probabilities. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">converter</td><td>Data converter instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Class probabilities for each sample </dd></dl>
<p>Implemented in <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a55639e5adaadcd6414b50d5ebf0d1cd2">svm_classifier::OneVsRestStrategy</a>, and <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#ae62e8b24115042d1119e76f3302f6992">svm_classifier::OneVsOneStrategy</a>.</p>
</div>
</div>
<a id="a2ab91902f8d6eb216f626ce9ea4be992" name="a2ab91902f8d6eb216f626ce9ea4be992"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2ab91902f8d6eb216f626ce9ea4be992">&#9670;&#160;</a></span>supports_probability()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual bool svm_classifier::MulticlassStrategyBase::supports_probability </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if the model supports probability prediction. </p>
<dl class="section return"><dt>Returns</dt><dd>True if probabilities are supported </dd></dl>
<p>Implemented in <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a200300198628ac119eac09e62ff62336">svm_classifier::OneVsRestStrategy</a>, and <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a8875d29cb8666af10e0fb5634e08c0c1">svm_classifier::OneVsOneStrategy</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a15bb6eb53e91e604b259b3050bd40e27" name="a15bb6eb53e91e604b259b3050bd40e27"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15bb6eb53e91e604b259b3050bd40e27">&#9670;&#160;</a></span>classes_</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;int&gt; svm_classifier::MulticlassStrategyBase::classes_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Unique class labels. </p>
<p class="definition">Definition at line <a class="el" href="multiclass__strategy_8hpp_source.html#l00092">92</a> of file <a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>.</p>
</div>
</div>
<a id="a8e74cd580feaac0da34d204274a24fea" name="a8e74cd580feaac0da34d204274a24fea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8e74cd580feaac0da34d204274a24fea">&#9670;&#160;</a></span>is_trained_</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool svm_classifier::MulticlassStrategyBase::is_trained_ = false</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Whether the model is trained. </p>
<p class="definition">Definition at line <a class="el" href="multiclass__strategy_8hpp_source.html#l00093">93</a> of file <a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>include/svm_classifier/<a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,7 @@
<map id="svm_classifier::MulticlassStrategyBase" name="svm_classifier::MulticlassStrategyBase">
<area shape="rect" id="Node000001" title="Abstract base class for multiclass classification strategies." alt="" coords="114,5,303,45"/>
<area shape="rect" id="Node000002" href="$classsvm__classifier_1_1OneVsOneStrategy.html" title="One&#45;vs&#45;One (OvO) multiclass strategy." alt="" coords="5,93,196,133"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="176,56,126,95,123,91,172,52"/>
<area shape="rect" id="Node000003" href="$classsvm__classifier_1_1OneVsRestStrategy.html" title="One&#45;vs&#45;Rest (OvR) multiclass strategy." alt="" coords="221,93,415,133"/>
<area shape="poly" id="edge2_Node000001_Node000003" title=" " alt="" coords="245,52,295,91,292,95,242,56"/>
</map>

View File

@@ -0,0 +1 @@
528c9ce273deafae79516be82a187c40

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,102 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>svm_classifier</b></li><li class="navelem"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">OneVsOneStrategy</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">svm_classifier::OneVsOneStrategy Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">svm_classifier::OneVsOneStrategy</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">classes_</a></td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a6aae0b5cd72180e94212454da8b777d2">decision_function</a>(const torch::Tensor &amp;X, DataConverter &amp;converter) override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">svm_classifier::OneVsOneStrategy</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#af5ce4aeb191c5feed178b6465eac66f6">fit</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y, const KernelParameters &amp;params, DataConverter &amp;converter) override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">svm_classifier::OneVsOneStrategy</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a52f9c3d7d98077d1dec0d6034711b750">get_classes</a>() const override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">svm_classifier::OneVsOneStrategy</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a16ee2ae3623767af2165fef2d4b7d039">get_n_classes</a>() const override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">svm_classifier::OneVsOneStrategy</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#aae80b4e75459b2aca4f561d62c3c5675">get_strategy_type</a>() const override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">svm_classifier::OneVsOneStrategy</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8e74cd580feaac0da34d204274a24fea">is_trained_</a></td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a6d4b060383169010dda4197a0bffa020">OneVsOneStrategy</a>()</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">svm_classifier::OneVsOneStrategy</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#ab60df2d9b6069a73369b0bf9d3675662">predict</a>(const torch::Tensor &amp;X, DataConverter &amp;converter) override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">svm_classifier::OneVsOneStrategy</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#ae62e8b24115042d1119e76f3302f6992">predict_proba</a>(const torch::Tensor &amp;X, DataConverter &amp;converter) override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">svm_classifier::OneVsOneStrategy</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a8875d29cb8666af10e0fb5634e08c0c1">supports_probability</a>() const override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">svm_classifier::OneVsOneStrategy</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8a5647dd57eed281288f0c9011b11395">~MulticlassStrategyBase</a>()=default</td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#af9a653b62502e296d0d18092be56344f">~OneVsOneStrategy</a>() override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">svm_classifier::OneVsOneStrategy</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,505 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: svm_classifier::OneVsOneStrategy Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>svm_classifier</b></li><li class="navelem"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html">OneVsOneStrategy</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classsvm__classifier_1_1OneVsOneStrategy-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">svm_classifier::OneVsOneStrategy Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p>One-vs-One (OvO) multiclass strategy.
<a href="classsvm__classifier_1_1OneVsOneStrategy.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for svm_classifier::OneVsOneStrategy:</div>
<div class="dyncontent">
<div class="center"><img src="classsvm__classifier_1_1OneVsOneStrategy__inherit__graph.png" border="0" usemap="#asvm__classifier_1_1OneVsOneStrategy_inherit__map" alt="Inheritance graph"/></div>
<map name="asvm__classifier_1_1OneVsOneStrategy_inherit__map" id="asvm__classifier_1_1OneVsOneStrategy_inherit__map">
<area shape="rect" title="One&#45;vs&#45;One (OvO) multiclass strategy." alt="" coords="5,93,196,133"/>
<area shape="rect" href="classsvm__classifier_1_1MulticlassStrategyBase.html" title="Abstract base class for multiclass classification strategies." alt="" coords="6,5,195,45"/>
<area shape="poly" title=" " alt="" coords="103,59,103,93,98,93,98,59"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for svm_classifier::OneVsOneStrategy:</div>
<div class="dyncontent">
<div class="center"><img src="classsvm__classifier_1_1OneVsOneStrategy__coll__graph.png" border="0" usemap="#asvm__classifier_1_1OneVsOneStrategy_coll__map" alt="Collaboration graph"/></div>
<map name="asvm__classifier_1_1OneVsOneStrategy_coll__map" id="asvm__classifier_1_1OneVsOneStrategy_coll__map">
<area shape="rect" title="One&#45;vs&#45;One (OvO) multiclass strategy." alt="" coords="5,93,196,133"/>
<area shape="rect" href="classsvm__classifier_1_1MulticlassStrategyBase.html" title="Abstract base class for multiclass classification strategies." alt="" coords="6,5,195,45"/>
<area shape="poly" title=" " alt="" coords="103,59,103,93,98,93,98,59"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a6d4b060383169010dda4197a0bffa020" id="r_a6d4b060383169010dda4197a0bffa020"><td class="memItemLeft" align="right" valign="top"><a id="a6d4b060383169010dda4197a0bffa020" name="a6d4b060383169010dda4197a0bffa020"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>OneVsOneStrategy</b> ()</td></tr>
<tr class="memdesc:a6d4b060383169010dda4197a0bffa020"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <br /></td></tr>
<tr class="separator:a6d4b060383169010dda4197a0bffa020"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9a653b62502e296d0d18092be56344f" id="r_af9a653b62502e296d0d18092be56344f"><td class="memItemLeft" align="right" valign="top"><a id="af9a653b62502e296d0d18092be56344f" name="af9a653b62502e296d0d18092be56344f"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>~OneVsOneStrategy</b> () override</td></tr>
<tr class="memdesc:af9a653b62502e296d0d18092be56344f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:af9a653b62502e296d0d18092be56344f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af5ce4aeb191c5feed178b6465eac66f6" id="r_af5ce4aeb191c5feed178b6465eac66f6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#af5ce4aeb191c5feed178b6465eac66f6">fit</a> (const torch::Tensor &amp;X, const torch::Tensor &amp;y, const KernelParameters &amp;params, <a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;converter) override</td></tr>
<tr class="memdesc:af5ce4aeb191c5feed178b6465eac66f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Train the multiclass classifier. <br /></td></tr>
<tr class="separator:af5ce4aeb191c5feed178b6465eac66f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab60df2d9b6069a73369b0bf9d3675662" id="r_ab60df2d9b6069a73369b0bf9d3675662"><td class="memItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#ab60df2d9b6069a73369b0bf9d3675662">predict</a> (const torch::Tensor &amp;X, <a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;converter) override</td></tr>
<tr class="memdesc:ab60df2d9b6069a73369b0bf9d3675662"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict class labels. <br /></td></tr>
<tr class="separator:ab60df2d9b6069a73369b0bf9d3675662"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae62e8b24115042d1119e76f3302f6992" id="r_ae62e8b24115042d1119e76f3302f6992"><td class="memItemLeft" align="right" valign="top">std::vector&lt; std::vector&lt; double &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#ae62e8b24115042d1119e76f3302f6992">predict_proba</a> (const torch::Tensor &amp;X, <a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;converter) override</td></tr>
<tr class="memdesc:ae62e8b24115042d1119e76f3302f6992"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict class probabilities. <br /></td></tr>
<tr class="separator:ae62e8b24115042d1119e76f3302f6992"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6aae0b5cd72180e94212454da8b777d2" id="r_a6aae0b5cd72180e94212454da8b777d2"><td class="memItemLeft" align="right" valign="top">std::vector&lt; std::vector&lt; double &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a6aae0b5cd72180e94212454da8b777d2">decision_function</a> (const torch::Tensor &amp;X, <a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;converter) override</td></tr>
<tr class="memdesc:a6aae0b5cd72180e94212454da8b777d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get decision function values. <br /></td></tr>
<tr class="separator:a6aae0b5cd72180e94212454da8b777d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a52f9c3d7d98077d1dec0d6034711b750" id="r_a52f9c3d7d98077d1dec0d6034711b750"><td class="memItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a52f9c3d7d98077d1dec0d6034711b750">get_classes</a> () const override</td></tr>
<tr class="memdesc:a52f9c3d7d98077d1dec0d6034711b750"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get unique class labels. <br /></td></tr>
<tr class="separator:a52f9c3d7d98077d1dec0d6034711b750"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8875d29cb8666af10e0fb5634e08c0c1" id="r_a8875d29cb8666af10e0fb5634e08c0c1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a8875d29cb8666af10e0fb5634e08c0c1">supports_probability</a> () const override</td></tr>
<tr class="memdesc:a8875d29cb8666af10e0fb5634e08c0c1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the model supports probability prediction. <br /></td></tr>
<tr class="separator:a8875d29cb8666af10e0fb5634e08c0c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a16ee2ae3623767af2165fef2d4b7d039" id="r_a16ee2ae3623767af2165fef2d4b7d039"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a16ee2ae3623767af2165fef2d4b7d039">get_n_classes</a> () const override</td></tr>
<tr class="memdesc:a16ee2ae3623767af2165fef2d4b7d039"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get number of classes. <br /></td></tr>
<tr class="separator:a16ee2ae3623767af2165fef2d4b7d039"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae80b4e75459b2aca4f561d62c3c5675" id="r_aae80b4e75459b2aca4f561d62c3c5675"><td class="memItemLeft" align="right" valign="top">MulticlassStrategy&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#aae80b4e75459b2aca4f561d62c3c5675">get_strategy_type</a> () const override</td></tr>
<tr class="memdesc:aae80b4e75459b2aca4f561d62c3c5675"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get strategy type. <br /></td></tr>
<tr class="separator:aae80b4e75459b2aca4f561d62c3c5675"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classsvm__classifier_1_1MulticlassStrategyBase"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classsvm__classifier_1_1MulticlassStrategyBase')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td></tr>
<tr class="memitem:a8a5647dd57eed281288f0c9011b11395 inherit pub_methods_classsvm__classifier_1_1MulticlassStrategyBase" id="r_a8a5647dd57eed281288f0c9011b11395"><td class="memItemLeft" align="right" valign="top">
virtual&#160;</td><td class="memItemRight" valign="bottom"><b>~MulticlassStrategyBase</b> ()=default</td></tr>
<tr class="memdesc:a8a5647dd57eed281288f0c9011b11395 inherit pub_methods_classsvm__classifier_1_1MulticlassStrategyBase"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual destructor. <br /></td></tr>
<tr class="separator:a8a5647dd57eed281288f0c9011b11395 inherit pub_methods_classsvm__classifier_1_1MulticlassStrategyBase"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="inherited" name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td></tr>
<tr class="memitem:a15bb6eb53e91e604b259b3050bd40e27 inherit pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase" id="r_a15bb6eb53e91e604b259b3050bd40e27"><td class="memItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">classes_</a></td></tr>
<tr class="memdesc:a15bb6eb53e91e604b259b3050bd40e27 inherit pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unique class labels. <br /></td></tr>
<tr class="separator:a15bb6eb53e91e604b259b3050bd40e27 inherit pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e74cd580feaac0da34d204274a24fea inherit pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase" id="r_a8e74cd580feaac0da34d204274a24fea"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8e74cd580feaac0da34d204274a24fea">is_trained_</a> = false</td></tr>
<tr class="memdesc:a8e74cd580feaac0da34d204274a24fea inherit pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether the model is trained. <br /></td></tr>
<tr class="separator:a8e74cd580feaac0da34d204274a24fea inherit pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>One-vs-One (OvO) multiclass strategy. </p>
<p class="definition">Definition at line <a class="el" href="multiclass__strategy_8hpp_source.html#l00171">171</a> of file <a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a6aae0b5cd72180e94212454da8b777d2" name="a6aae0b5cd72180e94212454da8b777d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6aae0b5cd72180e94212454da8b777d2">&#9670;&#160;</a></span>decision_function()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; std::vector&lt; double &gt; &gt; svm_classifier::OneVsOneStrategy::decision_function </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;&#160;</td>
<td class="paramname"><em>converter</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get decision function values. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">converter</td><td>Data converter instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Decision function values </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ad1c4eb746cb1fdd67cf436ff85a9b0f0">svm_classifier::MulticlassStrategyBase</a>.</p>
</div>
</div>
<a id="af5ce4aeb191c5feed178b6465eac66f6" name="af5ce4aeb191c5feed178b6465eac66f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af5ce4aeb191c5feed178b6465eac66f6">&#9670;&#160;</a></span>fit()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a> svm_classifier::OneVsOneStrategy::fit </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const KernelParameters &amp;&#160;</td>
<td class="paramname"><em>params</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;&#160;</td>
<td class="paramname"><em>converter</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Train the multiclass classifier. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">y</td><td>Target tensor of shape (n_samples,) </td></tr>
<tr><td class="paramname">params</td><td>Kernel parameters </td></tr>
<tr><td class="paramname">converter</td><td>Data converter instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Training metrics </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a548af7201b7970abee0c31e7ec07d896">svm_classifier::MulticlassStrategyBase</a>.</p>
</div>
</div>
<a id="a52f9c3d7d98077d1dec0d6034711b750" name="a52f9c3d7d98077d1dec0d6034711b750"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a52f9c3d7d98077d1dec0d6034711b750">&#9670;&#160;</a></span>get_classes()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; int &gt; svm_classifier::OneVsOneStrategy::get_classes </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get unique class labels. </p>
<dl class="section return"><dt>Returns</dt><dd>Vector of unique class labels </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a379c4000227cc46410bfbecce6e80c33">svm_classifier::MulticlassStrategyBase</a>.</p>
<p class="definition">Definition at line <a class="el" href="multiclass__strategy_8hpp_source.html#l00197">197</a> of file <a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>.</p>
</div>
</div>
<a id="a16ee2ae3623767af2165fef2d4b7d039" name="a16ee2ae3623767af2165fef2d4b7d039"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a16ee2ae3623767af2165fef2d4b7d039">&#9670;&#160;</a></span>get_n_classes()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int svm_classifier::OneVsOneStrategy::get_n_classes </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get number of classes. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of classes </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a1740d877a4d634ec1763cb8646f5e172">svm_classifier::MulticlassStrategyBase</a>.</p>
<p class="definition">Definition at line <a class="el" href="multiclass__strategy_8hpp_source.html#l00201">201</a> of file <a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>.</p>
</div>
</div>
<a id="aae80b4e75459b2aca4f561d62c3c5675" name="aae80b4e75459b2aca4f561d62c3c5675"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aae80b4e75459b2aca4f561d62c3c5675">&#9670;&#160;</a></span>get_strategy_type()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">MulticlassStrategy svm_classifier::OneVsOneStrategy::get_strategy_type </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get strategy type. </p>
<dl class="section return"><dt>Returns</dt><dd>Multiclass strategy type </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a31a0501fa1a6db1d41cbf825b2348e47">svm_classifier::MulticlassStrategyBase</a>.</p>
<p class="definition">Definition at line <a class="el" href="multiclass__strategy_8hpp_source.html#l00203">203</a> of file <a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>.</p>
</div>
</div>
<a id="ab60df2d9b6069a73369b0bf9d3675662" name="ab60df2d9b6069a73369b0bf9d3675662"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab60df2d9b6069a73369b0bf9d3675662">&#9670;&#160;</a></span>predict()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; int &gt; svm_classifier::OneVsOneStrategy::predict </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;&#160;</td>
<td class="paramname"><em>converter</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Predict class labels. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">converter</td><td>Data converter instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Predicted class labels </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a70f94cfcf8b2bf6d60133c688fe55f9d">svm_classifier::MulticlassStrategyBase</a>.</p>
</div>
</div>
<a id="ae62e8b24115042d1119e76f3302f6992" name="ae62e8b24115042d1119e76f3302f6992"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae62e8b24115042d1119e76f3302f6992">&#9670;&#160;</a></span>predict_proba()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; std::vector&lt; double &gt; &gt; svm_classifier::OneVsOneStrategy::predict_proba </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;&#160;</td>
<td class="paramname"><em>converter</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Predict class probabilities. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">converter</td><td>Data converter instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Class probabilities for each sample </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ab5348ee3b83547702ec7903ee7ee2da7">svm_classifier::MulticlassStrategyBase</a>.</p>
</div>
</div>
<a id="a8875d29cb8666af10e0fb5634e08c0c1" name="a8875d29cb8666af10e0fb5634e08c0c1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8875d29cb8666af10e0fb5634e08c0c1">&#9670;&#160;</a></span>supports_probability()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool svm_classifier::OneVsOneStrategy::supports_probability </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if the model supports probability prediction. </p>
<dl class="section return"><dt>Returns</dt><dd>True if probabilities are supported </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a2ab91902f8d6eb216f626ce9ea4be992">svm_classifier::MulticlassStrategyBase</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>include/svm_classifier/<a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,5 @@
<map id="svm_classifier::OneVsOneStrategy" name="svm_classifier::OneVsOneStrategy">
<area shape="rect" id="Node000001" title="One&#45;vs&#45;One (OvO) multiclass strategy." alt="" coords="5,93,196,133"/>
<area shape="rect" id="Node000002" href="$classsvm__classifier_1_1MulticlassStrategyBase.html" title="Abstract base class for multiclass classification strategies." alt="" coords="6,5,195,45"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="103,59,103,93,98,93,98,59"/>
</map>

View File

@@ -0,0 +1 @@
7b2745aed1351f8dbfbc5d248f9ff666

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@@ -0,0 +1,5 @@
<map id="svm_classifier::OneVsOneStrategy" name="svm_classifier::OneVsOneStrategy">
<area shape="rect" id="Node000001" title="One&#45;vs&#45;One (OvO) multiclass strategy." alt="" coords="5,93,196,133"/>
<area shape="rect" id="Node000002" href="$classsvm__classifier_1_1MulticlassStrategyBase.html" title="Abstract base class for multiclass classification strategies." alt="" coords="6,5,195,45"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="103,59,103,93,98,93,98,59"/>
</map>

View File

@@ -0,0 +1 @@
7b2745aed1351f8dbfbc5d248f9ff666

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@@ -0,0 +1,102 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>svm_classifier</b></li><li class="navelem"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">OneVsRestStrategy</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">svm_classifier::OneVsRestStrategy Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">svm_classifier::OneVsRestStrategy</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">classes_</a></td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a966b79bc8b6fac0fa78feefc2dd8a878">decision_function</a>(const torch::Tensor &amp;X, DataConverter &amp;converter) override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">svm_classifier::OneVsRestStrategy</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#aae14da8c0effd04731b5a4a0181eb1b6">fit</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y, const KernelParameters &amp;params, DataConverter &amp;converter) override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">svm_classifier::OneVsRestStrategy</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a5e10800b16dbc66fd1c0d5e0a42871f0">get_classes</a>() const override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">svm_classifier::OneVsRestStrategy</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a53abe89ec25c33fd9c32d92ba08d01ed">get_n_classes</a>() const override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">svm_classifier::OneVsRestStrategy</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#af9e1bd6d08ce3e7afd5279c835ce6cfb">get_strategy_type</a>() const override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">svm_classifier::OneVsRestStrategy</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8e74cd580feaac0da34d204274a24fea">is_trained_</a></td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a30f146a564a9c9681524593cacbb43e7">OneVsRestStrategy</a>()</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">svm_classifier::OneVsRestStrategy</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a771903a821d5380ddd5d0b3a912e7df9">predict</a>(const torch::Tensor &amp;X, DataConverter &amp;converter) override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">svm_classifier::OneVsRestStrategy</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a55639e5adaadcd6414b50d5ebf0d1cd2">predict_proba</a>(const torch::Tensor &amp;X, DataConverter &amp;converter) override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">svm_classifier::OneVsRestStrategy</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a200300198628ac119eac09e62ff62336">supports_probability</a>() const override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">svm_classifier::OneVsRestStrategy</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8a5647dd57eed281288f0c9011b11395">~MulticlassStrategyBase</a>()=default</td><td class="entry"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#acfd698dd6cc0a988ac642a00d1f0b970">~OneVsRestStrategy</a>() override</td><td class="entry"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">svm_classifier::OneVsRestStrategy</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,505 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: svm_classifier::OneVsRestStrategy Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>svm_classifier</b></li><li class="navelem"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html">OneVsRestStrategy</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classsvm__classifier_1_1OneVsRestStrategy-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">svm_classifier::OneVsRestStrategy Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p>One-vs-Rest (OvR) multiclass strategy.
<a href="classsvm__classifier_1_1OneVsRestStrategy.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for svm_classifier::OneVsRestStrategy:</div>
<div class="dyncontent">
<div class="center"><img src="classsvm__classifier_1_1OneVsRestStrategy__inherit__graph.png" border="0" usemap="#asvm__classifier_1_1OneVsRestStrategy_inherit__map" alt="Inheritance graph"/></div>
<map name="asvm__classifier_1_1OneVsRestStrategy_inherit__map" id="asvm__classifier_1_1OneVsRestStrategy_inherit__map">
<area shape="rect" title="One&#45;vs&#45;Rest (OvR) multiclass strategy." alt="" coords="5,93,200,133"/>
<area shape="rect" href="classsvm__classifier_1_1MulticlassStrategyBase.html" title="Abstract base class for multiclass classification strategies." alt="" coords="8,5,197,45"/>
<area shape="poly" title=" " alt="" coords="105,59,105,93,100,93,100,59"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for svm_classifier::OneVsRestStrategy:</div>
<div class="dyncontent">
<div class="center"><img src="classsvm__classifier_1_1OneVsRestStrategy__coll__graph.png" border="0" usemap="#asvm__classifier_1_1OneVsRestStrategy_coll__map" alt="Collaboration graph"/></div>
<map name="asvm__classifier_1_1OneVsRestStrategy_coll__map" id="asvm__classifier_1_1OneVsRestStrategy_coll__map">
<area shape="rect" title="One&#45;vs&#45;Rest (OvR) multiclass strategy." alt="" coords="5,93,200,133"/>
<area shape="rect" href="classsvm__classifier_1_1MulticlassStrategyBase.html" title="Abstract base class for multiclass classification strategies." alt="" coords="8,5,197,45"/>
<area shape="poly" title=" " alt="" coords="105,59,105,93,100,93,100,59"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a30f146a564a9c9681524593cacbb43e7" id="r_a30f146a564a9c9681524593cacbb43e7"><td class="memItemLeft" align="right" valign="top"><a id="a30f146a564a9c9681524593cacbb43e7" name="a30f146a564a9c9681524593cacbb43e7"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>OneVsRestStrategy</b> ()</td></tr>
<tr class="memdesc:a30f146a564a9c9681524593cacbb43e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <br /></td></tr>
<tr class="separator:a30f146a564a9c9681524593cacbb43e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acfd698dd6cc0a988ac642a00d1f0b970" id="r_acfd698dd6cc0a988ac642a00d1f0b970"><td class="memItemLeft" align="right" valign="top"><a id="acfd698dd6cc0a988ac642a00d1f0b970" name="acfd698dd6cc0a988ac642a00d1f0b970"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>~OneVsRestStrategy</b> () override</td></tr>
<tr class="memdesc:acfd698dd6cc0a988ac642a00d1f0b970"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:acfd698dd6cc0a988ac642a00d1f0b970"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae14da8c0effd04731b5a4a0181eb1b6" id="r_aae14da8c0effd04731b5a4a0181eb1b6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#aae14da8c0effd04731b5a4a0181eb1b6">fit</a> (const torch::Tensor &amp;X, const torch::Tensor &amp;y, const KernelParameters &amp;params, <a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;converter) override</td></tr>
<tr class="memdesc:aae14da8c0effd04731b5a4a0181eb1b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Train the multiclass classifier. <br /></td></tr>
<tr class="separator:aae14da8c0effd04731b5a4a0181eb1b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a771903a821d5380ddd5d0b3a912e7df9" id="r_a771903a821d5380ddd5d0b3a912e7df9"><td class="memItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a771903a821d5380ddd5d0b3a912e7df9">predict</a> (const torch::Tensor &amp;X, <a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;converter) override</td></tr>
<tr class="memdesc:a771903a821d5380ddd5d0b3a912e7df9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict class labels. <br /></td></tr>
<tr class="separator:a771903a821d5380ddd5d0b3a912e7df9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a55639e5adaadcd6414b50d5ebf0d1cd2" id="r_a55639e5adaadcd6414b50d5ebf0d1cd2"><td class="memItemLeft" align="right" valign="top">std::vector&lt; std::vector&lt; double &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a55639e5adaadcd6414b50d5ebf0d1cd2">predict_proba</a> (const torch::Tensor &amp;X, <a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;converter) override</td></tr>
<tr class="memdesc:a55639e5adaadcd6414b50d5ebf0d1cd2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict class probabilities. <br /></td></tr>
<tr class="separator:a55639e5adaadcd6414b50d5ebf0d1cd2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a966b79bc8b6fac0fa78feefc2dd8a878" id="r_a966b79bc8b6fac0fa78feefc2dd8a878"><td class="memItemLeft" align="right" valign="top">std::vector&lt; std::vector&lt; double &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a966b79bc8b6fac0fa78feefc2dd8a878">decision_function</a> (const torch::Tensor &amp;X, <a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;converter) override</td></tr>
<tr class="memdesc:a966b79bc8b6fac0fa78feefc2dd8a878"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get decision function values. <br /></td></tr>
<tr class="separator:a966b79bc8b6fac0fa78feefc2dd8a878"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5e10800b16dbc66fd1c0d5e0a42871f0" id="r_a5e10800b16dbc66fd1c0d5e0a42871f0"><td class="memItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a5e10800b16dbc66fd1c0d5e0a42871f0">get_classes</a> () const override</td></tr>
<tr class="memdesc:a5e10800b16dbc66fd1c0d5e0a42871f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get unique class labels. <br /></td></tr>
<tr class="separator:a5e10800b16dbc66fd1c0d5e0a42871f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a200300198628ac119eac09e62ff62336" id="r_a200300198628ac119eac09e62ff62336"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a200300198628ac119eac09e62ff62336">supports_probability</a> () const override</td></tr>
<tr class="memdesc:a200300198628ac119eac09e62ff62336"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the model supports probability prediction. <br /></td></tr>
<tr class="separator:a200300198628ac119eac09e62ff62336"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a53abe89ec25c33fd9c32d92ba08d01ed" id="r_a53abe89ec25c33fd9c32d92ba08d01ed"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a53abe89ec25c33fd9c32d92ba08d01ed">get_n_classes</a> () const override</td></tr>
<tr class="memdesc:a53abe89ec25c33fd9c32d92ba08d01ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get number of classes. <br /></td></tr>
<tr class="separator:a53abe89ec25c33fd9c32d92ba08d01ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9e1bd6d08ce3e7afd5279c835ce6cfb" id="r_af9e1bd6d08ce3e7afd5279c835ce6cfb"><td class="memItemLeft" align="right" valign="top">MulticlassStrategy&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#af9e1bd6d08ce3e7afd5279c835ce6cfb">get_strategy_type</a> () const override</td></tr>
<tr class="memdesc:af9e1bd6d08ce3e7afd5279c835ce6cfb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get strategy type. <br /></td></tr>
<tr class="separator:af9e1bd6d08ce3e7afd5279c835ce6cfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classsvm__classifier_1_1MulticlassStrategyBase"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classsvm__classifier_1_1MulticlassStrategyBase')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td></tr>
<tr class="memitem:a8a5647dd57eed281288f0c9011b11395 inherit pub_methods_classsvm__classifier_1_1MulticlassStrategyBase" id="r_a8a5647dd57eed281288f0c9011b11395"><td class="memItemLeft" align="right" valign="top">
virtual&#160;</td><td class="memItemRight" valign="bottom"><b>~MulticlassStrategyBase</b> ()=default</td></tr>
<tr class="memdesc:a8a5647dd57eed281288f0c9011b11395 inherit pub_methods_classsvm__classifier_1_1MulticlassStrategyBase"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual destructor. <br /></td></tr>
<tr class="separator:a8a5647dd57eed281288f0c9011b11395 inherit pub_methods_classsvm__classifier_1_1MulticlassStrategyBase"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="inherited" name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></td></tr>
<tr class="memitem:a15bb6eb53e91e604b259b3050bd40e27 inherit pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase" id="r_a15bb6eb53e91e604b259b3050bd40e27"><td class="memItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">classes_</a></td></tr>
<tr class="memdesc:a15bb6eb53e91e604b259b3050bd40e27 inherit pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unique class labels. <br /></td></tr>
<tr class="separator:a15bb6eb53e91e604b259b3050bd40e27 inherit pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e74cd580feaac0da34d204274a24fea inherit pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase" id="r_a8e74cd580feaac0da34d204274a24fea"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8e74cd580feaac0da34d204274a24fea">is_trained_</a> = false</td></tr>
<tr class="memdesc:a8e74cd580feaac0da34d204274a24fea inherit pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether the model is trained. <br /></td></tr>
<tr class="separator:a8e74cd580feaac0da34d204274a24fea inherit pro_attribs_classsvm__classifier_1_1MulticlassStrategyBase"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>One-vs-Rest (OvR) multiclass strategy. </p>
<p class="definition">Definition at line <a class="el" href="multiclass__strategy_8hpp_source.html#l00099">99</a> of file <a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a966b79bc8b6fac0fa78feefc2dd8a878" name="a966b79bc8b6fac0fa78feefc2dd8a878"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a966b79bc8b6fac0fa78feefc2dd8a878">&#9670;&#160;</a></span>decision_function()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; std::vector&lt; double &gt; &gt; svm_classifier::OneVsRestStrategy::decision_function </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;&#160;</td>
<td class="paramname"><em>converter</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get decision function values. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">converter</td><td>Data converter instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Decision function values </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ad1c4eb746cb1fdd67cf436ff85a9b0f0">svm_classifier::MulticlassStrategyBase</a>.</p>
</div>
</div>
<a id="aae14da8c0effd04731b5a4a0181eb1b6" name="aae14da8c0effd04731b5a4a0181eb1b6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aae14da8c0effd04731b5a4a0181eb1b6">&#9670;&#160;</a></span>fit()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a> svm_classifier::OneVsRestStrategy::fit </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const KernelParameters &amp;&#160;</td>
<td class="paramname"><em>params</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;&#160;</td>
<td class="paramname"><em>converter</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Train the multiclass classifier. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">y</td><td>Target tensor of shape (n_samples,) </td></tr>
<tr><td class="paramname">params</td><td>Kernel parameters </td></tr>
<tr><td class="paramname">converter</td><td>Data converter instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Training metrics </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a548af7201b7970abee0c31e7ec07d896">svm_classifier::MulticlassStrategyBase</a>.</p>
</div>
</div>
<a id="a5e10800b16dbc66fd1c0d5e0a42871f0" name="a5e10800b16dbc66fd1c0d5e0a42871f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5e10800b16dbc66fd1c0d5e0a42871f0">&#9670;&#160;</a></span>get_classes()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; int &gt; svm_classifier::OneVsRestStrategy::get_classes </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get unique class labels. </p>
<dl class="section return"><dt>Returns</dt><dd>Vector of unique class labels </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a379c4000227cc46410bfbecce6e80c33">svm_classifier::MulticlassStrategyBase</a>.</p>
<p class="definition">Definition at line <a class="el" href="multiclass__strategy_8hpp_source.html#l00125">125</a> of file <a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>.</p>
</div>
</div>
<a id="a53abe89ec25c33fd9c32d92ba08d01ed" name="a53abe89ec25c33fd9c32d92ba08d01ed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a53abe89ec25c33fd9c32d92ba08d01ed">&#9670;&#160;</a></span>get_n_classes()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int svm_classifier::OneVsRestStrategy::get_n_classes </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get number of classes. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of classes </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a1740d877a4d634ec1763cb8646f5e172">svm_classifier::MulticlassStrategyBase</a>.</p>
<p class="definition">Definition at line <a class="el" href="multiclass__strategy_8hpp_source.html#l00129">129</a> of file <a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>.</p>
</div>
</div>
<a id="af9e1bd6d08ce3e7afd5279c835ce6cfb" name="af9e1bd6d08ce3e7afd5279c835ce6cfb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af9e1bd6d08ce3e7afd5279c835ce6cfb">&#9670;&#160;</a></span>get_strategy_type()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">MulticlassStrategy svm_classifier::OneVsRestStrategy::get_strategy_type </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get strategy type. </p>
<dl class="section return"><dt>Returns</dt><dd>Multiclass strategy type </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a31a0501fa1a6db1d41cbf825b2348e47">svm_classifier::MulticlassStrategyBase</a>.</p>
<p class="definition">Definition at line <a class="el" href="multiclass__strategy_8hpp_source.html#l00131">131</a> of file <a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a>.</p>
</div>
</div>
<a id="a771903a821d5380ddd5d0b3a912e7df9" name="a771903a821d5380ddd5d0b3a912e7df9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a771903a821d5380ddd5d0b3a912e7df9">&#9670;&#160;</a></span>predict()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; int &gt; svm_classifier::OneVsRestStrategy::predict </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;&#160;</td>
<td class="paramname"><em>converter</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Predict class labels. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">converter</td><td>Data converter instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Predicted class labels </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a70f94cfcf8b2bf6d60133c688fe55f9d">svm_classifier::MulticlassStrategyBase</a>.</p>
</div>
</div>
<a id="a55639e5adaadcd6414b50d5ebf0d1cd2" name="a55639e5adaadcd6414b50d5ebf0d1cd2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a55639e5adaadcd6414b50d5ebf0d1cd2">&#9670;&#160;</a></span>predict_proba()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; std::vector&lt; double &gt; &gt; svm_classifier::OneVsRestStrategy::predict_proba </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> &amp;&#160;</td>
<td class="paramname"><em>converter</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Predict class probabilities. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">converter</td><td>Data converter instance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Class probabilities for each sample </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ab5348ee3b83547702ec7903ee7ee2da7">svm_classifier::MulticlassStrategyBase</a>.</p>
</div>
</div>
<a id="a200300198628ac119eac09e62ff62336" name="a200300198628ac119eac09e62ff62336"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a200300198628ac119eac09e62ff62336">&#9670;&#160;</a></span>supports_probability()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool svm_classifier::OneVsRestStrategy::supports_probability </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if the model supports probability prediction. </p>
<dl class="section return"><dt>Returns</dt><dd>True if probabilities are supported </dd></dl>
<p>Implements <a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a2ab91902f8d6eb216f626ce9ea4be992">svm_classifier::MulticlassStrategyBase</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>include/svm_classifier/<a class="el" href="multiclass__strategy_8hpp_source.html">multiclass_strategy.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,5 @@
<map id="svm_classifier::OneVsRestStrategy" name="svm_classifier::OneVsRestStrategy">
<area shape="rect" id="Node000001" title="One&#45;vs&#45;Rest (OvR) multiclass strategy." alt="" coords="5,93,200,133"/>
<area shape="rect" id="Node000002" href="$classsvm__classifier_1_1MulticlassStrategyBase.html" title="Abstract base class for multiclass classification strategies." alt="" coords="8,5,197,45"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="105,59,105,93,100,93,100,59"/>
</map>

View File

@@ -0,0 +1 @@
77f554e6e02c3b0e2a64fa96a85301d2

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@@ -0,0 +1,5 @@
<map id="svm_classifier::OneVsRestStrategy" name="svm_classifier::OneVsRestStrategy">
<area shape="rect" id="Node000001" title="One&#45;vs&#45;Rest (OvR) multiclass strategy." alt="" coords="5,93,200,133"/>
<area shape="rect" id="Node000002" href="$classsvm__classifier_1_1MulticlassStrategyBase.html" title="Abstract base class for multiclass classification strategies." alt="" coords="8,5,197,45"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="105,59,105,93,100,93,100,59"/>
</map>

View File

@@ -0,0 +1 @@
77f554e6e02c3b0e2a64fa96a85301d2

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@@ -0,0 +1,120 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>svm_classifier</b></li><li class="navelem"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">svm_classifier::SVMClassifier Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a4c91072ea0d3d9b97ba458ff7d0898b8">cross_validate</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y, int cv=5)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ad153c0537998eae5fbca5fd0b5ead2b7">decision_function</a>(const torch::Tensor &amp;X)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a38a9b020b9f4f9254920c97a3a047e9b">evaluate</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y_true)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a7e6648c4d2bac92bb00381076ea92db3">fit</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#af0fea42cdfc9416ed854b0d4aefa82b9">get_classes</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a2ade33562381e34cbe4b04089545a715">get_feature_importance</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a55338ab396bd5da923b6acbef8ed783a">get_kernel_type</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a14c2f7917c8a91154c09160288509f2c">get_multiclass_strategy</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a75d501339e2e2273082b0838e9caadcd">get_n_classes</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a780afcb2ad618e46541aff8a44e9c7b4">get_n_features</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a7c39ec09b15186dcb4f04ae7171d23bb">get_parameters</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a38173e5cf0f6a4620f032fd54c28d592">get_svm_library</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a0b8c77f81d84489b2da0d080773a2970">get_training_metrics</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#afed66a704dfb38cc7d080d3337d10194">grid_search</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y, const nlohmann::json &amp;param_grid, int cv=5)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a71a85ab7893e7e2b40763db34096d8bb">is_fitted</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a583f5743acf5e6b850e079b9190989f1">load_model</a>(const std::string &amp;filename)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a209902805c75e8f22c55575adfedc7be">operator=</a>(const SVMClassifier &amp;)=delete</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a49b6a4a5ae8a8e0eaf24221482be3d6a">operator=</a>(SVMClassifier &amp;&amp;) noexcept</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a5c998d5574b3b6afe003b23ed02ed1d1">predict</a>(const torch::Tensor &amp;X)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ab4ef3c839e085ece646cdd2501a51f67">predict_proba</a>(const torch::Tensor &amp;X)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#aa2bd5715c9e54e3fb465a9bcbf2e9c8a">reset</a>()</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ab8a0bd35705825e80a7567b576d47359">save_model</a>(const std::string &amp;filename) const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a0479c57489c14be4a5ca79368086f7f6">score</a>(const torch::Tensor &amp;X, const torch::Tensor &amp;y_true)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#adb01e761fea07c709f3a0e315d3d0e06">set_parameters</a>(const nlohmann::json &amp;config)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a3f8b4e932f075b267507ad77a499a135">supports_probability</a>() const</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a3ed45cdbc3fc5d947320177f42115dcf">SVMClassifier</a>()</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a2afb41f77de4e8de6368d274a30191ec">SVMClassifier</a>(const nlohmann::json &amp;config)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a90b2f18dd2cfeb23cf1375f265e22db0">SVMClassifier</a>(KernelType kernel, double C=1.0, MulticlassStrategy multiclass_strategy=MulticlassStrategy::ONE_VS_REST)</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a377b6082ac4153be3197ef70c1c82984">SVMClassifier</a>(const SVMClassifier &amp;)=delete</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ae2eafdc66d1907c145efffd186dfff3f">SVMClassifier</a>(SVMClassifier &amp;&amp;) noexcept</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a233584f6696969ce1a402624fd046146">~SVMClassifier</a>()</td><td class="entry"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,991 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: svm_classifier::SVMClassifier Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>svm_classifier</b></li><li class="navelem"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classsvm__classifier_1_1SVMClassifier-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">svm_classifier::SVMClassifier Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Support Vector Machine Classifier with scikit-learn compatible API.
<a href="classsvm__classifier_1_1SVMClassifier.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="svm__classifier_8hpp_source.html">svm_classifier.hpp</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a3ed45cdbc3fc5d947320177f42115dcf" id="r_a3ed45cdbc3fc5d947320177f42115dcf"><td class="memItemLeft" align="right" valign="top"><a id="a3ed45cdbc3fc5d947320177f42115dcf" name="a3ed45cdbc3fc5d947320177f42115dcf"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>SVMClassifier</b> ()</td></tr>
<tr class="memdesc:a3ed45cdbc3fc5d947320177f42115dcf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor with default parameters. <br /></td></tr>
<tr class="separator:a3ed45cdbc3fc5d947320177f42115dcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2afb41f77de4e8de6368d274a30191ec" id="r_a2afb41f77de4e8de6368d274a30191ec"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a2afb41f77de4e8de6368d274a30191ec">SVMClassifier</a> (const nlohmann::json &amp;config)</td></tr>
<tr class="memdesc:a2afb41f77de4e8de6368d274a30191ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor with JSON parameters. <br /></td></tr>
<tr class="separator:a2afb41f77de4e8de6368d274a30191ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90b2f18dd2cfeb23cf1375f265e22db0" id="r_a90b2f18dd2cfeb23cf1375f265e22db0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a90b2f18dd2cfeb23cf1375f265e22db0">SVMClassifier</a> (KernelType kernel, double C=1.0, MulticlassStrategy multiclass_strategy=MulticlassStrategy::ONE_VS_REST)</td></tr>
<tr class="memdesc:a90b2f18dd2cfeb23cf1375f265e22db0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor with explicit parameters. <br /></td></tr>
<tr class="separator:a90b2f18dd2cfeb23cf1375f265e22db0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a233584f6696969ce1a402624fd046146" id="r_a233584f6696969ce1a402624fd046146"><td class="memItemLeft" align="right" valign="top"><a id="a233584f6696969ce1a402624fd046146" name="a233584f6696969ce1a402624fd046146"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>~SVMClassifier</b> ()</td></tr>
<tr class="memdesc:a233584f6696969ce1a402624fd046146"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:a233584f6696969ce1a402624fd046146"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a377b6082ac4153be3197ef70c1c82984" id="r_a377b6082ac4153be3197ef70c1c82984"><td class="memItemLeft" align="right" valign="top"><a id="a377b6082ac4153be3197ef70c1c82984" name="a377b6082ac4153be3197ef70c1c82984"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>SVMClassifier</b> (const <a class="el" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> &amp;)=delete</td></tr>
<tr class="memdesc:a377b6082ac4153be3197ef70c1c82984"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor (deleted - models are not copyable) <br /></td></tr>
<tr class="separator:a377b6082ac4153be3197ef70c1c82984"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a209902805c75e8f22c55575adfedc7be" id="r_a209902805c75e8f22c55575adfedc7be"><td class="memItemLeft" align="right" valign="top"><a id="a209902805c75e8f22c55575adfedc7be" name="a209902805c75e8f22c55575adfedc7be"></a>
<a class="el" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> &amp;)=delete</td></tr>
<tr class="memdesc:a209902805c75e8f22c55575adfedc7be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy assignment (deleted - models are not copyable) <br /></td></tr>
<tr class="separator:a209902805c75e8f22c55575adfedc7be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae2eafdc66d1907c145efffd186dfff3f" id="r_ae2eafdc66d1907c145efffd186dfff3f"><td class="memItemLeft" align="right" valign="top"><a id="ae2eafdc66d1907c145efffd186dfff3f" name="ae2eafdc66d1907c145efffd186dfff3f"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>SVMClassifier</b> (<a class="el" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> &amp;&amp;) noexcept</td></tr>
<tr class="memdesc:ae2eafdc66d1907c145efffd186dfff3f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Move constructor. <br /></td></tr>
<tr class="separator:ae2eafdc66d1907c145efffd186dfff3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49b6a4a5ae8a8e0eaf24221482be3d6a" id="r_a49b6a4a5ae8a8e0eaf24221482be3d6a"><td class="memItemLeft" align="right" valign="top"><a id="a49b6a4a5ae8a8e0eaf24221482be3d6a" name="a49b6a4a5ae8a8e0eaf24221482be3d6a"></a>
<a class="el" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> &amp;&amp;) noexcept</td></tr>
<tr class="memdesc:a49b6a4a5ae8a8e0eaf24221482be3d6a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Move assignment. <br /></td></tr>
<tr class="separator:a49b6a4a5ae8a8e0eaf24221482be3d6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7e6648c4d2bac92bb00381076ea92db3" id="r_a7e6648c4d2bac92bb00381076ea92db3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a7e6648c4d2bac92bb00381076ea92db3">fit</a> (const torch::Tensor &amp;X, const torch::Tensor &amp;y)</td></tr>
<tr class="memdesc:a7e6648c4d2bac92bb00381076ea92db3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Train the SVM classifier. <br /></td></tr>
<tr class="separator:a7e6648c4d2bac92bb00381076ea92db3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5c998d5574b3b6afe003b23ed02ed1d1" id="r_a5c998d5574b3b6afe003b23ed02ed1d1"><td class="memItemLeft" align="right" valign="top">torch::Tensor&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a5c998d5574b3b6afe003b23ed02ed1d1">predict</a> (const torch::Tensor &amp;X)</td></tr>
<tr class="memdesc:a5c998d5574b3b6afe003b23ed02ed1d1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict class labels for samples. <br /></td></tr>
<tr class="separator:a5c998d5574b3b6afe003b23ed02ed1d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab4ef3c839e085ece646cdd2501a51f67" id="r_ab4ef3c839e085ece646cdd2501a51f67"><td class="memItemLeft" align="right" valign="top">torch::Tensor&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ab4ef3c839e085ece646cdd2501a51f67">predict_proba</a> (const torch::Tensor &amp;X)</td></tr>
<tr class="memdesc:ab4ef3c839e085ece646cdd2501a51f67"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predict class probabilities for samples. <br /></td></tr>
<tr class="separator:ab4ef3c839e085ece646cdd2501a51f67"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad153c0537998eae5fbca5fd0b5ead2b7" id="r_ad153c0537998eae5fbca5fd0b5ead2b7"><td class="memItemLeft" align="right" valign="top">torch::Tensor&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ad153c0537998eae5fbca5fd0b5ead2b7">decision_function</a> (const torch::Tensor &amp;X)</td></tr>
<tr class="memdesc:ad153c0537998eae5fbca5fd0b5ead2b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get decision function values. <br /></td></tr>
<tr class="separator:ad153c0537998eae5fbca5fd0b5ead2b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0479c57489c14be4a5ca79368086f7f6" id="r_a0479c57489c14be4a5ca79368086f7f6"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a0479c57489c14be4a5ca79368086f7f6">score</a> (const torch::Tensor &amp;X, const torch::Tensor &amp;y_true)</td></tr>
<tr class="memdesc:a0479c57489c14be4a5ca79368086f7f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate accuracy score on test data. <br /></td></tr>
<tr class="separator:a0479c57489c14be4a5ca79368086f7f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a38a9b020b9f4f9254920c97a3a047e9b" id="r_a38a9b020b9f4f9254920c97a3a047e9b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html">EvaluationMetrics</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a38a9b020b9f4f9254920c97a3a047e9b">evaluate</a> (const torch::Tensor &amp;X, const torch::Tensor &amp;y_true)</td></tr>
<tr class="memdesc:a38a9b020b9f4f9254920c97a3a047e9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate detailed evaluation metrics. <br /></td></tr>
<tr class="separator:a38a9b020b9f4f9254920c97a3a047e9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adb01e761fea07c709f3a0e315d3d0e06" id="r_adb01e761fea07c709f3a0e315d3d0e06"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#adb01e761fea07c709f3a0e315d3d0e06">set_parameters</a> (const nlohmann::json &amp;config)</td></tr>
<tr class="memdesc:adb01e761fea07c709f3a0e315d3d0e06"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set parameters from JSON configuration. <br /></td></tr>
<tr class="separator:adb01e761fea07c709f3a0e315d3d0e06"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7c39ec09b15186dcb4f04ae7171d23bb" id="r_a7c39ec09b15186dcb4f04ae7171d23bb"><td class="memItemLeft" align="right" valign="top">nlohmann::json&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a7c39ec09b15186dcb4f04ae7171d23bb">get_parameters</a> () const</td></tr>
<tr class="memdesc:a7c39ec09b15186dcb4f04ae7171d23bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get current parameters as JSON. <br /></td></tr>
<tr class="separator:a7c39ec09b15186dcb4f04ae7171d23bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a71a85ab7893e7e2b40763db34096d8bb" id="r_a71a85ab7893e7e2b40763db34096d8bb"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a71a85ab7893e7e2b40763db34096d8bb">is_fitted</a> () const</td></tr>
<tr class="memdesc:a71a85ab7893e7e2b40763db34096d8bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the model is fitted/trained. <br /></td></tr>
<tr class="separator:a71a85ab7893e7e2b40763db34096d8bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75d501339e2e2273082b0838e9caadcd" id="r_a75d501339e2e2273082b0838e9caadcd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a75d501339e2e2273082b0838e9caadcd">get_n_classes</a> () const</td></tr>
<tr class="memdesc:a75d501339e2e2273082b0838e9caadcd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the number of classes. <br /></td></tr>
<tr class="separator:a75d501339e2e2273082b0838e9caadcd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0fea42cdfc9416ed854b0d4aefa82b9" id="r_af0fea42cdfc9416ed854b0d4aefa82b9"><td class="memItemLeft" align="right" valign="top">std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#af0fea42cdfc9416ed854b0d4aefa82b9">get_classes</a> () const</td></tr>
<tr class="memdesc:af0fea42cdfc9416ed854b0d4aefa82b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get unique class labels. <br /></td></tr>
<tr class="separator:af0fea42cdfc9416ed854b0d4aefa82b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a780afcb2ad618e46541aff8a44e9c7b4" id="r_a780afcb2ad618e46541aff8a44e9c7b4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a780afcb2ad618e46541aff8a44e9c7b4">get_n_features</a> () const</td></tr>
<tr class="memdesc:a780afcb2ad618e46541aff8a44e9c7b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the number of features. <br /></td></tr>
<tr class="separator:a780afcb2ad618e46541aff8a44e9c7b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b8c77f81d84489b2da0d080773a2970" id="r_a0b8c77f81d84489b2da0d080773a2970"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a0b8c77f81d84489b2da0d080773a2970">get_training_metrics</a> () const</td></tr>
<tr class="memdesc:a0b8c77f81d84489b2da0d080773a2970"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get training metrics from last fit. <br /></td></tr>
<tr class="separator:a0b8c77f81d84489b2da0d080773a2970"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f8b4e932f075b267507ad77a499a135" id="r_a3f8b4e932f075b267507ad77a499a135"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a3f8b4e932f075b267507ad77a499a135">supports_probability</a> () const</td></tr>
<tr class="memdesc:a3f8b4e932f075b267507ad77a499a135"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the current model supports probability prediction. <br /></td></tr>
<tr class="separator:a3f8b4e932f075b267507ad77a499a135"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab8a0bd35705825e80a7567b576d47359" id="r_ab8a0bd35705825e80a7567b576d47359"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ab8a0bd35705825e80a7567b576d47359">save_model</a> (const std::string &amp;filename) const</td></tr>
<tr class="memdesc:ab8a0bd35705825e80a7567b576d47359"><td class="mdescLeft">&#160;</td><td class="mdescRight">Save model to file. <br /></td></tr>
<tr class="separator:ab8a0bd35705825e80a7567b576d47359"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a583f5743acf5e6b850e079b9190989f1" id="r_a583f5743acf5e6b850e079b9190989f1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a583f5743acf5e6b850e079b9190989f1">load_model</a> (const std::string &amp;filename)</td></tr>
<tr class="memdesc:a583f5743acf5e6b850e079b9190989f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load model from file. <br /></td></tr>
<tr class="separator:a583f5743acf5e6b850e079b9190989f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a55338ab396bd5da923b6acbef8ed783a" id="r_a55338ab396bd5da923b6acbef8ed783a"><td class="memItemLeft" align="right" valign="top">KernelType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a55338ab396bd5da923b6acbef8ed783a">get_kernel_type</a> () const</td></tr>
<tr class="memdesc:a55338ab396bd5da923b6acbef8ed783a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get kernel type. <br /></td></tr>
<tr class="separator:a55338ab396bd5da923b6acbef8ed783a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14c2f7917c8a91154c09160288509f2c" id="r_a14c2f7917c8a91154c09160288509f2c"><td class="memItemLeft" align="right" valign="top">MulticlassStrategy&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a14c2f7917c8a91154c09160288509f2c">get_multiclass_strategy</a> () const</td></tr>
<tr class="memdesc:a14c2f7917c8a91154c09160288509f2c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get multiclass strategy. <br /></td></tr>
<tr class="separator:a14c2f7917c8a91154c09160288509f2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a38173e5cf0f6a4620f032fd54c28d592" id="r_a38173e5cf0f6a4620f032fd54c28d592"><td class="memItemLeft" align="right" valign="top">SVMLibrary&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a38173e5cf0f6a4620f032fd54c28d592">get_svm_library</a> () const</td></tr>
<tr class="memdesc:a38173e5cf0f6a4620f032fd54c28d592"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get SVM library being used. <br /></td></tr>
<tr class="separator:a38173e5cf0f6a4620f032fd54c28d592"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c91072ea0d3d9b97ba458ff7d0898b8" id="r_a4c91072ea0d3d9b97ba458ff7d0898b8"><td class="memItemLeft" align="right" valign="top">std::vector&lt; double &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a4c91072ea0d3d9b97ba458ff7d0898b8">cross_validate</a> (const torch::Tensor &amp;X, const torch::Tensor &amp;y, int cv=5)</td></tr>
<tr class="memdesc:a4c91072ea0d3d9b97ba458ff7d0898b8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform cross-validation. <br /></td></tr>
<tr class="separator:a4c91072ea0d3d9b97ba458ff7d0898b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afed66a704dfb38cc7d080d3337d10194" id="r_afed66a704dfb38cc7d080d3337d10194"><td class="memItemLeft" align="right" valign="top">nlohmann::json&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#afed66a704dfb38cc7d080d3337d10194">grid_search</a> (const torch::Tensor &amp;X, const torch::Tensor &amp;y, const nlohmann::json &amp;param_grid, int cv=5)</td></tr>
<tr class="memdesc:afed66a704dfb38cc7d080d3337d10194"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find optimal hyperparameters using grid search. <br /></td></tr>
<tr class="separator:afed66a704dfb38cc7d080d3337d10194"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ade33562381e34cbe4b04089545a715" id="r_a2ade33562381e34cbe4b04089545a715"><td class="memItemLeft" align="right" valign="top">torch::Tensor&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a2ade33562381e34cbe4b04089545a715">get_feature_importance</a> () const</td></tr>
<tr class="memdesc:a2ade33562381e34cbe4b04089545a715"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get feature importance (for linear kernels only) <br /></td></tr>
<tr class="separator:a2ade33562381e34cbe4b04089545a715"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa2bd5715c9e54e3fb465a9bcbf2e9c8a" id="r_aa2bd5715c9e54e3fb465a9bcbf2e9c8a"><td class="memItemLeft" align="right" valign="top"><a id="aa2bd5715c9e54e3fb465a9bcbf2e9c8a" name="aa2bd5715c9e54e3fb465a9bcbf2e9c8a"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>reset</b> ()</td></tr>
<tr class="memdesc:aa2bd5715c9e54e3fb465a9bcbf2e9c8a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset the classifier (clear trained model) <br /></td></tr>
<tr class="separator:aa2bd5715c9e54e3fb465a9bcbf2e9c8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Support Vector Machine Classifier with scikit-learn compatible API. </p>
<p>This class provides a unified interface for SVM classification using both liblinear (for linear kernels) and libsvm (for non-linear kernels). It supports multiclass classification through One-vs-Rest and One-vs-One strategies. </p>
<p class="definition">Definition at line <a class="el" href="svm__classifier_8hpp_source.html#l00021">21</a> of file <a class="el" href="svm__classifier_8hpp_source.html">svm_classifier.hpp</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a2afb41f77de4e8de6368d274a30191ec" name="a2afb41f77de4e8de6368d274a30191ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2afb41f77de4e8de6368d274a30191ec">&#9670;&#160;</a></span>SVMClassifier() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">svm_classifier::SVMClassifier::SVMClassifier </td>
<td>(</td>
<td class="paramtype">const nlohmann::json &amp;&#160;</td>
<td class="paramname"><em>config</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Constructor with JSON parameters. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">config</td><td>JSON configuration object </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a90b2f18dd2cfeb23cf1375f265e22db0" name="a90b2f18dd2cfeb23cf1375f265e22db0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a90b2f18dd2cfeb23cf1375f265e22db0">&#9670;&#160;</a></span>SVMClassifier() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">svm_classifier::SVMClassifier::SVMClassifier </td>
<td>(</td>
<td class="paramtype">KernelType&#160;</td>
<td class="paramname"><em>kernel</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>C</em> = <code>1.0</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">MulticlassStrategy&#160;</td>
<td class="paramname"><em>multiclass_strategy</em> = <code>MulticlassStrategy::ONE_VS_REST</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Constructor with explicit parameters. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">kernel</td><td>Kernel type </td></tr>
<tr><td class="paramname">C</td><td>Regularization parameter </td></tr>
<tr><td class="paramname">multiclass_strategy</td><td>Multiclass strategy </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a4c91072ea0d3d9b97ba458ff7d0898b8" name="a4c91072ea0d3d9b97ba458ff7d0898b8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4c91072ea0d3d9b97ba458ff7d0898b8">&#9670;&#160;</a></span>cross_validate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; double &gt; svm_classifier::SVMClassifier::cross_validate </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>cv</em> = <code>5</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Perform cross-validation. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor </td></tr>
<tr><td class="paramname">y</td><td>Target tensor </td></tr>
<tr><td class="paramname">cv</td><td>Number of folds (default: 5) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Cross-validation scores for each fold </dd></dl>
</div>
</div>
<a id="ad153c0537998eae5fbca5fd0b5ead2b7" name="ad153c0537998eae5fbca5fd0b5ead2b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad153c0537998eae5fbca5fd0b5ead2b7">&#9670;&#160;</a></span>decision_function()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">torch::Tensor svm_classifier::SVMClassifier::decision_function </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get decision function values. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Tensor with decision function values </dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>if model is not fitted </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a38a9b020b9f4f9254920c97a3a047e9b" name="a38a9b020b9f4f9254920c97a3a047e9b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a38a9b020b9f4f9254920c97a3a047e9b">&#9670;&#160;</a></span>evaluate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html">EvaluationMetrics</a> svm_classifier::SVMClassifier::evaluate </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>y_true</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Calculate detailed evaluation metrics. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">y_true</td><td>True labels tensor of shape (n_samples,) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Evaluation metrics including precision, recall, F1-score </dd></dl>
</div>
</div>
<a id="a7e6648c4d2bac92bb00381076ea92db3" name="a7e6648c4d2bac92bb00381076ea92db3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7e6648c4d2bac92bb00381076ea92db3">&#9670;&#160;</a></span>fit()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a> svm_classifier::SVMClassifier::fit </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>y</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Train the SVM classifier. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">y</td><td>Target tensor of shape (n_samples,) with class labels </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Training metrics </dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::invalid_argument</td><td>if input data is invalid </td></tr>
<tr><td class="paramname">std::runtime_error</td><td>if training fails </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="af0fea42cdfc9416ed854b0d4aefa82b9" name="af0fea42cdfc9416ed854b0d4aefa82b9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af0fea42cdfc9416ed854b0d4aefa82b9">&#9670;&#160;</a></span>get_classes()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt; int &gt; svm_classifier::SVMClassifier::get_classes </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get unique class labels. </p>
<dl class="section return"><dt>Returns</dt><dd>Vector of unique class labels </dd></dl>
</div>
</div>
<a id="a2ade33562381e34cbe4b04089545a715" name="a2ade33562381e34cbe4b04089545a715"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2ade33562381e34cbe4b04089545a715">&#9670;&#160;</a></span>get_feature_importance()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">torch::Tensor svm_classifier::SVMClassifier::get_feature_importance </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get feature importance (for linear kernels only) </p>
<dl class="section return"><dt>Returns</dt><dd>Tensor with feature weights/importance </dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>if not supported for current kernel </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a55338ab396bd5da923b6acbef8ed783a" name="a55338ab396bd5da923b6acbef8ed783a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a55338ab396bd5da923b6acbef8ed783a">&#9670;&#160;</a></span>get_kernel_type()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">KernelType svm_classifier::SVMClassifier::get_kernel_type </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get kernel type. </p>
<dl class="section return"><dt>Returns</dt><dd>Current kernel type </dd></dl>
<p class="definition">Definition at line <a class="el" href="svm__classifier_8hpp_source.html#l00187">187</a> of file <a class="el" href="svm__classifier_8hpp_source.html">svm_classifier.hpp</a>.</p>
</div>
</div>
<a id="a14c2f7917c8a91154c09160288509f2c" name="a14c2f7917c8a91154c09160288509f2c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14c2f7917c8a91154c09160288509f2c">&#9670;&#160;</a></span>get_multiclass_strategy()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">MulticlassStrategy svm_classifier::SVMClassifier::get_multiclass_strategy </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get multiclass strategy. </p>
<dl class="section return"><dt>Returns</dt><dd>Current multiclass strategy </dd></dl>
<p class="definition">Definition at line <a class="el" href="svm__classifier_8hpp_source.html#l00193">193</a> of file <a class="el" href="svm__classifier_8hpp_source.html">svm_classifier.hpp</a>.</p>
</div>
</div>
<a id="a75d501339e2e2273082b0838e9caadcd" name="a75d501339e2e2273082b0838e9caadcd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a75d501339e2e2273082b0838e9caadcd">&#9670;&#160;</a></span>get_n_classes()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int svm_classifier::SVMClassifier::get_n_classes </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the number of classes. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of classes (0 if not fitted) </dd></dl>
</div>
</div>
<a id="a780afcb2ad618e46541aff8a44e9c7b4" name="a780afcb2ad618e46541aff8a44e9c7b4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a780afcb2ad618e46541aff8a44e9c7b4">&#9670;&#160;</a></span>get_n_features()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int svm_classifier::SVMClassifier::get_n_features </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the number of features. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of features (0 if not fitted) </dd></dl>
<p class="definition">Definition at line <a class="el" href="svm__classifier_8hpp_source.html#l00155">155</a> of file <a class="el" href="svm__classifier_8hpp_source.html">svm_classifier.hpp</a>.</p>
</div>
</div>
<a id="a7c39ec09b15186dcb4f04ae7171d23bb" name="a7c39ec09b15186dcb4f04ae7171d23bb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7c39ec09b15186dcb4f04ae7171d23bb">&#9670;&#160;</a></span>get_parameters()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">nlohmann::json svm_classifier::SVMClassifier::get_parameters </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get current parameters as JSON. </p>
<dl class="section return"><dt>Returns</dt><dd>JSON object with current parameters </dd></dl>
</div>
</div>
<a id="a38173e5cf0f6a4620f032fd54c28d592" name="a38173e5cf0f6a4620f032fd54c28d592"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a38173e5cf0f6a4620f032fd54c28d592">&#9670;&#160;</a></span>get_svm_library()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">SVMLibrary svm_classifier::SVMClassifier::get_svm_library </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get SVM library being used. </p>
<dl class="section return"><dt>Returns</dt><dd>SVM library type </dd></dl>
<p class="definition">Definition at line <a class="el" href="svm__classifier_8hpp_source.html#l00199">199</a> of file <a class="el" href="svm__classifier_8hpp_source.html">svm_classifier.hpp</a>.</p>
</div>
</div>
<a id="a0b8c77f81d84489b2da0d080773a2970" name="a0b8c77f81d84489b2da0d080773a2970"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0b8c77f81d84489b2da0d080773a2970">&#9670;&#160;</a></span>get_training_metrics()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a> svm_classifier::SVMClassifier::get_training_metrics </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get training metrics from last fit. </p>
<dl class="section return"><dt>Returns</dt><dd>Training metrics </dd></dl>
<p class="definition">Definition at line <a class="el" href="svm__classifier_8hpp_source.html#l00161">161</a> of file <a class="el" href="svm__classifier_8hpp_source.html">svm_classifier.hpp</a>.</p>
</div>
</div>
<a id="afed66a704dfb38cc7d080d3337d10194" name="afed66a704dfb38cc7d080d3337d10194"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afed66a704dfb38cc7d080d3337d10194">&#9670;&#160;</a></span>grid_search()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">nlohmann::json svm_classifier::SVMClassifier::grid_search </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const nlohmann::json &amp;&#160;</td>
<td class="paramname"><em>param_grid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>cv</em> = <code>5</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Find optimal hyperparameters using grid search. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor </td></tr>
<tr><td class="paramname">y</td><td>Target tensor </td></tr>
<tr><td class="paramname">param_grid</td><td>JSON object with parameter grid </td></tr>
<tr><td class="paramname">cv</td><td>Number of cross-validation folds </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>JSON object with best parameters and score </dd></dl>
</div>
</div>
<a id="a71a85ab7893e7e2b40763db34096d8bb" name="a71a85ab7893e7e2b40763db34096d8bb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a71a85ab7893e7e2b40763db34096d8bb">&#9670;&#160;</a></span>is_fitted()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool svm_classifier::SVMClassifier::is_fitted </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if the model is fitted/trained. </p>
<dl class="section return"><dt>Returns</dt><dd>True if model is fitted </dd></dl>
<p class="definition">Definition at line <a class="el" href="svm__classifier_8hpp_source.html#l00137">137</a> of file <a class="el" href="svm__classifier_8hpp_source.html">svm_classifier.hpp</a>.</p>
</div>
</div>
<a id="a583f5743acf5e6b850e079b9190989f1" name="a583f5743acf5e6b850e079b9190989f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a583f5743acf5e6b850e079b9190989f1">&#9670;&#160;</a></span>load_model()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void svm_classifier::SVMClassifier::load_model </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filename</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Load model from file. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">filename</td><td>Path to load the model from </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>if loading fails </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a5c998d5574b3b6afe003b23ed02ed1d1" name="a5c998d5574b3b6afe003b23ed02ed1d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5c998d5574b3b6afe003b23ed02ed1d1">&#9670;&#160;</a></span>predict()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">torch::Tensor svm_classifier::SVMClassifier::predict </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Predict class labels for samples. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Tensor of predicted class labels </dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>if model is not fitted </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ab4ef3c839e085ece646cdd2501a51f67" name="ab4ef3c839e085ece646cdd2501a51f67"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab4ef3c839e085ece646cdd2501a51f67">&#9670;&#160;</a></span>predict_proba()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">torch::Tensor svm_classifier::SVMClassifier::predict_proba </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Predict class probabilities for samples. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Tensor of shape (n_samples, n_classes) with class probabilities </dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>if model is not fitted or doesn't support probabilities </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ab8a0bd35705825e80a7567b576d47359" name="ab8a0bd35705825e80a7567b576d47359"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab8a0bd35705825e80a7567b576d47359">&#9670;&#160;</a></span>save_model()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void svm_classifier::SVMClassifier::save_model </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filename</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Save model to file. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">filename</td><td>Path to save the model </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>if saving fails </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a0479c57489c14be4a5ca79368086f7f6" name="a0479c57489c14be4a5ca79368086f7f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0479c57489c14be4a5ca79368086f7f6">&#9670;&#160;</a></span>score()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double svm_classifier::SVMClassifier::score </td>
<td>(</td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>X</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const torch::Tensor &amp;&#160;</td>
<td class="paramname"><em>y_true</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Calculate accuracy score on test data. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Feature tensor of shape (n_samples, n_features) </td></tr>
<tr><td class="paramname">y_true</td><td>True labels tensor of shape (n_samples,) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Accuracy score (fraction of correctly predicted samples) </dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>if model is not fitted </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="adb01e761fea07c709f3a0e315d3d0e06" name="adb01e761fea07c709f3a0e315d3d0e06"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adb01e761fea07c709f3a0e315d3d0e06">&#9670;&#160;</a></span>set_parameters()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void svm_classifier::SVMClassifier::set_parameters </td>
<td>(</td>
<td class="paramtype">const nlohmann::json &amp;&#160;</td>
<td class="paramname"><em>config</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set parameters from JSON configuration. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">config</td><td>JSON configuration object </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::invalid_argument</td><td>if parameters are invalid </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a3f8b4e932f075b267507ad77a499a135" name="a3f8b4e932f075b267507ad77a499a135"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3f8b4e932f075b267507ad77a499a135">&#9670;&#160;</a></span>supports_probability()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool svm_classifier::SVMClassifier::supports_probability </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if the current model supports probability prediction. </p>
<dl class="section return"><dt>Returns</dt><dd>True if probabilities are supported </dd></dl>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>include/svm_classifier/<a class="el" href="svm__classifier_8hpp_source.html">svm_classifier.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

BIN
closed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

View File

@@ -0,0 +1,502 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: src/data_converter.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">data_converter.cpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;svm_classifier/data_converter.hpp&quot;</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#include &quot;svm.h&quot;</span> <span class="comment">// libsvm</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &quot;linear.h&quot;</span> <span class="comment">// liblinear</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;cmath&gt;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="keyword">namespace </span>svm_classifier {</div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div>
<div class="foldopen" id="foldopen00010" data-start="{" data-end="}">
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056"> 10</a></span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056">DataConverter::DataConverter</a>()</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> : n_features_(0)</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> , n_samples_(0)</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> , sparse_threshold_(1e-8)</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> {</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> }</div>
</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
<div class="foldopen" id="foldopen00017" data-start="{" data-end="}">
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d"> 17</a></span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d">DataConverter::~DataConverter</a>()</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> {</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8">cleanup</a>();</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> }</div>
</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="foldopen" id="foldopen00022" data-start="{" data-end="}">
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a66f446e4decfe47bbba37c789f03f729"> 22</a></span> std::unique_ptr&lt;svm_problem&gt; <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a66f446e4decfe47bbba37c789f03f729">DataConverter::to_svm_problem</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">const</span> torch::Tensor&amp; y)</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> {</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce">validate_tensors</a>(X, y);</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">auto</span> X_cpu = ensure_cpu_tensor(X);</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> n_samples_ = X_cpu.size(0);</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> n_features_ = X_cpu.size(1);</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// Convert tensor data to svm_node structures</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> svm_nodes_storage_ = tensor_to_svm_nodes(X_cpu);</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="comment">// Prepare pointers for svm_problem</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> svm_x_space_.clear();</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> svm_x_space_.reserve(n_samples_);</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; nodes : svm_nodes_storage_) {</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> svm_x_space_.push_back(nodes.data());</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> }</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="comment">// Extract labels if provided</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">if</span> (y.defined() &amp;&amp; y.numel() &gt; 0) {</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> svm_y_space_ = extract_labels(y);</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> svm_y_space_.clear();</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> svm_y_space_.resize(n_samples_, 0.0); <span class="comment">// Dummy labels for prediction</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> }</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// Create svm_problem</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">auto</span> problem = std::make_unique&lt;svm_problem&gt;();</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> problem-&gt;l = n_samples_;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> problem-&gt;x = svm_x_space_.data();</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> problem-&gt;y = svm_y_space_.data();</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">return</span> problem;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> }</div>
</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
<div class="foldopen" id="foldopen00060" data-start="{" data-end="}">
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a7e7d8f6102b7a9b3256ff0dc6f536a35"> 60</a></span> std::unique_ptr&lt;problem&gt; <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a7e7d8f6102b7a9b3256ff0dc6f536a35">DataConverter::to_linear_problem</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">const</span> torch::Tensor&amp; y)</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> {</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce">validate_tensors</a>(X, y);</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">auto</span> X_cpu = ensure_cpu_tensor(X);</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> n_samples_ = X_cpu.size(0);</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> n_features_ = X_cpu.size(1);</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="comment">// Convert tensor data to feature_node structures</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> linear_nodes_storage_ = tensor_to_linear_nodes(X_cpu);</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="comment">// Prepare pointers for problem</span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> linear_x_space_.clear();</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> linear_x_space_.reserve(n_samples_);</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; nodes : linear_nodes_storage_) {</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> linear_x_space_.push_back(nodes.data());</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> }</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="comment">// Extract labels if provided</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">if</span> (y.defined() &amp;&amp; y.numel() &gt; 0) {</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> linear_y_space_ = extract_labels(y);</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> linear_y_space_.clear();</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> linear_y_space_.resize(n_samples_, 0.0); <span class="comment">// Dummy labels for prediction</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> }</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// Create problem</span></div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">auto</span> linear_problem = std::make_unique&lt;problem&gt;();</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> linear_problem-&gt;l = n_samples_;</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> linear_problem-&gt;n = n_features_;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> linear_problem-&gt;x = linear_x_space_.data();</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> linear_problem-&gt;y = linear_y_space_.data();</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> linear_problem-&gt;bias = -1; <span class="comment">// No bias term by default</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">return</span> linear_problem;</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> }</div>
</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
<div class="foldopen" id="foldopen00100" data-start="{" data-end="}">
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a16e1539ef1266ca9ddd27a2ac5a53b92"> 100</a></span> svm_node* <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a16e1539ef1266ca9ddd27a2ac5a53b92">DataConverter::to_svm_node</a>(<span class="keyword">const</span> torch::Tensor&amp; sample)</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> {</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> validate_tensor_properties(sample, 1, <span class="stringliteral">&quot;sample&quot;</span>);</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">auto</span> sample_cpu = ensure_cpu_tensor(sample);</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> single_svm_nodes_ = sample_to_svm_nodes(sample_cpu);</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">return</span> single_svm_nodes_.data();</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> }</div>
</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
<div class="foldopen" id="foldopen00110" data-start="{" data-end="}">
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a6bb2b4565b27df0db5f229dbd380795e"> 110</a></span> feature_node* <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a6bb2b4565b27df0db5f229dbd380795e">DataConverter::to_feature_node</a>(<span class="keyword">const</span> torch::Tensor&amp; sample)</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> {</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> validate_tensor_properties(sample, 1, <span class="stringliteral">&quot;sample&quot;</span>);</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">auto</span> sample_cpu = ensure_cpu_tensor(sample);</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> single_linear_nodes_ = sample_to_linear_nodes(sample_cpu);</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> single_linear_nodes_.data();</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> }</div>
</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
<div class="foldopen" id="foldopen00120" data-start="{" data-end="}">
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741"> 120</a></span> torch::Tensor <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741">DataConverter::from_predictions</a>(<span class="keyword">const</span> std::vector&lt;double&gt;&amp; predictions)</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> {</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">auto</span> options = torch::TensorOptions().dtype(torch::kInt32);</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">auto</span> tensor = torch::zeros({ <span class="keyword">static_cast&lt;</span>int64_t<span class="keyword">&gt;</span>(predictions.size()) }, options);</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; predictions.size(); ++i) {</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> tensor[i] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(predictions[i]);</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> }</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">return</span> tensor;</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> }</div>
</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
<div class="foldopen" id="foldopen00132" data-start="{" data-end="}">
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff"> 132</a></span> torch::Tensor <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff">DataConverter::from_probabilities</a>(<span class="keyword">const</span> std::vector&lt;std::vector&lt;double&gt;&gt;&amp; probabilities)</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> {</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span> (probabilities.empty()) {</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">return</span> torch::empty({ 0, 0 });</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> }</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">int</span> n_samples = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(probabilities.size());</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">int</span> n_classes = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(probabilities[0].size());</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">auto</span> tensor = torch::zeros({ n_samples, n_classes }, torch::kFloat64);</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> </div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; n_samples; ++i) {</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; n_classes; ++j) {</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> tensor[i][j] = probabilities[i][j];</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> }</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> }</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">return</span> tensor;</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> }</div>
</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
<div class="foldopen" id="foldopen00152" data-start="{" data-end="}">
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f"> 152</a></span> torch::Tensor <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f">DataConverter::from_decision_values</a>(<span class="keyword">const</span> std::vector&lt;std::vector&lt;double&gt;&gt;&amp; decision_values)</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> {</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span> (decision_values.empty()) {</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">return</span> torch::empty({ 0, 0 });</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> }</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordtype">int</span> n_samples = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(decision_values.size());</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordtype">int</span> n_values = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(decision_values[0].size());</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keyword">auto</span> tensor = torch::zeros({ n_samples, n_values }, torch::kFloat64);</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; n_samples; ++i) {</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; n_values; ++j) {</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> tensor[i][j] = decision_values[i][j];</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> }</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> }</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">return</span> tensor;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> }</div>
</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="foldopen" id="foldopen00172" data-start="{" data-end="}">
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce"> 172</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce">DataConverter::validate_tensors</a>(<span class="keyword">const</span> torch::Tensor&amp; X, <span class="keyword">const</span> torch::Tensor&amp; y)</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> {</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> validate_tensor_properties(X, 2, <span class="stringliteral">&quot;X&quot;</span>);</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">if</span> (y.defined() &amp;&amp; y.numel() &gt; 0) {</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> validate_tensor_properties(y, 1, <span class="stringliteral">&quot;y&quot;</span>);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// Check that number of samples match</span></div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">if</span> (X.size(0) != y.size(0)) {</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">throw</span> std::invalid_argument(</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="stringliteral">&quot;Number of samples in X (&quot;</span> + std::to_string(X.size(0)) +</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="stringliteral">&quot;) does not match number of labels in y (&quot;</span> + std::to_string(y.size(0)) + <span class="stringliteral">&quot;)&quot;</span></div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> );</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> }</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> }</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="comment">// Check for reasonable dimensions</span></div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span> (X.size(0) == 0) {</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;X cannot have 0 samples&quot;</span>);</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> }</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span> (X.size(1) == 0) {</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;X cannot have 0 features&quot;</span>);</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> }</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> }</div>
</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
<div class="foldopen" id="foldopen00198" data-start="{" data-end="}">
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8"> 198</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8">DataConverter::cleanup</a>()</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> {</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> svm_nodes_storage_.clear();</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> svm_x_space_.clear();</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> svm_y_space_.clear();</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> linear_nodes_storage_.clear();</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> linear_x_space_.clear();</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> linear_y_space_.clear();</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> single_svm_nodes_.clear();</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> single_linear_nodes_.clear();</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> n_features_ = 0;</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> n_samples_ = 0;</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> }</div>
</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> </div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> std::vector&lt;std::vector&lt;svm_node&gt;&gt; DataConverter::tensor_to_svm_nodes(<span class="keyword">const</span> torch::Tensor&amp; X)</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> {</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> std::vector&lt;std::vector&lt;svm_node&gt;&gt; nodes_storage;</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> nodes_storage.reserve(X.size(0));</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">auto</span> X_acc = X.accessor&lt;float, 2&gt;();</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> </div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; X.size(0); ++i) {</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> nodes_storage.push_back(sample_to_svm_nodes(X[i]));</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> }</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> </div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">return</span> nodes_storage;</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> }</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> std::vector&lt;std::vector&lt;feature_node&gt;&gt; DataConverter::tensor_to_linear_nodes(<span class="keyword">const</span> torch::Tensor&amp; X)</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> {</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> std::vector&lt;std::vector&lt;feature_node&gt;&gt; nodes_storage;</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> nodes_storage.reserve(X.size(0));</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> </div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; X.size(0); ++i) {</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> nodes_storage.push_back(sample_to_linear_nodes(X[i]));</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> }</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> </div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">return</span> nodes_storage;</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> }</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> </div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> std::vector&lt;svm_node&gt; DataConverter::sample_to_svm_nodes(<span class="keyword">const</span> torch::Tensor&amp; sample)</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> {</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> std::vector&lt;svm_node&gt; nodes;</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keyword">auto</span> sample_acc = sample.accessor&lt;float, 1&gt;();</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> </div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="comment">// Reserve space (worst case: all features are non-sparse)</span></div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> nodes.reserve(sample.size(0) + 1); <span class="comment">// +1 for terminator</span></div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> </div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; sample.size(0); ++j) {</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keywordtype">double</span> value = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(sample_acc[j]);</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> </div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="comment">// Skip sparse features</span></div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">if</span> (std::abs(value) &gt; sparse_threshold_) {</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> svm_node node;</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> node.index = j + 1; <span class="comment">// libsvm uses 1-based indexing</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> node.value = value;</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> nodes.push_back(node);</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> }</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> }</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="comment">// Add terminator</span></div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> svm_node terminator;</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> terminator.index = -1;</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> terminator.value = 0;</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> nodes.push_back(terminator);</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> </div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">return</span> nodes;</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> }</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> </div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> std::vector&lt;feature_node&gt; DataConverter::sample_to_linear_nodes(<span class="keyword">const</span> torch::Tensor&amp; sample)</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> {</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> std::vector&lt;feature_node&gt; nodes;</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> </div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keyword">auto</span> sample_acc = sample.accessor&lt;float, 1&gt;();</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> </div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="comment">// Reserve space (worst case: all features are non-sparse)</span></div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> nodes.reserve(sample.size(0) + 1); <span class="comment">// +1 for terminator</span></div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> </div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; sample.size(0); ++j) {</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="keywordtype">double</span> value = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(sample_acc[j]);</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> </div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <span class="comment">// Skip sparse features</span></div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">if</span> (std::abs(value) &gt; sparse_threshold_) {</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> feature_node node;</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> node.index = j + 1; <span class="comment">// liblinear uses 1-based indexing</span></div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> node.value = value;</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> nodes.push_back(node);</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> }</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> }</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> </div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="comment">// Add terminator</span></div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> feature_node terminator;</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> terminator.index = -1;</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> terminator.value = 0;</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> nodes.push_back(terminator);</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> </div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">return</span> nodes;</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> }</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> std::vector&lt;double&gt; DataConverter::extract_labels(<span class="keyword">const</span> torch::Tensor&amp; y)</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> {</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keyword">auto</span> y_cpu = ensure_cpu_tensor(y);</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> std::vector&lt;double&gt; labels;</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> labels.reserve(y_cpu.size(0));</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> </div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <span class="comment">// Handle different tensor types</span></div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">if</span> (y_cpu.dtype() == torch::kInt32) {</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="keyword">auto</span> y_acc = y_cpu.accessor&lt;int32_t, 1&gt;();</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; y_cpu.size(0); ++i) {</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> labels.push_back(<span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(y_acc[i]));</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> }</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (y_cpu.dtype() == torch::kInt64) {</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="keyword">auto</span> y_acc = y_cpu.accessor&lt;int64_t, 1&gt;();</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; y_cpu.size(0); ++i) {</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> labels.push_back(<span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(y_acc[i]));</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> }</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (y_cpu.dtype() == torch::kFloat32) {</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keyword">auto</span> y_acc = y_cpu.accessor&lt;float, 1&gt;();</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; y_cpu.size(0); ++i) {</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> labels.push_back(<span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(y_acc[i]));</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> }</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (y_cpu.dtype() == torch::kFloat64) {</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keyword">auto</span> y_acc = y_cpu.accessor&lt;double, 1&gt;();</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; y_cpu.size(0); ++i) {</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> labels.push_back(y_acc[i]);</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> }</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Unsupported label tensor dtype&quot;</span>);</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> }</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> </div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">return</span> labels;</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> }</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> </div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> torch::Tensor DataConverter::ensure_cpu_tensor(<span class="keyword">const</span> torch::Tensor&amp; tensor)</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> {</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">if</span> (tensor.device().type() != torch::kCPU) {</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">return</span> tensor.to(torch::kCPU);</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> }</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> </div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="comment">// Convert to float32 if not already</span></div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">if</span> (tensor.dtype() != torch::kFloat32) {</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">return</span> tensor.to(torch::kFloat32);</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> }</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> </div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">return</span> tensor;</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> }</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> </div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keywordtype">void</span> DataConverter::validate_tensor_properties(<span class="keyword">const</span> torch::Tensor&amp; tensor,</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keywordtype">int</span> expected_dims,</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keyword">const</span> std::string&amp; name)</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> {</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">if</span> (!tensor.defined()) {</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">throw</span> std::invalid_argument(name + <span class="stringliteral">&quot; tensor is not defined&quot;</span>);</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> }</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> </div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span> (tensor.dim() != expected_dims) {</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">throw</span> std::invalid_argument(</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> name + <span class="stringliteral">&quot; must have &quot;</span> + std::to_string(expected_dims) +</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <span class="stringliteral">&quot; dimensions, got &quot;</span> + std::to_string(tensor.dim())</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> );</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> }</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">if</span> (tensor.numel() == 0) {</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">throw</span> std::invalid_argument(name + <span class="stringliteral">&quot; tensor cannot be empty&quot;</span>);</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> }</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> </div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="comment">// Check for NaN or Inf values</span></div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">if</span> (torch::any(torch::isnan(tensor)).item&lt;bool&gt;()) {</div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">throw</span> std::invalid_argument(name + <span class="stringliteral">&quot; contains NaN values&quot;</span>);</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> }</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> </div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">if</span> (torch::any(torch::isinf(tensor)).item&lt;bool&gt;()) {</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">throw</span> std::invalid_argument(name + <span class="stringliteral">&quot; contains infinite values&quot;</span>);</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> }</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> }</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> </div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span>} <span class="comment">// namespace svm_classifier</span></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a16e1539ef1266ca9ddd27a2ac5a53b92"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a16e1539ef1266ca9ddd27a2ac5a53b92">svm_classifier::DataConverter::to_svm_node</a></div><div class="ttdeci">svm_node * to_svm_node(const torch::Tensor &amp;sample)</div><div class="ttdoc">Convert single sample to libsvm format.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00100">data_converter.cpp:100</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a46d12ba28c4c5bf6e0fad1122c621fa8"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8">svm_classifier::DataConverter::cleanup</a></div><div class="ttdeci">void cleanup()</div><div class="ttdoc">Clean up all allocated memory.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00198">data_converter.cpp:198</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a503eba54e8bb1f370e04b6e24354a32f"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f">svm_classifier::DataConverter::from_decision_values</a></div><div class="ttdeci">torch::Tensor from_decision_values(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;decision_values)</div><div class="ttdoc">Convert decision values back to PyTorch tensor.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00152">data_converter.cpp:152</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a5460485675613c54596418af3d5057ff"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff">svm_classifier::DataConverter::from_probabilities</a></div><div class="ttdeci">torch::Tensor from_probabilities(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;probabilities)</div><div class="ttdoc">Convert probabilities back to PyTorch tensor.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00132">data_converter.cpp:132</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a5874904555f26448ed5ae4cf6f370056"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056">svm_classifier::DataConverter::DataConverter</a></div><div class="ttdeci">DataConverter()</div><div class="ttdoc">Default constructor.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00010">data_converter.cpp:10</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a66f446e4decfe47bbba37c789f03f729"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a66f446e4decfe47bbba37c789f03f729">svm_classifier::DataConverter::to_svm_problem</a></div><div class="ttdeci">std::unique_ptr&lt; svm_problem &gt; to_svm_problem(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</div><div class="ttdoc">Convert PyTorch tensors to libsvm format.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00022">data_converter.cpp:22</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a6bb2b4565b27df0db5f229dbd380795e"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a6bb2b4565b27df0db5f229dbd380795e">svm_classifier::DataConverter::to_feature_node</a></div><div class="ttdeci">feature_node * to_feature_node(const torch::Tensor &amp;sample)</div><div class="ttdoc">Convert single sample to liblinear format.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00110">data_converter.cpp:110</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a7e7d8f6102b7a9b3256ff0dc6f536a35"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a7e7d8f6102b7a9b3256ff0dc6f536a35">svm_classifier::DataConverter::to_linear_problem</a></div><div class="ttdeci">std::unique_ptr&lt; problem &gt; to_linear_problem(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</div><div class="ttdoc">Convert PyTorch tensors to liblinear format.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00060">data_converter.cpp:60</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_aa0615f3de29958b2c5229d349f2f60ce"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce">svm_classifier::DataConverter::validate_tensors</a></div><div class="ttdeci">void validate_tensors(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</div><div class="ttdoc">Validate input tensors.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00172">data_converter.cpp:172</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_ab3e800a5016a915e9912d5873bb48741"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741">svm_classifier::DataConverter::from_predictions</a></div><div class="ttdeci">torch::Tensor from_predictions(const std::vector&lt; double &gt; &amp;predictions)</div><div class="ttdoc">Convert predictions back to PyTorch tensor.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00120">data_converter.cpp:120</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_ac3af2c9c03cffe2968f29147611e333d"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d">svm_classifier::DataConverter::~DataConverter</a></div><div class="ttdeci">~DataConverter()</div><div class="ttdoc">Destructor - cleans up allocated memory.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00017">data_converter.cpp:17</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,193 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: include/svm_classifier/data_converter.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_daf582bc00f2bbc6516ddb6630e28009.html">svm_classifier</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">data_converter.hpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &quot;types.hpp&quot;</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;torch/torch.h&gt;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// Forward declarations for libsvm and liblinear structures</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="keyword">struct </span>svm_node;</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="keyword">struct </span>svm_problem;</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="keyword">struct </span>feature_node;</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">struct </span>problem;</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="keyword">namespace </span>svm_classifier {</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
<div class="foldopen" id="foldopen00023" data-start="{" data-end="};">
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html"> 23</a></span> <span class="keyword">class </span><a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a> {</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056">DataConverter</a>();</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d">~DataConverter</a>();</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> std::unique_ptr&lt;svm_problem&gt; <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a66f446e4decfe47bbba37c789f03f729">to_svm_problem</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">const</span> torch::Tensor&amp; y = torch::Tensor());</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> std::unique_ptr&lt;problem&gt; <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a7e7d8f6102b7a9b3256ff0dc6f536a35">to_linear_problem</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">const</span> torch::Tensor&amp; y = torch::Tensor());</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> svm_node* <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a16e1539ef1266ca9ddd27a2ac5a53b92">to_svm_node</a>(<span class="keyword">const</span> torch::Tensor&amp; sample);</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> feature_node* <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a6bb2b4565b27df0db5f229dbd380795e">to_feature_node</a>(<span class="keyword">const</span> torch::Tensor&amp; sample);</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> torch::Tensor <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741">from_predictions</a>(<span class="keyword">const</span> std::vector&lt;double&gt;&amp; predictions);</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> torch::Tensor <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff">from_probabilities</a>(<span class="keyword">const</span> std::vector&lt;std::vector&lt;double&gt;&gt;&amp; probabilities);</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> torch::Tensor <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f">from_decision_values</a>(<span class="keyword">const</span> std::vector&lt;std::vector&lt;double&gt;&gt;&amp; decision_values);</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce">validate_tensors</a>(<span class="keyword">const</span> torch::Tensor&amp; X, <span class="keyword">const</span> torch::Tensor&amp; y = torch::Tensor());</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a26342a8cc8b943f099112040aa960ae6"> 100</a></span> <span class="keywordtype">int</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a26342a8cc8b943f099112040aa960ae6">get_n_features</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> n_features_; }</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a16999ded27bc2d42d2ebd9551b00c1cb"> 106</a></span> <span class="keywordtype">int</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a16999ded27bc2d42d2ebd9551b00c1cb">get_n_samples</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> n_samples_; }</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8">cleanup</a>();</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a9259322e54d2477478a684e99d8e557a"> 117</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a9259322e54d2477478a684e99d8e557a">set_sparse_threshold</a>(<span class="keywordtype">double</span> threshold) { sparse_threshold_ = threshold; }</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a1905f60fef9ffd3a8e8e45e41395352d"> 123</a></span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a1905f60fef9ffd3a8e8e45e41395352d">get_sparse_threshold</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> sparse_threshold_; }</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">int</span> n_features_; </div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">int</span> n_samples_; </div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">double</span> sparse_threshold_; </div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// Memory management for libsvm structures</span></div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> std::vector&lt;std::vector&lt;svm_node&gt;&gt; svm_nodes_storage_;</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> std::vector&lt;svm_node*&gt; svm_x_space_;</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> std::vector&lt;double&gt; svm_y_space_;</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="comment">// Memory management for liblinear structures</span></div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> std::vector&lt;std::vector&lt;feature_node&gt;&gt; linear_nodes_storage_;</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> std::vector&lt;feature_node*&gt; linear_x_space_;</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> std::vector&lt;double&gt; linear_y_space_;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// Single sample storage (for prediction)</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> std::vector&lt;svm_node&gt; single_svm_nodes_;</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> std::vector&lt;feature_node&gt; single_linear_nodes_;</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> std::vector&lt;std::vector&lt;svm_node&gt;&gt; tensor_to_svm_nodes(<span class="keyword">const</span> torch::Tensor&amp; X);</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> std::vector&lt;std::vector&lt;feature_node&gt;&gt; tensor_to_linear_nodes(<span class="keyword">const</span> torch::Tensor&amp; X);</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> std::vector&lt;svm_node&gt; sample_to_svm_nodes(<span class="keyword">const</span> torch::Tensor&amp; sample);</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> std::vector&lt;feature_node&gt; sample_to_linear_nodes(<span class="keyword">const</span> torch::Tensor&amp; sample);</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> std::vector&lt;double&gt; extract_labels(<span class="keyword">const</span> torch::Tensor&amp; y);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> torch::Tensor ensure_cpu_tensor(<span class="keyword">const</span> torch::Tensor&amp; tensor);</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keywordtype">void</span> validate_tensor_properties(<span class="keyword">const</span> torch::Tensor&amp; tensor, <span class="keywordtype">int</span> expected_dims, <span class="keyword">const</span> std::string&amp; name);</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> };</div>
</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span>} <span class="comment">// namespace svm_classifier</span></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></div><div class="ttdoc">Data converter between libtorch tensors and SVM library formats.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8hpp_source.html#l00023">data_converter.hpp:23</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a16999ded27bc2d42d2ebd9551b00c1cb"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a16999ded27bc2d42d2ebd9551b00c1cb">svm_classifier::DataConverter::get_n_samples</a></div><div class="ttdeci">int get_n_samples() const</div><div class="ttdoc">Get number of samples from last conversion.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8hpp_source.html#l00106">data_converter.hpp:106</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a16e1539ef1266ca9ddd27a2ac5a53b92"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a16e1539ef1266ca9ddd27a2ac5a53b92">svm_classifier::DataConverter::to_svm_node</a></div><div class="ttdeci">svm_node * to_svm_node(const torch::Tensor &amp;sample)</div><div class="ttdoc">Convert single sample to libsvm format.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00100">data_converter.cpp:100</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a1905f60fef9ffd3a8e8e45e41395352d"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a1905f60fef9ffd3a8e8e45e41395352d">svm_classifier::DataConverter::get_sparse_threshold</a></div><div class="ttdeci">double get_sparse_threshold() const</div><div class="ttdoc">Get sparse threshold.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8hpp_source.html#l00123">data_converter.hpp:123</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a26342a8cc8b943f099112040aa960ae6"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a26342a8cc8b943f099112040aa960ae6">svm_classifier::DataConverter::get_n_features</a></div><div class="ttdeci">int get_n_features() const</div><div class="ttdoc">Get number of features from last conversion.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8hpp_source.html#l00100">data_converter.hpp:100</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a46d12ba28c4c5bf6e0fad1122c621fa8"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8">svm_classifier::DataConverter::cleanup</a></div><div class="ttdeci">void cleanup()</div><div class="ttdoc">Clean up all allocated memory.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00198">data_converter.cpp:198</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a503eba54e8bb1f370e04b6e24354a32f"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f">svm_classifier::DataConverter::from_decision_values</a></div><div class="ttdeci">torch::Tensor from_decision_values(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;decision_values)</div><div class="ttdoc">Convert decision values back to PyTorch tensor.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00152">data_converter.cpp:152</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a5460485675613c54596418af3d5057ff"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff">svm_classifier::DataConverter::from_probabilities</a></div><div class="ttdeci">torch::Tensor from_probabilities(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;probabilities)</div><div class="ttdoc">Convert probabilities back to PyTorch tensor.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00132">data_converter.cpp:132</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a5874904555f26448ed5ae4cf6f370056"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056">svm_classifier::DataConverter::DataConverter</a></div><div class="ttdeci">DataConverter()</div><div class="ttdoc">Default constructor.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00010">data_converter.cpp:10</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a66f446e4decfe47bbba37c789f03f729"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a66f446e4decfe47bbba37c789f03f729">svm_classifier::DataConverter::to_svm_problem</a></div><div class="ttdeci">std::unique_ptr&lt; svm_problem &gt; to_svm_problem(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</div><div class="ttdoc">Convert PyTorch tensors to libsvm format.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00022">data_converter.cpp:22</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a6bb2b4565b27df0db5f229dbd380795e"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a6bb2b4565b27df0db5f229dbd380795e">svm_classifier::DataConverter::to_feature_node</a></div><div class="ttdeci">feature_node * to_feature_node(const torch::Tensor &amp;sample)</div><div class="ttdoc">Convert single sample to liblinear format.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00110">data_converter.cpp:110</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a7e7d8f6102b7a9b3256ff0dc6f536a35"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a7e7d8f6102b7a9b3256ff0dc6f536a35">svm_classifier::DataConverter::to_linear_problem</a></div><div class="ttdeci">std::unique_ptr&lt; problem &gt; to_linear_problem(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</div><div class="ttdoc">Convert PyTorch tensors to liblinear format.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00060">data_converter.cpp:60</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a9259322e54d2477478a684e99d8e557a"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a9259322e54d2477478a684e99d8e557a">svm_classifier::DataConverter::set_sparse_threshold</a></div><div class="ttdeci">void set_sparse_threshold(double threshold)</div><div class="ttdoc">Set sparse threshold (features with absolute value below this are ignored)</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8hpp_source.html#l00117">data_converter.hpp:117</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_aa0615f3de29958b2c5229d349f2f60ce"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce">svm_classifier::DataConverter::validate_tensors</a></div><div class="ttdeci">void validate_tensors(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</div><div class="ttdoc">Validate input tensors.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00172">data_converter.cpp:172</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_ab3e800a5016a915e9912d5873bb48741"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741">svm_classifier::DataConverter::from_predictions</a></div><div class="ttdeci">torch::Tensor from_predictions(const std::vector&lt; double &gt; &amp;predictions)</div><div class="ttdoc">Convert predictions back to PyTorch tensor.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00120">data_converter.cpp:120</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_ac3af2c9c03cffe2968f29147611e333d"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d">svm_classifier::DataConverter::~DataConverter</a></div><div class="ttdeci">~DataConverter()</div><div class="ttdoc">Destructor - cleans up allocated memory.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8cpp_source.html#l00017">data_converter.cpp:17</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,96 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: src Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">src Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
Files</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="data__converter_8cpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>data_converter.cpp</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="kernel__parameters_8cpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>kernel_parameters.cpp</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="multiclass__strategy_8cpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>multiclass_strategy.cpp</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,92 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: include Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">include Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a>
Directories</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_daf582bc00f2bbc6516ddb6630e28009.html">svm_classifier</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,109 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: include/svm_classifier Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_daf582bc00f2bbc6516ddb6630e28009.html">svm_classifier</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">svm_classifier Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Directory dependency graph for svm_classifier:</div>
<div class="dyncontent">
<div class="center"><img src="dir_daf582bc00f2bbc6516ddb6630e28009_dep.png" border="0" usemap="#adir__daf582bc00f2bbc6516ddb6630e28009__dep" alt="include/svm_classifier"/></div>
<map name="adir__daf582bc00f2bbc6516ddb6630e28009__dep" id="adir__daf582bc00f2bbc6516ddb6630e28009__dep">
<area shape="rect" href="dir_daf582bc00f2bbc6516ddb6630e28009.html" title="svm_classifier" alt="" coords="27,52,141,77"/>
<area shape="rect" href="dir_d44c64559bbebec7f509842c48db8b23.html" title="include" alt="" coords="16,16,152,88"/>
</map>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
Files</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="data__converter_8hpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>data_converter.hpp</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="kernel__parameters_8hpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>kernel_parameters.hpp</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="multiclass__strategy_8hpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>multiclass_strategy.hpp</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="svm__classifier_8hpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>svm_classifier.hpp</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="types_8hpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>types.hpp</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,4 @@
<map id="include/svm_classifier" name="include/svm_classifier">
<area shape="rect" id="node1" href="dir_daf582bc00f2bbc6516ddb6630e28009.html" title="svm_classifier" alt="" coords="27,52,141,77"/>
<area shape="rect" id="clust1" href="dir_d44c64559bbebec7f509842c48db8b23.html" title="include" alt="" coords="16,16,152,88"/>
</map>

View File

@@ -0,0 +1 @@
96accfb613001f738468667cac06f43c

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

12
doc.svg Normal file
View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#4665A2">
<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/>
</g>
<g style="fill:#D8DFEE;stroke-width:0">
<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

12
docd.svg Normal file
View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#C4CFE5">
<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/>
</g>
<g style="fill:#4665A2;stroke-width:0">
<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

2045
doxygen.css Normal file

File diff suppressed because it is too large Load Diff

28
doxygen.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

199
dynsections.js Normal file
View File

@@ -0,0 +1,199 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function toggleVisibility(linkObj)
{
var base = $(linkObj).attr('id');
var summary = $('#'+base+'-summary');
var content = $('#'+base+'-content');
var trigger = $('#'+base+'-trigger');
var src=$(trigger).attr('src');
if (content.is(':visible')===true) {
content.hide();
summary.show();
$(linkObj).addClass('closed').removeClass('opened');
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
content.show();
summary.hide();
$(linkObj).removeClass('closed').addClass('opened');
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
}
return false;
}
function updateStripes()
{
$('table.directory tr').
removeClass('even').filter(':visible:even').addClass('even');
$('table.directory tr').
removeClass('odd').filter(':visible:odd').addClass('odd');
}
function toggleLevel(level)
{
$('table.directory tr').each(function() {
var l = this.id.split('_').length-1;
var i = $('#img'+this.id.substring(3));
var a = $('#arr'+this.id.substring(3));
if (l<level+1) {
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
a.html('&#9660;');
$(this).show();
} else if (l==level+1) {
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
a.html('&#9658;');
$(this).show();
} else {
$(this).hide();
}
});
updateStripes();
}
function toggleFolder(id)
{
// the clicked row
var currentRow = $('#row_'+id);
// all rows after the clicked row
var rows = currentRow.nextAll("tr");
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
// only match elements AFTER this one (can't hide elements before)
var childRows = rows.filter(function() { return this.id.match(re); });
// first row is visible we are HIDING
if (childRows.filter(':first').is(':visible')===true) {
// replace down arrow by right arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
currentRowSpans.filter(".arrow").html('&#9658;');
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
} else { // we are SHOWING
// replace right arrow by down arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
currentRowSpans.filter(".arrow").html('&#9660;');
// replace down arrows by right arrows for child rows
var childRowsSpans = childRows.find("span");
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
childRowsSpans.filter(".arrow").html('&#9658;');
childRows.show(); //show all children
}
updateStripes();
}
function toggleInherit(id)
{
var rows = $('tr.inherit.'+id);
var img = $('tr.inherit_header.'+id+' img');
var src = $(img).attr('src');
if (rows.filter(':first').is(':visible')===true) {
rows.css('display','none');
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
rows.css('display','table-row'); // using show() causes jump in firefox
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
}
}
var opened=true;
// in case HTML_COLORSTYLE is LIGHT or DARK the vars will be replaced, so we write them out explicitly and use double quotes
var plusImg = [ "var(--fold-plus-image)", "var(--fold-plus-image-relpath)" ];
var minusImg = [ "var(--fold-minus-image)", "var(--fold-minus-image-relpath)" ];
// toggle all folding blocks
function codefold_toggle_all(relPath) {
if (opened) {
$('#fold_all').css('background-image',plusImg[relPath]);
$('div[id^=foldopen]').hide();
$('div[id^=foldclosed]').show();
} else {
$('#fold_all').css('background-image',minusImg[relPath]);
$('div[id^=foldopen]').show();
$('div[id^=foldclosed]').hide();
}
opened=!opened;
}
// toggle single folding block
function codefold_toggle(id) {
$('#foldopen'+id).toggle();
$('#foldclosed'+id).toggle();
}
function init_codefold(relPath) {
$('span[class=lineno]').css(
{'padding-right':'4px',
'margin-right':'2px',
'display':'inline-block',
'width':'54px',
'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%'
});
// add global toggle to first line
$('span[class=lineno]:first').append('<span class="fold" id="fold_all" '+
'onclick="javascript:codefold_toggle_all('+relPath+');" '+
'style="background-image:'+minusImg[relPath]+';"></span>');
// add vertical lines to other rows
$('span[class=lineno]').not(':eq(0)').append('<span class="fold"></span>');
// add toggle controls to lines with fold divs
$('div[class=foldopen]').each(function() {
// extract specific id to use
var id = $(this).attr('id').replace('foldopen','');
// extract start and end foldable fragment attributes
var start = $(this).attr('data-start');
var end = $(this).attr('data-end');
// replace normal fold span with controls for the first line of a foldable fragment
$(this).find('span[class=fold]:first').replaceWith('<span class="fold" '+
'onclick="javascript:codefold_toggle(\''+id+'\');" '+
'style="background-image:'+minusImg[relPath]+';"></span>');
// append div for folded (closed) representation
$(this).after('<div id="foldclosed'+id+'" class="foldclosed" style="display:none;"></div>');
// extract the first line from the "open" section to represent closed content
var line = $(this).children().first().clone();
// remove any glow that might still be active on the original line
$(line).removeClass('glow');
if (start) {
// if line already ends with a start marker (e.g. trailing {), remove it
$(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),''));
}
// replace minus with plus symbol
$(line).find('span[class=fold]').css('background-image',plusImg[relPath]);
// append ellipsis
$(line).append(' '+start+'<a href="javascript:codefold_toggle(\''+id+'\')">&#8230;</a>'+end);
// insert constructed line into closed div
$('#foldclosed'+id).html(line);
});
}
/* @license-end */
$(document).ready(function() {
$('.code,.codeRef').each(function() {
$(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());
$.fn.powerTip.smartPlacementLists.s = [ 's', 'n', 'ne', 'se' ];
$(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });
});
});

97
files.html Normal file
View File

@@ -0,0 +1,97 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: File List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">File List</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html" target="_self">include</a></td><td class="desc"></td></tr>
<tr id="row_0_0_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span id="img_0_0_" class="iconfopen" onclick="toggleFolder('0_0_')">&#160;</span><a class="el" href="dir_daf582bc00f2bbc6516ddb6630e28009.html" target="_self">svm_classifier</a></td><td class="desc"></td></tr>
<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="data__converter_8hpp_source.html"><span class="icondoc"></span></a><b>data_converter.hpp</b></td><td class="desc"></td></tr>
<tr id="row_0_0_1_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="kernel__parameters_8hpp_source.html"><span class="icondoc"></span></a><b>kernel_parameters.hpp</b></td><td class="desc"></td></tr>
<tr id="row_0_0_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="multiclass__strategy_8hpp_source.html"><span class="icondoc"></span></a><b>multiclass_strategy.hpp</b></td><td class="desc"></td></tr>
<tr id="row_0_0_3_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="svm__classifier_8hpp_source.html"><span class="icondoc"></span></a><b>svm_classifier.hpp</b></td><td class="desc"></td></tr>
<tr id="row_0_0_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="types_8hpp_source.html"><span class="icondoc"></span></a><b>types.hpp</b></td><td class="desc"></td></tr>
<tr id="row_1_" class="odd"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span id="img_1_" class="iconfopen" onclick="toggleFolder('1_')">&#160;</span><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_self">src</a></td><td class="desc"></td></tr>
<tr id="row_1_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="data__converter_8cpp_source.html"><span class="icondoc"></span></a><b>data_converter.cpp</b></td><td class="desc"></td></tr>
<tr id="row_1_1_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="kernel__parameters_8cpp_source.html"><span class="icondoc"></span></a><b>kernel_parameters.cpp</b></td><td class="desc"></td></tr>
<tr id="row_1_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="multiclass__strategy_8cpp_source.html"><span class="icondoc"></span></a><b>multiclass_strategy.cpp</b></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

11
folderclosed.svg Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#4665A2;">
<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/>
</g>
<g style="fill:#D8DFEE;stroke-width:0;">
<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

11
folderclosedd.svg Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#C4CFE5;">
<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/>
</g>
<g style="fill:#4665A2;stroke-width:0;">
<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

17
folderopen.svg Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#4665A2;">
<path
d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"
id="path2" />
</g>
<g style="fill:#D8DFEE;stroke-width:0;">
<path
d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z"
id="path199" /><path
d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z"
id="path201" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

12
folderopend.svg Normal file
View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<g style="fill:#C4CFE5;">
<path d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"/>
</g>
<g style="fill:#4665A2;stroke-width:0;">
<path d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z" />
<path d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

204
functions.html Normal file
View File

@@ -0,0 +1,204 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Class Members</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="contents">
<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
<h3><a id="index_a" name="index_a"></a>- a -</h3><ul>
<li>accuracy&#160;:&#160;<a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html#abe60e87c99b8b3c4499e602d8c26847a">svm_classifier::EvaluationMetrics</a></li>
</ul>
<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
<li>classes_&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">svm_classifier::MulticlassStrategyBase</a></li>
<li>cleanup()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8">svm_classifier::DataConverter</a></li>
<li>confusion_matrix&#160;:&#160;<a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html#a843fbb476ae6bf24d7f72dabc3ef334a">svm_classifier::EvaluationMetrics</a></li>
<li>cross_validate()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a4c91072ea0d3d9b97ba458ff7d0898b8">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
<li>DataConverter()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056">svm_classifier::DataConverter</a></li>
<li>decision_function()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ad1c4eb746cb1fdd67cf436ff85a9b0f0">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a6aae0b5cd72180e94212454da8b777d2">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a966b79bc8b6fac0fa78feefc2dd8a878">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ad153c0537998eae5fbca5fd0b5ead2b7">svm_classifier::SVMClassifier</a></li>
<li>decision_values&#160;:&#160;<a class="el" href="structsvm__classifier_1_1PredictionResult.html#a1ba501fdd3da8d3c4b99285b2f71c1d9">svm_classifier::PredictionResult</a></li>
</ul>
<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
<li>evaluate()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a38a9b020b9f4f9254920c97a3a047e9b">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
<li>f1_score&#160;:&#160;<a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html#a0eca4a2bc01318bb641f384abd0a47bc">svm_classifier::EvaluationMetrics</a></li>
<li>fit()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a548af7201b7970abee0c31e7ec07d896">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#af5ce4aeb191c5feed178b6465eac66f6">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#aae14da8c0effd04731b5a4a0181eb1b6">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a7e6648c4d2bac92bb00381076ea92db3">svm_classifier::SVMClassifier</a></li>
<li>from_decision_values()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f">svm_classifier::DataConverter</a></li>
<li>from_predictions()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741">svm_classifier::DataConverter</a></li>
<li>from_probabilities()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff">svm_classifier::DataConverter</a></li>
</ul>
<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
<li>get_classes()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a379c4000227cc46410bfbecce6e80c33">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a52f9c3d7d98077d1dec0d6034711b750">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a5e10800b16dbc66fd1c0d5e0a42871f0">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#af0fea42cdfc9416ed854b0d4aefa82b9">svm_classifier::SVMClassifier</a></li>
<li>get_feature_importance()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a2ade33562381e34cbe4b04089545a715">svm_classifier::SVMClassifier</a></li>
<li>get_kernel_type()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a55338ab396bd5da923b6acbef8ed783a">svm_classifier::SVMClassifier</a></li>
<li>get_multiclass_strategy()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a14c2f7917c8a91154c09160288509f2c">svm_classifier::SVMClassifier</a></li>
<li>get_n_classes()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a1740d877a4d634ec1763cb8646f5e172">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a16ee2ae3623767af2165fef2d4b7d039">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a53abe89ec25c33fd9c32d92ba08d01ed">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a75d501339e2e2273082b0838e9caadcd">svm_classifier::SVMClassifier</a></li>
<li>get_n_features()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a26342a8cc8b943f099112040aa960ae6">svm_classifier::DataConverter</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a780afcb2ad618e46541aff8a44e9c7b4">svm_classifier::SVMClassifier</a></li>
<li>get_n_samples()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a16999ded27bc2d42d2ebd9551b00c1cb">svm_classifier::DataConverter</a></li>
<li>get_parameters()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a7c39ec09b15186dcb4f04ae7171d23bb">svm_classifier::SVMClassifier</a></li>
<li>get_sparse_threshold()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a1905f60fef9ffd3a8e8e45e41395352d">svm_classifier::DataConverter</a></li>
<li>get_strategy_type()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a31a0501fa1a6db1d41cbf825b2348e47">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#aae80b4e75459b2aca4f561d62c3c5675">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#af9e1bd6d08ce3e7afd5279c835ce6cfb">svm_classifier::OneVsRestStrategy</a></li>
<li>get_svm_library()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a38173e5cf0f6a4620f032fd54c28d592">svm_classifier::SVMClassifier</a></li>
<li>get_training_metrics()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a0b8c77f81d84489b2da0d080773a2970">svm_classifier::SVMClassifier</a></li>
<li>grid_search()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#afed66a704dfb38cc7d080d3337d10194">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_h" name="index_h"></a>- h -</h3><ul>
<li>has_probabilities&#160;:&#160;<a class="el" href="structsvm__classifier_1_1PredictionResult.html#aeb863c05f5761ba1925166b73e3f4da6">svm_classifier::PredictionResult</a></li>
</ul>
<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
<li>is_fitted()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a71a85ab7893e7e2b40763db34096d8bb">svm_classifier::SVMClassifier</a></li>
<li>is_trained_&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8e74cd580feaac0da34d204274a24fea">svm_classifier::MulticlassStrategyBase</a></li>
<li>iterations&#160;:&#160;<a class="el" href="structsvm__classifier_1_1TrainingMetrics.html#a7ad692cf23590fe1be348902031bbc5a">svm_classifier::TrainingMetrics</a></li>
</ul>
<h3><a id="index_l" name="index_l"></a>- l -</h3><ul>
<li>load_model()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a583f5743acf5e6b850e079b9190989f1">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
<li>objective_value&#160;:&#160;<a class="el" href="structsvm__classifier_1_1TrainingMetrics.html#a1b41ef88d2dfb85b7f587292e6b83b7f">svm_classifier::TrainingMetrics</a></li>
<li>OneVsOneStrategy()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a6d4b060383169010dda4197a0bffa020">svm_classifier::OneVsOneStrategy</a></li>
<li>OneVsRestStrategy()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a30f146a564a9c9681524593cacbb43e7">svm_classifier::OneVsRestStrategy</a></li>
<li>operator=()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a209902805c75e8f22c55575adfedc7be">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
<li>precision&#160;:&#160;<a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html#ad2ee81c9b36abcfb04598110402c242f">svm_classifier::EvaluationMetrics</a></li>
<li>predict()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a70f94cfcf8b2bf6d60133c688fe55f9d">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#ab60df2d9b6069a73369b0bf9d3675662">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a771903a821d5380ddd5d0b3a912e7df9">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a5c998d5574b3b6afe003b23ed02ed1d1">svm_classifier::SVMClassifier</a></li>
<li>predict_proba()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ab5348ee3b83547702ec7903ee7ee2da7">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#ae62e8b24115042d1119e76f3302f6992">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a55639e5adaadcd6414b50d5ebf0d1cd2">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ab4ef3c839e085ece646cdd2501a51f67">svm_classifier::SVMClassifier</a></li>
<li>predictions&#160;:&#160;<a class="el" href="structsvm__classifier_1_1PredictionResult.html#a1a3e5f634777de08f2e6cd71ee4e8891">svm_classifier::PredictionResult</a></li>
<li>probabilities&#160;:&#160;<a class="el" href="structsvm__classifier_1_1PredictionResult.html#a22d86775346acc5545affd204eba47fd">svm_classifier::PredictionResult</a></li>
</ul>
<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
<li>recall&#160;:&#160;<a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html#a78b1a0c50c4722bf73941a64e3a15e8f">svm_classifier::EvaluationMetrics</a></li>
<li>reset()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#aa2bd5715c9e54e3fb465a9bcbf2e9c8a">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
<li>save_model()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ab8a0bd35705825e80a7567b576d47359">svm_classifier::SVMClassifier</a></li>
<li>score()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a0479c57489c14be4a5ca79368086f7f6">svm_classifier::SVMClassifier</a></li>
<li>set_parameters()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#adb01e761fea07c709f3a0e315d3d0e06">svm_classifier::SVMClassifier</a></li>
<li>set_sparse_threshold()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a9259322e54d2477478a684e99d8e557a">svm_classifier::DataConverter</a></li>
<li>support_vectors&#160;:&#160;<a class="el" href="structsvm__classifier_1_1TrainingMetrics.html#a3963a55a5d40a0e25d8ce94a5b81a227">svm_classifier::TrainingMetrics</a></li>
<li>supports_probability()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a2ab91902f8d6eb216f626ce9ea4be992">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a8875d29cb8666af10e0fb5634e08c0c1">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a200300198628ac119eac09e62ff62336">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a3f8b4e932f075b267507ad77a499a135">svm_classifier::SVMClassifier</a></li>
<li>SVMClassifier()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a3ed45cdbc3fc5d947320177f42115dcf">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
<li>to_feature_node()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a6bb2b4565b27df0db5f229dbd380795e">svm_classifier::DataConverter</a></li>
<li>to_linear_problem()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a7e7d8f6102b7a9b3256ff0dc6f536a35">svm_classifier::DataConverter</a></li>
<li>to_svm_node()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a16e1539ef1266ca9ddd27a2ac5a53b92">svm_classifier::DataConverter</a></li>
<li>to_svm_problem()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a66f446e4decfe47bbba37c789f03f729">svm_classifier::DataConverter</a></li>
<li>training_time&#160;:&#160;<a class="el" href="structsvm__classifier_1_1TrainingMetrics.html#af8eee57134f3fe0fab23b60fe33cb4de">svm_classifier::TrainingMetrics</a></li>
</ul>
<h3><a id="index_v" name="index_v"></a>- v -</h3><ul>
<li>validate_tensors()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce">svm_classifier::DataConverter</a></li>
</ul>
<h3><a id="index__7E" name="index__7E"></a>- ~ -</h3><ul>
<li>~DataConverter()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d">svm_classifier::DataConverter</a></li>
<li>~MulticlassStrategyBase()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8a5647dd57eed281288f0c9011b11395">svm_classifier::MulticlassStrategyBase</a></li>
<li>~OneVsOneStrategy()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#af9a653b62502e296d0d18092be56344f">svm_classifier::OneVsOneStrategy</a></li>
<li>~OneVsRestStrategy()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#acfd698dd6cc0a988ac642a00d1f0b970">svm_classifier::OneVsRestStrategy</a></li>
<li>~SVMClassifier()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a233584f6696969ce1a402624fd046146">svm_classifier::SVMClassifier</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

181
functions_func.html Normal file
View File

@@ -0,0 +1,181 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Class Members - Functions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="contents">
<div class="textblock">Here is a list of all documented functions with links to the class documentation for each member:</div>
<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
<li>cleanup()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8">svm_classifier::DataConverter</a></li>
<li>cross_validate()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a4c91072ea0d3d9b97ba458ff7d0898b8">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
<li>DataConverter()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056">svm_classifier::DataConverter</a></li>
<li>decision_function()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ad1c4eb746cb1fdd67cf436ff85a9b0f0">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a6aae0b5cd72180e94212454da8b777d2">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a966b79bc8b6fac0fa78feefc2dd8a878">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ad153c0537998eae5fbca5fd0b5ead2b7">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
<li>evaluate()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a38a9b020b9f4f9254920c97a3a047e9b">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
<li>fit()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a548af7201b7970abee0c31e7ec07d896">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#af5ce4aeb191c5feed178b6465eac66f6">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#aae14da8c0effd04731b5a4a0181eb1b6">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a7e6648c4d2bac92bb00381076ea92db3">svm_classifier::SVMClassifier</a></li>
<li>from_decision_values()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f">svm_classifier::DataConverter</a></li>
<li>from_predictions()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741">svm_classifier::DataConverter</a></li>
<li>from_probabilities()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff">svm_classifier::DataConverter</a></li>
</ul>
<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
<li>get_classes()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a379c4000227cc46410bfbecce6e80c33">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a52f9c3d7d98077d1dec0d6034711b750">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a5e10800b16dbc66fd1c0d5e0a42871f0">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#af0fea42cdfc9416ed854b0d4aefa82b9">svm_classifier::SVMClassifier</a></li>
<li>get_feature_importance()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a2ade33562381e34cbe4b04089545a715">svm_classifier::SVMClassifier</a></li>
<li>get_kernel_type()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a55338ab396bd5da923b6acbef8ed783a">svm_classifier::SVMClassifier</a></li>
<li>get_multiclass_strategy()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a14c2f7917c8a91154c09160288509f2c">svm_classifier::SVMClassifier</a></li>
<li>get_n_classes()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a1740d877a4d634ec1763cb8646f5e172">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a16ee2ae3623767af2165fef2d4b7d039">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a53abe89ec25c33fd9c32d92ba08d01ed">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a75d501339e2e2273082b0838e9caadcd">svm_classifier::SVMClassifier</a></li>
<li>get_n_features()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a26342a8cc8b943f099112040aa960ae6">svm_classifier::DataConverter</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a780afcb2ad618e46541aff8a44e9c7b4">svm_classifier::SVMClassifier</a></li>
<li>get_n_samples()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a16999ded27bc2d42d2ebd9551b00c1cb">svm_classifier::DataConverter</a></li>
<li>get_parameters()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a7c39ec09b15186dcb4f04ae7171d23bb">svm_classifier::SVMClassifier</a></li>
<li>get_sparse_threshold()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a1905f60fef9ffd3a8e8e45e41395352d">svm_classifier::DataConverter</a></li>
<li>get_strategy_type()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a31a0501fa1a6db1d41cbf825b2348e47">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#aae80b4e75459b2aca4f561d62c3c5675">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#af9e1bd6d08ce3e7afd5279c835ce6cfb">svm_classifier::OneVsRestStrategy</a></li>
<li>get_svm_library()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a38173e5cf0f6a4620f032fd54c28d592">svm_classifier::SVMClassifier</a></li>
<li>get_training_metrics()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a0b8c77f81d84489b2da0d080773a2970">svm_classifier::SVMClassifier</a></li>
<li>grid_search()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#afed66a704dfb38cc7d080d3337d10194">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
<li>is_fitted()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a71a85ab7893e7e2b40763db34096d8bb">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_l" name="index_l"></a>- l -</h3><ul>
<li>load_model()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a583f5743acf5e6b850e079b9190989f1">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
<li>OneVsOneStrategy()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a6d4b060383169010dda4197a0bffa020">svm_classifier::OneVsOneStrategy</a></li>
<li>OneVsRestStrategy()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a30f146a564a9c9681524593cacbb43e7">svm_classifier::OneVsRestStrategy</a></li>
<li>operator=()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a209902805c75e8f22c55575adfedc7be">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
<li>predict()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a70f94cfcf8b2bf6d60133c688fe55f9d">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#ab60df2d9b6069a73369b0bf9d3675662">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a771903a821d5380ddd5d0b3a912e7df9">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a5c998d5574b3b6afe003b23ed02ed1d1">svm_classifier::SVMClassifier</a></li>
<li>predict_proba()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ab5348ee3b83547702ec7903ee7ee2da7">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#ae62e8b24115042d1119e76f3302f6992">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a55639e5adaadcd6414b50d5ebf0d1cd2">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ab4ef3c839e085ece646cdd2501a51f67">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
<li>reset()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#aa2bd5715c9e54e3fb465a9bcbf2e9c8a">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
<li>save_model()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#ab8a0bd35705825e80a7567b576d47359">svm_classifier::SVMClassifier</a></li>
<li>score()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a0479c57489c14be4a5ca79368086f7f6">svm_classifier::SVMClassifier</a></li>
<li>set_parameters()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#adb01e761fea07c709f3a0e315d3d0e06">svm_classifier::SVMClassifier</a></li>
<li>set_sparse_threshold()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a9259322e54d2477478a684e99d8e557a">svm_classifier::DataConverter</a></li>
<li>supports_probability()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a2ab91902f8d6eb216f626ce9ea4be992">svm_classifier::MulticlassStrategyBase</a>, <a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#a8875d29cb8666af10e0fb5634e08c0c1">svm_classifier::OneVsOneStrategy</a>, <a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#a200300198628ac119eac09e62ff62336">svm_classifier::OneVsRestStrategy</a>, <a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a3f8b4e932f075b267507ad77a499a135">svm_classifier::SVMClassifier</a></li>
<li>SVMClassifier()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a3ed45cdbc3fc5d947320177f42115dcf">svm_classifier::SVMClassifier</a></li>
</ul>
<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
<li>to_feature_node()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a6bb2b4565b27df0db5f229dbd380795e">svm_classifier::DataConverter</a></li>
<li>to_linear_problem()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a7e7d8f6102b7a9b3256ff0dc6f536a35">svm_classifier::DataConverter</a></li>
<li>to_svm_node()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a16e1539ef1266ca9ddd27a2ac5a53b92">svm_classifier::DataConverter</a></li>
<li>to_svm_problem()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#a66f446e4decfe47bbba37c789f03f729">svm_classifier::DataConverter</a></li>
</ul>
<h3><a id="index_v" name="index_v"></a>- v -</h3><ul>
<li>validate_tensors()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce">svm_classifier::DataConverter</a></li>
</ul>
<h3><a id="index__7E" name="index__7E"></a>- ~ -</h3><ul>
<li>~DataConverter()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d">svm_classifier::DataConverter</a></li>
<li>~MulticlassStrategyBase()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8a5647dd57eed281288f0c9011b11395">svm_classifier::MulticlassStrategyBase</a></li>
<li>~OneVsOneStrategy()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html#af9a653b62502e296d0d18092be56344f">svm_classifier::OneVsOneStrategy</a></li>
<li>~OneVsRestStrategy()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html#acfd698dd6cc0a988ac642a00d1f0b970">svm_classifier::OneVsRestStrategy</a></li>
<li>~SVMClassifier()&#160;:&#160;<a class="el" href="classsvm__classifier_1_1SVMClassifier.html#a233584f6696969ce1a402624fd046146">svm_classifier::SVMClassifier</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

96
functions_vars.html Normal file
View File

@@ -0,0 +1,96 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Class Members - Variables</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="contents">
<div class="textblock">Here is a list of all documented variables with links to the class documentation for each member:</div><ul>
<li>accuracy&#160;:&#160;<a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html#abe60e87c99b8b3c4499e602d8c26847a">svm_classifier::EvaluationMetrics</a></li>
<li>classes_&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">svm_classifier::MulticlassStrategyBase</a></li>
<li>confusion_matrix&#160;:&#160;<a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html#a843fbb476ae6bf24d7f72dabc3ef334a">svm_classifier::EvaluationMetrics</a></li>
<li>decision_values&#160;:&#160;<a class="el" href="structsvm__classifier_1_1PredictionResult.html#a1ba501fdd3da8d3c4b99285b2f71c1d9">svm_classifier::PredictionResult</a></li>
<li>f1_score&#160;:&#160;<a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html#a0eca4a2bc01318bb641f384abd0a47bc">svm_classifier::EvaluationMetrics</a></li>
<li>has_probabilities&#160;:&#160;<a class="el" href="structsvm__classifier_1_1PredictionResult.html#aeb863c05f5761ba1925166b73e3f4da6">svm_classifier::PredictionResult</a></li>
<li>is_trained_&#160;:&#160;<a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8e74cd580feaac0da34d204274a24fea">svm_classifier::MulticlassStrategyBase</a></li>
<li>iterations&#160;:&#160;<a class="el" href="structsvm__classifier_1_1TrainingMetrics.html#a7ad692cf23590fe1be348902031bbc5a">svm_classifier::TrainingMetrics</a></li>
<li>objective_value&#160;:&#160;<a class="el" href="structsvm__classifier_1_1TrainingMetrics.html#a1b41ef88d2dfb85b7f587292e6b83b7f">svm_classifier::TrainingMetrics</a></li>
<li>precision&#160;:&#160;<a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html#ad2ee81c9b36abcfb04598110402c242f">svm_classifier::EvaluationMetrics</a></li>
<li>predictions&#160;:&#160;<a class="el" href="structsvm__classifier_1_1PredictionResult.html#a1a3e5f634777de08f2e6cd71ee4e8891">svm_classifier::PredictionResult</a></li>
<li>probabilities&#160;:&#160;<a class="el" href="structsvm__classifier_1_1PredictionResult.html#a22d86775346acc5545affd204eba47fd">svm_classifier::PredictionResult</a></li>
<li>recall&#160;:&#160;<a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html#a78b1a0c50c4722bf73941a64e3a15e8f">svm_classifier::EvaluationMetrics</a></li>
<li>support_vectors&#160;:&#160;<a class="el" href="structsvm__classifier_1_1TrainingMetrics.html#a3963a55a5d40a0e25d8ce94a5b81a227">svm_classifier::TrainingMetrics</a></li>
<li>training_time&#160;:&#160;<a class="el" href="structsvm__classifier_1_1TrainingMetrics.html#af8eee57134f3fe0fab23b60fe33cb4de">svm_classifier::TrainingMetrics</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

142
graph_legend.html Normal file
View File

@@ -0,0 +1,142 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Graph Legend</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">Graph Legend</div></div>
</div><!--header-->
<div class="contents">
<p>This page explains how to interpret the graphs that are generated by doxygen.</p>
<p>Consider the following example: </p><div class="fragment"><div class="line"><span class="comment">/*! Invisible class because of truncation */</span></div>
<div class="line"><span class="keyword">class </span>Invisible { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Truncated class, inheritance relation is hidden */</span></div>
<div class="line"><span class="keyword">class </span>Truncated : <span class="keyword">public</span> Invisible { };</div>
<div class="line"> </div>
<div class="line"><span class="comment">/* Class not documented with doxygen comments */</span></div>
<div class="line"><span class="keyword">class </span>Undocumented { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Class that is inherited using public inheritance */</span></div>
<div class="line"><span class="keyword">class </span>PublicBase : <span class="keyword">public</span> Truncated { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! A template class */</span></div>
<div class="line"><span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span>Templ { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Class that is inherited using protected inheritance */</span></div>
<div class="line"><span class="keyword">class </span>ProtectedBase { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Class that is inherited using private inheritance */</span></div>
<div class="line"><span class="keyword">class </span>PrivateBase { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Class that is used by the Inherited class */</span></div>
<div class="line"><span class="keyword">class </span>Used { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Super class that inherits a number of other classes */</span></div>
<div class="line"><span class="keyword">class </span>Inherited : <span class="keyword">public</span> PublicBase,</div>
<div class="line"> <span class="keyword">protected</span> ProtectedBase,</div>
<div class="line"> <span class="keyword">private</span> PrivateBase,</div>
<div class="line"> <span class="keyword">public</span> Undocumented,</div>
<div class="line"> <span class="keyword">public</span> Templ&lt;int&gt;</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">private</span>:</div>
<div class="line"> Used *m_usedClass;</div>
<div class="line">};</div>
</div><!-- fragment --><p> This will result in the following graph:</p>
<center><img src="graph_legend.png" alt="" class="inline"/></center><p>The boxes in the above graph have the following meaning: </p>
<ul>
<li>
A filled gray box represents the struct or class for which the graph is generated. </li>
<li>
A box with a black border denotes a documented struct or class. </li>
<li>
A box with a gray border denotes an undocumented struct or class. </li>
<li>
A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
</ul>
<p>The arrows have the following meaning: </p>
<ul>
<li>
A blue arrow is used to visualize a public inheritance relation between two classes. </li>
<li>
A dark green arrow is used for protected inheritance. </li>
<li>
A dark red arrow is used for private inheritance. </li>
<li>
A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible. </li>
<li>
A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance. </li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

1
graph_legend.md5 Normal file
View File

@@ -0,0 +1 @@
f74606a252eb303675caf37987d0b7af

BIN
graph_legend.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

96
hierarchy.html Normal file
View File

@@ -0,0 +1,96 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Class Hierarchy</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">Class Hierarchy</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock">
<p><a href="inherits.html">Go to the graphical class hierarchy</a></p>
This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classsvm__classifier_1_1DataConverter.html" target="_self">svm_classifier::DataConverter</a></td><td class="desc">Data converter between libtorch tensors and SVM library formats </td></tr>
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsvm__classifier_1_1EvaluationMetrics.html" target="_self">svm_classifier::EvaluationMetrics</a></td><td class="desc">Model evaluation metrics </td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classsvm__classifier_1_1MulticlassStrategyBase.html" target="_self">svm_classifier::MulticlassStrategyBase</a></td><td class="desc">Abstract base class for multiclass classification strategies </td></tr>
<tr id="row_2_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classsvm__classifier_1_1OneVsOneStrategy.html" target="_self">svm_classifier::OneVsOneStrategy</a></td><td class="desc">One-vs-One (OvO) multiclass strategy </td></tr>
<tr id="row_2_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classsvm__classifier_1_1OneVsRestStrategy.html" target="_self">svm_classifier::OneVsRestStrategy</a></td><td class="desc">One-vs-Rest (OvR) multiclass strategy </td></tr>
<tr id="row_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsvm__classifier_1_1PredictionResult.html" target="_self">svm_classifier::PredictionResult</a></td><td class="desc">Prediction result structure </td></tr>
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classsvm__classifier_1_1SVMClassifier.html" target="_self">svm_classifier::SVMClassifier</a></td><td class="desc">Support Vector Machine Classifier with scikit-learn compatible API </td></tr>
<tr id="row_5_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsvm__classifier_1_1TrainingMetrics.html" target="_self">svm_classifier::TrainingMetrics</a></td><td class="desc">Training metrics structure </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

324
index.html Normal file
View File

@@ -0,0 +1,324 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: SVM Classifier C++</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">SVM Classifier C++ </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><a class="anchor" id="md_README"></a> A high-performance Support Vector Machine classifier implementation in C++ with a scikit-learn compatible API. This library provides a unified interface for SVM classification using both liblinear (for linear kernels) and libsvm (for non-linear kernels), with support for multiclass classification and PyTorch tensor integration.</p>
<h1>Features</h1>
<ul>
<li><b>🚀 Scikit-learn Compatible API</b>: Familiar <code>fit()</code>, <code>predict()</code>, <code>predict_proba()</code>, <code>score()</code> methods</li>
<li><b>🔧 Multiple Kernels</b>: Linear, RBF, Polynomial, and Sigmoid kernels</li>
<li><b>📊 Multiclass Support</b>: One-vs-Rest (OvR) and One-vs-One (OvO) strategies</li>
<li><b>⚡ Automatic Library Selection</b>: Uses liblinear for linear kernels, libsvm for others</li>
<li><b>🔗 PyTorch Integration</b>: Native support for libtorch tensors</li>
<li><b>⚙️ JSON Configuration</b>: Easy parameter management with nlohmann::json</li>
<li><b>🧪 Comprehensive Testing</b>: 100% test coverage with Catch2</li>
<li><b>📈 Performance Metrics</b>: Detailed evaluation and training metrics</li>
<li><b>🔍 Cross-Validation</b>: Built-in k-fold cross-validation support</li>
<li><b>🎯 Grid Search</b>: Hyperparameter optimization capabilities</li>
</ul>
<h1>Quick Start</h1>
<h2>Prerequisites</h2>
<ul>
<li>C++17 or later</li>
<li>CMake 3.15+</li>
<li>libtorch</li>
<li>Git</li>
</ul>
<h2>Building</h2>
<div class="fragment"><div class="line">git clone &lt;repository-url&gt;</div>
<div class="line">cd svm_classifier</div>
<div class="line">mkdir build &amp;&amp; cd build</div>
<div class="line">cmake ..</div>
<div class="line">make -j$(nproc)</div>
</div><!-- fragment --><h2>Basic Usage</h2>
<div class="fragment"><div class="line"><span class="preprocessor">#include &lt;svm_classifier/svm_classifier.hpp&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;torch/torch.h&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">using namespace </span>svm_classifier;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Create sample data</span></div>
<div class="line"><span class="keyword">auto</span> X = torch::randn({100, 2}); <span class="comment">// 100 samples, 2 features</span></div>
<div class="line"><span class="keyword">auto</span> y = torch::randint(0, 3, {100}); <span class="comment">// 3 classes</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Create and train SVM</span></div>
<div class="line"><a class="code hl_class" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> svm(KernelType::RBF, 1.0);</div>
<div class="line"><span class="keyword">auto</span> metrics = svm.fit(X, y);</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Make predictions</span></div>
<div class="line"><span class="keyword">auto</span> predictions = svm.predict(X);</div>
<div class="line"><span class="keyword">auto</span> probabilities = svm.predict_proba(X);</div>
<div class="line"><span class="keywordtype">double</span> accuracy = svm.score(X, y);</div>
<div class="ttc" id="aclasssvm__classifier_1_1SVMClassifier_html"><div class="ttname"><a href="classsvm__classifier_1_1SVMClassifier.html">svm_classifier::SVMClassifier</a></div><div class="ttdoc">Support Vector Machine Classifier with scikit-learn compatible API.</div><div class="ttdef"><b>Definition</b> <a href="svm__classifier_8hpp_source.html#l00021">svm_classifier.hpp:21</a></div></div>
</div><!-- fragment --><h2>JSON Configuration</h2>
<div class="fragment"><div class="line"><span class="preprocessor">#include &lt;nlohmann/json.hpp&gt;</span></div>
<div class="line"> </div>
<div class="line">nlohmann::json config = {</div>
<div class="line"> {<span class="stringliteral">&quot;kernel&quot;</span>, <span class="stringliteral">&quot;rbf&quot;</span>},</div>
<div class="line"> {<span class="stringliteral">&quot;C&quot;</span>, 10.0},</div>
<div class="line"> {<span class="stringliteral">&quot;gamma&quot;</span>, 0.1},</div>
<div class="line"> {<span class="stringliteral">&quot;multiclass_strategy&quot;</span>, <span class="stringliteral">&quot;ovo&quot;</span>},</div>
<div class="line"> {<span class="stringliteral">&quot;probability&quot;</span>, <span class="keyword">true</span>}</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><a class="code hl_class" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> svm(config);</div>
</div><!-- fragment --><h1>API Reference</h1>
<h2>Constructor Options</h2>
<div class="fragment"><div class="line"><span class="comment">// Default constructor</span></div>
<div class="line"><a class="code hl_class" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> svm;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// With explicit parameters</span></div>
<div class="line"><a class="code hl_class" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> svm(KernelType::RBF, 1.0, MulticlassStrategy::ONE_VS_REST);</div>
<div class="line"> </div>
<div class="line"><span class="comment">// From JSON configuration</span></div>
<div class="line"><a class="code hl_class" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> svm(config_json);</div>
</div><!-- fragment --><h2>Core Methods</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Method </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Returns </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>fit(X, y)</code> </td><td class="markdownTableBodyNone">Train the classifier </td><td class="markdownTableBodyNone"><code>TrainingMetrics</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>predict(X)</code> </td><td class="markdownTableBodyNone">Predict class labels </td><td class="markdownTableBodyNone"><code>torch::Tensor</code> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>predict_proba(X)</code> </td><td class="markdownTableBodyNone">Predict class probabilities </td><td class="markdownTableBodyNone"><code>torch::Tensor</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>score(X, y)</code> </td><td class="markdownTableBodyNone">Calculate accuracy </td><td class="markdownTableBodyNone"><code>double</code> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>decision_function(X)</code> </td><td class="markdownTableBodyNone">Get decision values </td><td class="markdownTableBodyNone"><code>torch::Tensor</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>cross_validate(X, y, cv)</code> </td><td class="markdownTableBodyNone">K-fold cross-validation </td><td class="markdownTableBodyNone"><code>std::vector&lt;double&gt;</code> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>grid_search(X, y, grid, cv)</code> </td><td class="markdownTableBodyNone">Hyperparameter tuning </td><td class="markdownTableBodyNone"><code>nlohmann::json</code> </td></tr>
</table>
<h2>Parameter Configuration</h2>
<h3>Common Parameters</h3>
<ul>
<li><b>kernel</b>: <code>"linear"</code>, <code>"rbf"</code>, <code>"polynomial"</code>, <code>"sigmoid"</code></li>
<li><b>C</b>: Regularization parameter (default: 1.0)</li>
<li><b>multiclass_strategy</b>: <code>"ovr"</code> (One-vs-Rest) or <code>"ovo"</code> (One-vs-One)</li>
<li><b>probability</b>: Enable probability estimates (default: false)</li>
<li><b>tolerance</b>: Convergence tolerance (default: 1e-3)</li>
</ul>
<h3>Kernel-Specific Parameters</h3>
<ul>
<li><b>RBF/Polynomial/Sigmoid</b>: <code>gamma</code> (default: auto)</li>
<li><b>Polynomial</b>: <code>degree</code> (default: 3), <code>coef0</code> (default: 0.0)</li>
<li><b>Sigmoid</b>: <code>coef0</code> (default: 0.0)</li>
</ul>
<h1>Examples</h1>
<h2>Multi-class Classification</h2>
<div class="fragment"><div class="line"><span class="comment">// Generate multi-class dataset</span></div>
<div class="line"><span class="keyword">auto</span> X = torch::randn({300, 4});</div>
<div class="line"><span class="keyword">auto</span> y = torch::randint(0, 5, {300}); <span class="comment">// 5 classes</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Configure for multi-class</span></div>
<div class="line">nlohmann::json config = {</div>
<div class="line"> {<span class="stringliteral">&quot;kernel&quot;</span>, <span class="stringliteral">&quot;rbf&quot;</span>},</div>
<div class="line"> {<span class="stringliteral">&quot;C&quot;</span>, 1.0},</div>
<div class="line"> {<span class="stringliteral">&quot;gamma&quot;</span>, 0.1},</div>
<div class="line"> {<span class="stringliteral">&quot;multiclass_strategy&quot;</span>, <span class="stringliteral">&quot;ovo&quot;</span>},</div>
<div class="line"> {<span class="stringliteral">&quot;probability&quot;</span>, <span class="keyword">true</span>}</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><a class="code hl_class" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> svm(config);</div>
<div class="line"><span class="keyword">auto</span> metrics = svm.<a class="code hl_function" href="classsvm__classifier_1_1SVMClassifier.html#a7e6648c4d2bac92bb00381076ea92db3">fit</a>(X, y);</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Evaluate</span></div>
<div class="line"><span class="keyword">auto</span> eval_metrics = svm.<a class="code hl_function" href="classsvm__classifier_1_1SVMClassifier.html#a38a9b020b9f4f9254920c97a3a047e9b">evaluate</a>(X, y);</div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;Accuracy: &quot;</span> &lt;&lt; eval_metrics.<a class="code hl_variable" href="structsvm__classifier_1_1EvaluationMetrics.html#abe60e87c99b8b3c4499e602d8c26847a">accuracy</a> &lt;&lt; std::endl;</div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;F1-Score: &quot;</span> &lt;&lt; eval_metrics.f1_score &lt;&lt; std::endl;</div>
<div class="ttc" id="aclasssvm__classifier_1_1SVMClassifier_html_a38a9b020b9f4f9254920c97a3a047e9b"><div class="ttname"><a href="classsvm__classifier_1_1SVMClassifier.html#a38a9b020b9f4f9254920c97a3a047e9b">svm_classifier::SVMClassifier::evaluate</a></div><div class="ttdeci">EvaluationMetrics evaluate(const torch::Tensor &amp;X, const torch::Tensor &amp;y_true)</div><div class="ttdoc">Calculate detailed evaluation metrics.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1SVMClassifier_html_a7e6648c4d2bac92bb00381076ea92db3"><div class="ttname"><a href="classsvm__classifier_1_1SVMClassifier.html#a7e6648c4d2bac92bb00381076ea92db3">svm_classifier::SVMClassifier::fit</a></div><div class="ttdeci">TrainingMetrics fit(const torch::Tensor &amp;X, const torch::Tensor &amp;y)</div><div class="ttdoc">Train the SVM classifier.</div></div>
<div class="ttc" id="astructsvm__classifier_1_1EvaluationMetrics_html_abe60e87c99b8b3c4499e602d8c26847a"><div class="ttname"><a href="structsvm__classifier_1_1EvaluationMetrics.html#abe60e87c99b8b3c4499e602d8c26847a">svm_classifier::EvaluationMetrics::accuracy</a></div><div class="ttdeci">double accuracy</div><div class="ttdoc">Classification accuracy.</div><div class="ttdef"><b>Definition</b> <a href="types_8hpp_source.html#l00071">types.hpp:71</a></div></div>
</div><!-- fragment --><h2>Cross-Validation</h2>
<div class="fragment"><div class="line"><a class="code hl_class" href="classsvm__classifier_1_1SVMClassifier.html">SVMClassifier</a> svm(KernelType::RBF);</div>
<div class="line"><span class="keyword">auto</span> cv_scores = svm.<a class="code hl_function" href="classsvm__classifier_1_1SVMClassifier.html#a4c91072ea0d3d9b97ba458ff7d0898b8">cross_validate</a>(X, y, 5); <span class="comment">// 5-fold CV</span></div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">double</span> mean_score = 0.0;</div>
<div class="line"><span class="keywordflow">for</span> (<span class="keyword">auto</span> score : cv_scores) {</div>
<div class="line"> mean_score += score;</div>
<div class="line">}</div>
<div class="line">mean_score /= cv_scores.size();</div>
<div class="ttc" id="aclasssvm__classifier_1_1SVMClassifier_html_a4c91072ea0d3d9b97ba458ff7d0898b8"><div class="ttname"><a href="classsvm__classifier_1_1SVMClassifier.html#a4c91072ea0d3d9b97ba458ff7d0898b8">svm_classifier::SVMClassifier::cross_validate</a></div><div class="ttdeci">std::vector&lt; double &gt; cross_validate(const torch::Tensor &amp;X, const torch::Tensor &amp;y, int cv=5)</div><div class="ttdoc">Perform cross-validation.</div></div>
</div><!-- fragment --><h2>Grid Search</h2>
<div class="fragment"><div class="line">nlohmann::json param_grid = {</div>
<div class="line"> {<span class="stringliteral">&quot;C&quot;</span>, {0.1, 1.0, 10.0}},</div>
<div class="line"> {<span class="stringliteral">&quot;gamma&quot;</span>, {0.01, 0.1, 1.0}},</div>
<div class="line"> {<span class="stringliteral">&quot;kernel&quot;</span>, {<span class="stringliteral">&quot;rbf&quot;</span>, <span class="stringliteral">&quot;polynomial&quot;</span>}}</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><span class="keyword">auto</span> best_params = svm.<a class="code hl_function" href="classsvm__classifier_1_1SVMClassifier.html#afed66a704dfb38cc7d080d3337d10194">grid_search</a>(X, y, param_grid, 3);</div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;Best parameters: &quot;</span> &lt;&lt; best_params.dump(2) &lt;&lt; std::endl;</div>
<div class="ttc" id="aclasssvm__classifier_1_1SVMClassifier_html_afed66a704dfb38cc7d080d3337d10194"><div class="ttname"><a href="classsvm__classifier_1_1SVMClassifier.html#afed66a704dfb38cc7d080d3337d10194">svm_classifier::SVMClassifier::grid_search</a></div><div class="ttdeci">nlohmann::json grid_search(const torch::Tensor &amp;X, const torch::Tensor &amp;y, const nlohmann::json &amp;param_grid, int cv=5)</div><div class="ttdoc">Find optimal hyperparameters using grid search.</div></div>
</div><!-- fragment --><h1>Testing</h1>
<h2>Run All Tests</h2>
<div class="fragment"><div class="line">cd build</div>
<div class="line">make test_all</div>
</div><!-- fragment --><h2>Test Categories</h2>
<div class="fragment"><div class="line">make test_unit # Unit tests</div>
<div class="line">make test_integration # Integration tests </div>
<div class="line">make test_performance # Performance tests</div>
</div><!-- fragment --><h2>Coverage Report</h2>
<div class="fragment"><div class="line">cmake -DCMAKE_BUILD_TYPE=Debug ..</div>
<div class="line">make coverage</div>
</div><!-- fragment --><p>The coverage report will be generated in <code>build/coverage_html/index.html</code>.</p>
<h1>Project Structure</h1>
<div class="fragment"><div class="line">svm_classifier/</div>
<div class="line">├── include/svm_classifier/ # Public headers</div>
<div class="line">│ ├── svm_classifier.hpp # Main classifier interface</div>
<div class="line">│ ├── data_converter.hpp # Tensor conversion utilities</div>
<div class="line">│ ├── multiclass_strategy.hpp # Multiclass strategies</div>
<div class="line">│ ├── kernel_parameters.hpp # Parameter management</div>
<div class="line">│ └── types.hpp # Common types and enums</div>
<div class="line">├── src/ # Implementation files</div>
<div class="line">├── tests/ # Comprehensive test suite</div>
<div class="line">├── examples/ # Usage examples</div>
<div class="line">├── external/ # Third-party dependencies</div>
<div class="line">└── CMakeLists.txt # Build configuration</div>
</div><!-- fragment --><h1>Dependencies</h1>
<h2>Required</h2>
<ul>
<li><b>libtorch</b>: PyTorch C++ API for tensor operations</li>
<li><b>liblinear</b>: Linear SVM implementation</li>
<li><b>libsvm</b>: Non-linear SVM implementation</li>
<li><b>nlohmann/json</b>: JSON configuration handling</li>
</ul>
<h2>Testing</h2>
<ul>
<li><b>Catch2</b>: Testing framework</li>
</ul>
<h2>Build System</h2>
<ul>
<li><b>CMake</b>: Cross-platform build system</li>
</ul>
<h1>Performance Characteristics</h1>
<h2>Memory Usage</h2>
<ul>
<li>Efficient sparse data handling</li>
<li>Automatic memory management for SVM structures</li>
<li>Configurable cache sizes for large datasets</li>
</ul>
<h2>Speed</h2>
<ul>
<li>Linear kernels: Uses highly optimized liblinear</li>
<li>Non-linear kernels: Uses proven libsvm implementation</li>
<li>Multi-threading support via libtorch</li>
</ul>
<h2>Scalability</h2>
<ul>
<li>Handles datasets from hundreds to millions of samples</li>
<li>Memory-efficient data conversion</li>
<li>Sparse feature support</li>
</ul>
<h1>Library Selection Logic</h1>
<p>The classifier automatically selects the appropriate underlying library:</p>
<ul>
<li><b>Linear Kernel</b> → liblinear (optimized for linear classification)</li>
<li><b>RBF/Polynomial/Sigmoid</b> → libsvm (supports arbitrary kernels)</li>
</ul>
<p>This ensures optimal performance for each kernel type while maintaining a unified API.</p>
<h1>Contributing</h1>
<ol type="1">
<li>Fork the repository</li>
<li>Create a feature branch</li>
<li>Add tests for new functionality</li>
<li>Ensure all tests pass: <code>make test_all</code></li>
<li>Check code coverage: <code>make coverage</code></li>
<li>Submit a pull request</li>
</ol>
<h2>Code Style</h2>
<ul>
<li>Follow modern C++17 conventions</li>
<li>Use RAII for resource management</li>
<li>Comprehensive error handling</li>
<li>Document all public APIs</li>
</ul>
<h1>License</h1>
<p>[Specify your license here]</p>
<h1>Acknowledgments</h1>
<ul>
<li><b>libsvm</b>: Chih-Chung Chang and Chih-Jen Lin</li>
<li><b>liblinear</b>: Fan et al.</li>
<li><b>PyTorch</b>: Facebook AI Research</li>
<li><b>nlohmann/json</b>: Niels Lohmann</li>
<li><b>Catch2</b>: Phil Nash and contributors </li>
</ul>
</div></div><!-- PageDoc -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

3
inherit_graph_0.map Normal file
View File

@@ -0,0 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$classsvm__classifier_1_1DataConverter.html" title="Data converter between libtorch tensors and SVM library formats." alt="" coords="5,5,224,31"/>
</map>

1
inherit_graph_0.md5 Normal file
View File

@@ -0,0 +1 @@
2e8df4a058152ec339b955b6756e2b14

BIN
inherit_graph_0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

3
inherit_graph_1.map Normal file
View File

@@ -0,0 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$structsvm__classifier_1_1EvaluationMetrics.html" title="Model evaluation metrics." alt="" coords="5,5,197,45"/>
</map>

1
inherit_graph_1.md5 Normal file
View File

@@ -0,0 +1 @@
5f78d14619959ec8ed1a58be62b4611e

BIN
inherit_graph_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

7
inherit_graph_2.map Normal file
View File

@@ -0,0 +1,7 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$classsvm__classifier_1_1MulticlassStrategyBase.html" title="Abstract base class for multiclass classification strategies." alt="" coords="5,37,195,77"/>
<area shape="rect" id="Node000001" href="$classsvm__classifier_1_1OneVsOneStrategy.html" title="One&#45;vs&#45;One (OvO) multiclass strategy." alt="" coords="245,5,435,45"/>
<area shape="poly" id="edge1_Node000000_Node000001" title=" " alt="" coords="208,40,244,35,245,41,209,46"/>
<area shape="rect" id="Node000002" href="$classsvm__classifier_1_1OneVsRestStrategy.html" title="One&#45;vs&#45;Rest (OvR) multiclass strategy." alt="" coords="243,69,437,109"/>
<area shape="poly" id="edge2_Node000000_Node000002" title=" " alt="" coords="209,69,243,74,242,79,208,74"/>
</map>

1
inherit_graph_2.md5 Normal file
View File

@@ -0,0 +1 @@
8a7b17b3fadc2ef6f3911678ccf5b08d

BIN
inherit_graph_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

3
inherit_graph_3.map Normal file
View File

@@ -0,0 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$structsvm__classifier_1_1PredictionResult.html" title="Prediction result structure." alt="" coords="5,5,193,45"/>
</map>

1
inherit_graph_3.md5 Normal file
View File

@@ -0,0 +1 @@
bb7e66c7bf0f7d1f1b765560fe9d8d09

BIN
inherit_graph_3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

3
inherit_graph_4.map Normal file
View File

@@ -0,0 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$classsvm__classifier_1_1SVMClassifier.html" title="Support Vector Machine Classifier with scikit&#45;learn compatible API." alt="" coords="5,5,217,31"/>
</map>

1
inherit_graph_4.md5 Normal file
View File

@@ -0,0 +1 @@
666715255347d0578141c5a73142eaf0

BIN
inherit_graph_4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

3
inherit_graph_5.map Normal file
View File

@@ -0,0 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$structsvm__classifier_1_1TrainingMetrics.html" title="Training metrics structure." alt="" coords="5,5,180,45"/>
</map>

1
inherit_graph_5.md5 Normal file
View File

@@ -0,0 +1 @@
5cfab252f5cdcaa54e79ae7b0e323201

BIN
inherit_graph_5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

120
inherits.html Normal file
View File

@@ -0,0 +1,120 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: Class Hierarchy</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">Class Hierarchy</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock">
<p><a href="hierarchy.html">Go to the textual class hierarchy</a></p>
</div><table border="0" cellspacing="10" cellpadding="0">
<tr><td><img src="inherit_graph_0.png" border="0" usemap="#asvm__classifier_1_1DataConverter" alt=""/>
<map name="asvm__classifier_1_1DataConverter" id="asvm__classifier_1_1DataConverter">
<area shape="rect" href="classsvm__classifier_1_1DataConverter.html" title="Data converter between libtorch tensors and SVM library formats." alt="" coords="5,5,224,31"/>
</map>
</td></tr>
<tr><td><img src="inherit_graph_1.png" border="0" usemap="#asvm__classifier_1_1EvaluationMetrics" alt=""/>
<map name="asvm__classifier_1_1EvaluationMetrics" id="asvm__classifier_1_1EvaluationMetrics">
<area shape="rect" href="structsvm__classifier_1_1EvaluationMetrics.html" title="Model evaluation metrics." alt="" coords="5,5,197,45"/>
</map>
</td></tr>
<tr><td><img src="inherit_graph_2.png" border="0" usemap="#asvm__classifier_1_1MulticlassStrategyBase" alt=""/>
<map name="asvm__classifier_1_1MulticlassStrategyBase" id="asvm__classifier_1_1MulticlassStrategyBase">
<area shape="rect" href="classsvm__classifier_1_1MulticlassStrategyBase.html" title="Abstract base class for multiclass classification strategies." alt="" coords="5,37,195,77"/>
<area shape="rect" href="classsvm__classifier_1_1OneVsOneStrategy.html" title="One&#45;vs&#45;One (OvO) multiclass strategy." alt="" coords="245,5,435,45"/>
<area shape="poly" title=" " alt="" coords="208,40,244,35,245,41,209,46"/>
<area shape="rect" href="classsvm__classifier_1_1OneVsRestStrategy.html" title="One&#45;vs&#45;Rest (OvR) multiclass strategy." alt="" coords="243,69,437,109"/>
<area shape="poly" title=" " alt="" coords="209,69,243,74,242,79,208,74"/>
</map>
</td></tr>
<tr><td><img src="inherit_graph_3.png" border="0" usemap="#asvm__classifier_1_1PredictionResult" alt=""/>
<map name="asvm__classifier_1_1PredictionResult" id="asvm__classifier_1_1PredictionResult">
<area shape="rect" href="structsvm__classifier_1_1PredictionResult.html" title="Prediction result structure." alt="" coords="5,5,193,45"/>
</map>
</td></tr>
<tr><td><img src="inherit_graph_4.png" border="0" usemap="#asvm__classifier_1_1SVMClassifier" alt=""/>
<map name="asvm__classifier_1_1SVMClassifier" id="asvm__classifier_1_1SVMClassifier">
<area shape="rect" href="classsvm__classifier_1_1SVMClassifier.html" title="Support Vector Machine Classifier with scikit&#45;learn compatible API." alt="" coords="5,5,217,31"/>
</map>
</td></tr>
<tr><td><img src="inherit_graph_5.png" border="0" usemap="#asvm__classifier_1_1TrainingMetrics" alt=""/>
<map name="asvm__classifier_1_1TrainingMetrics" id="asvm__classifier_1_1TrainingMetrics">
<area shape="rect" href="structsvm__classifier_1_1TrainingMetrics.html" title="Training metrics structure." alt="" coords="5,5,180,45"/>
</map>
</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

34
jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,439 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: src/kernel_parameters.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">kernel_parameters.cpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;svm_classifier/kernel_parameters.hpp&quot;</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &lt;cmath&gt;</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="keyword">namespace </span>svm_classifier {</div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> KernelParameters::KernelParameters()</div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> : kernel_type_(KernelType::LINEAR)</div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> , multiclass_strategy_(MulticlassStrategy::ONE_VS_REST)</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> , C_(1.0)</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> , tolerance_(1e-3)</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> , max_iterations_(-1)</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> , probability_(false)</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> , gamma_(-1.0) <span class="comment">// Auto gamma</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> , degree_(3)</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> , coef0_(0.0)</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> , cache_size_(200.0)</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> {</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> }</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> KernelParameters::KernelParameters(<span class="keyword">const</span> nlohmann::json&amp; config) : KernelParameters()</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> {</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> set_parameters(config);</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> }</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordtype">void</span> KernelParameters::set_parameters(<span class="keyword">const</span> nlohmann::json&amp; config)</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> {</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="comment">// Set kernel type first as it affects validation</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keywordflow">if</span> (config.contains(<span class="stringliteral">&quot;kernel&quot;</span>)) {</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordflow">if</span> (config[<span class="stringliteral">&quot;kernel&quot;</span>].is_string()) {</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> set_kernel_type(string_to_kernel_type(config[<span class="stringliteral">&quot;kernel&quot;</span>]));</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Kernel must be a string&quot;</span>);</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> }</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> }</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="comment">// Set multiclass strategy</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">if</span> (config.contains(<span class="stringliteral">&quot;multiclass_strategy&quot;</span>)) {</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">if</span> (config[<span class="stringliteral">&quot;multiclass_strategy&quot;</span>].is_string()) {</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> set_multiclass_strategy(string_to_multiclass_strategy(config[<span class="stringliteral">&quot;multiclass_strategy&quot;</span>]));</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Multiclass strategy must be a string&quot;</span>);</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> }</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> }</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="comment">// Set common parameters</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">if</span> (config.contains(<span class="stringliteral">&quot;C&quot;</span>)) {</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">if</span> (config[<span class="stringliteral">&quot;C&quot;</span>].is_number()) {</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> set_C(config[<span class="stringliteral">&quot;C&quot;</span>]);</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;C must be a number&quot;</span>);</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> }</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> }</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">if</span> (config.contains(<span class="stringliteral">&quot;tolerance&quot;</span>)) {</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">if</span> (config[<span class="stringliteral">&quot;tolerance&quot;</span>].is_number()) {</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> set_tolerance(config[<span class="stringliteral">&quot;tolerance&quot;</span>]);</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Tolerance must be a number&quot;</span>);</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> }</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> }</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">if</span> (config.contains(<span class="stringliteral">&quot;max_iterations&quot;</span>)) {</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">if</span> (config[<span class="stringliteral">&quot;max_iterations&quot;</span>].is_number_integer()) {</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> set_max_iterations(config[<span class="stringliteral">&quot;max_iterations&quot;</span>]);</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Max iterations must be an integer&quot;</span>);</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> }</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> }</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span> (config.contains(<span class="stringliteral">&quot;probability&quot;</span>)) {</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">if</span> (config[<span class="stringliteral">&quot;probability&quot;</span>].is_boolean()) {</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> set_probability(config[<span class="stringliteral">&quot;probability&quot;</span>]);</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Probability must be a boolean&quot;</span>);</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> }</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> }</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="comment">// Set kernel-specific parameters</span></div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">if</span> (config.contains(<span class="stringliteral">&quot;gamma&quot;</span>)) {</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">if</span> (config[<span class="stringliteral">&quot;gamma&quot;</span>].is_number()) {</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> set_gamma(config[<span class="stringliteral">&quot;gamma&quot;</span>]);</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (config[<span class="stringliteral">&quot;gamma&quot;</span>].is_string() &amp;&amp; config[<span class="stringliteral">&quot;gamma&quot;</span>] == <span class="stringliteral">&quot;auto&quot;</span>) {</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> set_gamma(-1.0); <span class="comment">// Auto gamma</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Gamma must be a number or &#39;auto&#39;&quot;</span>);</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> }</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span> (config.contains(<span class="stringliteral">&quot;degree&quot;</span>)) {</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span> (config[<span class="stringliteral">&quot;degree&quot;</span>].is_number_integer()) {</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> set_degree(config[<span class="stringliteral">&quot;degree&quot;</span>]);</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Degree must be an integer&quot;</span>);</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> }</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> }</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">if</span> (config.contains(<span class="stringliteral">&quot;coef0&quot;</span>)) {</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">if</span> (config[<span class="stringliteral">&quot;coef0&quot;</span>].is_number()) {</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> set_coef0(config[<span class="stringliteral">&quot;coef0&quot;</span>]);</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Coef0 must be a number&quot;</span>);</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> }</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> }</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">if</span> (config.contains(<span class="stringliteral">&quot;cache_size&quot;</span>)) {</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</span> (config[<span class="stringliteral">&quot;cache_size&quot;</span>].is_number()) {</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> set_cache_size(config[<span class="stringliteral">&quot;cache_size&quot;</span>]);</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Cache size must be a number&quot;</span>);</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> }</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> }</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// Validate all parameters</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> validate();</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> }</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> nlohmann::json KernelParameters::get_parameters()<span class="keyword"> const</span></div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> nlohmann::json params = {</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> {<span class="stringliteral">&quot;kernel&quot;</span>, kernel_type_to_string(kernel_type_)},</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> {<span class="stringliteral">&quot;multiclass_strategy&quot;</span>, multiclass_strategy_to_string(multiclass_strategy_)},</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> {<span class="stringliteral">&quot;C&quot;</span>, C_},</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> {<span class="stringliteral">&quot;tolerance&quot;</span>, tolerance_},</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> {<span class="stringliteral">&quot;max_iterations&quot;</span>, max_iterations_},</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> {<span class="stringliteral">&quot;probability&quot;</span>, probability_},</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> {<span class="stringliteral">&quot;cache_size&quot;</span>, cache_size_}</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> };</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// Add kernel-specific parameters</span></div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">switch</span> (kernel_type_) {</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">case</span> KernelType::LINEAR:</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="comment">// No additional parameters for linear kernel</span></div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">case</span> KernelType::RBF:</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> params[<span class="stringliteral">&quot;gamma&quot;</span>] = is_gamma_auto() ? <span class="stringliteral">&quot;auto&quot;</span> : gamma_;</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">case</span> KernelType::POLYNOMIAL:</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> params[<span class="stringliteral">&quot;degree&quot;</span>] = degree_;</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> params[<span class="stringliteral">&quot;gamma&quot;</span>] = is_gamma_auto() ? <span class="stringliteral">&quot;auto&quot;</span> : gamma_;</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> params[<span class="stringliteral">&quot;coef0&quot;</span>] = coef0_;</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">case</span> KernelType::SIGMOID:</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> params[<span class="stringliteral">&quot;gamma&quot;</span>] = is_gamma_auto() ? <span class="stringliteral">&quot;auto&quot;</span> : gamma_;</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> params[<span class="stringliteral">&quot;coef0&quot;</span>] = coef0_;</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> }</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">return</span> params;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> }</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">void</span> KernelParameters::set_kernel_type(KernelType kernel)</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> {</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> kernel_type_ = kernel;</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="comment">// Reset kernel-specific parameters to defaults when kernel changes</span></div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">auto</span> defaults = get_default_parameters(kernel);</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span> (defaults.contains(<span class="stringliteral">&quot;gamma&quot;</span>)) {</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> gamma_ = defaults[<span class="stringliteral">&quot;gamma&quot;</span>];</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> }</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">if</span> (defaults.contains(<span class="stringliteral">&quot;degree&quot;</span>)) {</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> degree_ = defaults[<span class="stringliteral">&quot;degree&quot;</span>];</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> }</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span> (defaults.contains(<span class="stringliteral">&quot;coef0&quot;</span>)) {</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> coef0_ = defaults[<span class="stringliteral">&quot;coef0&quot;</span>];</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> }</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> }</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keywordtype">void</span> KernelParameters::set_C(<span class="keywordtype">double</span> c)</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> {</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span> (c &lt;= 0.0) {</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;C must be positive (C &gt; 0)&quot;</span>);</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> }</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> C_ = c;</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> }</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">void</span> KernelParameters::set_gamma(<span class="keywordtype">double</span> gamma)</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> {</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="comment">// Allow negative values for auto gamma (-1.0)</span></div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">if</span> (gamma &gt; 0.0 || gamma == -1.0) {</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> gamma_ = gamma;</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Gamma must be positive or -1 for auto&quot;</span>);</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> }</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> }</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> </div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">void</span> KernelParameters::set_degree(<span class="keywordtype">int</span> degree)</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> {</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span> (degree &lt; 1) {</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Degree must be &gt;= 1&quot;</span>);</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> }</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> degree_ = degree;</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> }</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordtype">void</span> KernelParameters::set_coef0(<span class="keywordtype">double</span> coef0)</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> {</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> coef0_ = coef0;</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> }</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keywordtype">void</span> KernelParameters::set_tolerance(<span class="keywordtype">double</span> tol)</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> {</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span> (tol &lt;= 0.0) {</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Tolerance must be positive (tolerance &gt; 0)&quot;</span>);</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> }</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> tolerance_ = tol;</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> }</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> </div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keywordtype">void</span> KernelParameters::set_max_iterations(<span class="keywordtype">int</span> max_iter)</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> {</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span> (max_iter &lt;= 0 &amp;&amp; max_iter != -1) {</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Max iterations must be positive or -1 for no limit&quot;</span>);</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> }</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> max_iterations_ = max_iter;</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> }</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keywordtype">void</span> KernelParameters::set_cache_size(<span class="keywordtype">double</span> cache_size)</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> {</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">if</span> (cache_size &lt; 0.0) {</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Cache size must be non-negative&quot;</span>);</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> }</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> cache_size_ = cache_size;</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> }</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <span class="keywordtype">void</span> KernelParameters::set_probability(<span class="keywordtype">bool</span> probability)</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> {</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> probability_ = probability;</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> }</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> </div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keywordtype">void</span> KernelParameters::set_multiclass_strategy(MulticlassStrategy strategy)</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> {</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> multiclass_strategy_ = strategy;</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> }</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> </div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordtype">void</span> KernelParameters::validate()<span class="keyword"> const</span></div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="comment">// Validate common parameters</span></div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span> (C_ &lt;= 0.0) {</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;C must be positive&quot;</span>);</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> }</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">if</span> (tolerance_ &lt;= 0.0) {</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Tolerance must be positive&quot;</span>);</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> }</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> </div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">if</span> (max_iterations_ &lt;= 0 &amp;&amp; max_iterations_ != -1) {</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Max iterations must be positive or -1&quot;</span>);</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> }</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> </div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">if</span> (cache_size_ &lt; 0.0) {</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Cache size must be non-negative&quot;</span>);</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> }</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="comment">// Validate kernel-specific parameters</span></div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> validate_kernel_parameters();</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> }</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> </div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keywordtype">void</span> KernelParameters::validate_kernel_parameters()<span class="keyword"> const</span></div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">switch</span> (kernel_type_) {</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">case</span> KernelType::LINEAR:</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="comment">// Linear kernel has no additional parameters to validate</span></div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> </div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">case</span> KernelType::RBF:</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">if</span> (gamma_ &gt; 0.0 || gamma_ == -1.0) {</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="comment">// Valid gamma (positive or auto)</span></div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;RBF kernel gamma must be positive or auto (-1)&quot;</span>);</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> }</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> </div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">case</span> KernelType::POLYNOMIAL:</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span> (degree_ &lt; 1) {</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Polynomial degree must be &gt;= 1&quot;</span>);</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> }</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">if</span> (gamma_ &gt; 0.0 || gamma_ == -1.0) {</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="comment">// Valid gamma</span></div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Polynomial kernel gamma must be positive or auto (-1)&quot;</span>);</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> }</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="comment">// coef0 can be any real number</span></div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> </div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">case</span> KernelType::SIGMOID:</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">if</span> (gamma_ &gt; 0.0 || gamma_ == -1.0) {</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="comment">// Valid gamma</span></div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Sigmoid kernel gamma must be positive or auto (-1)&quot;</span>);</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> }</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="comment">// coef0 can be any real number</span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> }</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> }</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> </div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> nlohmann::json KernelParameters::get_default_parameters(KernelType kernel)</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> {</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> nlohmann::json defaults = {</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> {<span class="stringliteral">&quot;C&quot;</span>, 1.0},</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> {<span class="stringliteral">&quot;tolerance&quot;</span>, 1e-3},</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> {<span class="stringliteral">&quot;max_iterations&quot;</span>, -1},</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> {<span class="stringliteral">&quot;probability&quot;</span>, <span class="keyword">false</span>},</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> {<span class="stringliteral">&quot;multiclass_strategy&quot;</span>, <span class="stringliteral">&quot;ovr&quot;</span>},</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> {<span class="stringliteral">&quot;cache_size&quot;</span>, 200.0}</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> };</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> </div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">switch</span> (kernel) {</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">case</span> KernelType::LINEAR:</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> defaults[<span class="stringliteral">&quot;kernel&quot;</span>] = <span class="stringliteral">&quot;linear&quot;</span>;</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">case</span> KernelType::RBF:</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> defaults[<span class="stringliteral">&quot;kernel&quot;</span>] = <span class="stringliteral">&quot;rbf&quot;</span>;</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> defaults[<span class="stringliteral">&quot;gamma&quot;</span>] = -1.0; <span class="comment">// Auto gamma</span></div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> </div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">case</span> KernelType::POLYNOMIAL:</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> defaults[<span class="stringliteral">&quot;kernel&quot;</span>] = <span class="stringliteral">&quot;polynomial&quot;</span>;</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> defaults[<span class="stringliteral">&quot;degree&quot;</span>] = 3;</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> defaults[<span class="stringliteral">&quot;gamma&quot;</span>] = -1.0; <span class="comment">// Auto gamma</span></div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> defaults[<span class="stringliteral">&quot;coef0&quot;</span>] = 0.0;</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> </div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">case</span> KernelType::SIGMOID:</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> defaults[<span class="stringliteral">&quot;kernel&quot;</span>] = <span class="stringliteral">&quot;sigmoid&quot;</span>;</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> defaults[<span class="stringliteral">&quot;gamma&quot;</span>] = -1.0; <span class="comment">// Auto gamma</span></div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> defaults[<span class="stringliteral">&quot;coef0&quot;</span>] = 0.0;</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> }</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> </div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">return</span> defaults;</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> }</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> </div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keywordtype">void</span> KernelParameters::reset_to_defaults()</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> {</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keyword">auto</span> defaults = get_default_parameters(kernel_type_);</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> set_parameters(defaults);</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> }</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> </div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keywordtype">void</span> KernelParameters::set_gamma_auto()</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> {</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> gamma_ = -1.0;</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> }</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> </div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span>} <span class="comment">// namespace svm_classifier</span></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,190 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: include/svm_classifier/kernel_parameters.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_daf582bc00f2bbc6516ddb6630e28009.html">svm_classifier</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">kernel_parameters.hpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &quot;types.hpp&quot;</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;torch/torch.h&gt;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// Forward declarations for libsvm and liblinear structures</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="keyword">struct </span>svm_node;</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="keyword">struct </span>svm_problem;</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="keyword">struct </span>feature_node;</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">struct </span>problem;</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="keyword">namespace </span>svm_classifier {</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">class </span>DataConverter {</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056"> 28</a></span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056">DataConverter</a>();</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d"> 33</a></span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d">~DataConverter</a>();</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a66f446e4decfe47bbba37c789f03f729"> 41</a></span> std::unique_ptr&lt;svm_problem&gt; <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a66f446e4decfe47bbba37c789f03f729">to_svm_problem</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">const</span> torch::Tensor&amp; y = torch::Tensor());</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a7e7d8f6102b7a9b3256ff0dc6f536a35"> 50</a></span> std::unique_ptr&lt;problem&gt; <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a7e7d8f6102b7a9b3256ff0dc6f536a35">to_linear_problem</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">const</span> torch::Tensor&amp; y = torch::Tensor());</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a16e1539ef1266ca9ddd27a2ac5a53b92"> 58</a></span> svm_node* <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a16e1539ef1266ca9ddd27a2ac5a53b92">to_svm_node</a>(<span class="keyword">const</span> torch::Tensor&amp; sample);</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a6bb2b4565b27df0db5f229dbd380795e"> 65</a></span> feature_node* <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a6bb2b4565b27df0db5f229dbd380795e">to_feature_node</a>(<span class="keyword">const</span> torch::Tensor&amp; sample);</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741"> 72</a></span> torch::Tensor <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741">from_predictions</a>(<span class="keyword">const</span> std::vector&lt;double&gt;&amp; predictions);</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff"> 79</a></span> torch::Tensor <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff">from_probabilities</a>(<span class="keyword">const</span> std::vector&lt;std::vector&lt;double&gt;&gt;&amp; probabilities);</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f"> 86</a></span> torch::Tensor <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f">from_decision_values</a>(<span class="keyword">const</span> std::vector&lt;std::vector&lt;double&gt;&gt;&amp; decision_values);</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce"> 94</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce">validate_tensors</a>(<span class="keyword">const</span> torch::Tensor&amp; X, <span class="keyword">const</span> torch::Tensor&amp; y = torch::Tensor());</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a26342a8cc8b943f099112040aa960ae6"> 100</a></span> <span class="keywordtype">int</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a26342a8cc8b943f099112040aa960ae6">get_n_features</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> n_features_; }</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a16999ded27bc2d42d2ebd9551b00c1cb"> 106</a></span> <span class="keywordtype">int</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a16999ded27bc2d42d2ebd9551b00c1cb">get_n_samples</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> n_samples_; }</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8"> 111</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8">cleanup</a>();</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a9259322e54d2477478a684e99d8e557a"> 117</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a9259322e54d2477478a684e99d8e557a">set_sparse_threshold</a>(<span class="keywordtype">double</span> threshold) { sparse_threshold_ = threshold; }</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1DataConverter.html#a1905f60fef9ffd3a8e8e45e41395352d"> 123</a></span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsvm__classifier_1_1DataConverter.html#a1905f60fef9ffd3a8e8e45e41395352d">get_sparse_threshold</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> sparse_threshold_; }</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">int</span> n_features_; </div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">int</span> n_samples_; </div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">double</span> sparse_threshold_; </div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// Memory management for libsvm structures</span></div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> std::vector&lt;std::vector&lt;svm_node&gt;&gt; svm_nodes_storage_;</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> std::vector&lt;svm_node*&gt; svm_x_space_;</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> std::vector&lt;double&gt; svm_y_space_;</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="comment">// Memory management for liblinear structures</span></div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> std::vector&lt;std::vector&lt;feature_node&gt;&gt; linear_nodes_storage_;</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> std::vector&lt;feature_node*&gt; linear_x_space_;</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> std::vector&lt;double&gt; linear_y_space_;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// Single sample storage (for prediction)</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> std::vector&lt;svm_node&gt; single_svm_nodes_;</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> std::vector&lt;feature_node&gt; single_linear_nodes_;</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> std::vector&lt;std::vector&lt;svm_node&gt;&gt; tensor_to_svm_nodes(<span class="keyword">const</span> torch::Tensor&amp; X);</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> std::vector&lt;std::vector&lt;feature_node&gt;&gt; tensor_to_linear_nodes(<span class="keyword">const</span> torch::Tensor&amp; X);</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> std::vector&lt;svm_node&gt; sample_to_svm_nodes(<span class="keyword">const</span> torch::Tensor&amp; sample);</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> std::vector&lt;feature_node&gt; sample_to_linear_nodes(<span class="keyword">const</span> torch::Tensor&amp; sample);</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> std::vector&lt;double&gt; extract_labels(<span class="keyword">const</span> torch::Tensor&amp; y);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> torch::Tensor ensure_cpu_tensor(<span class="keyword">const</span> torch::Tensor&amp; tensor);</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keywordtype">void</span> validate_tensor_properties(<span class="keyword">const</span> torch::Tensor&amp; tensor, <span class="keywordtype">int</span> expected_dims, <span class="keyword">const</span> std::string&amp; name);</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> };</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span>} <span class="comment">// namespace svm_classifier</span></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a16999ded27bc2d42d2ebd9551b00c1cb"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a16999ded27bc2d42d2ebd9551b00c1cb">svm_classifier::DataConverter::get_n_samples</a></div><div class="ttdeci">int get_n_samples() const</div><div class="ttdoc">Get number of samples from last conversion.</div><div class="ttdef"><b>Definition</b> <a href="kernel__parameters_8hpp_source.html#l00106">kernel_parameters.hpp:106</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a16e1539ef1266ca9ddd27a2ac5a53b92"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a16e1539ef1266ca9ddd27a2ac5a53b92">svm_classifier::DataConverter::to_svm_node</a></div><div class="ttdeci">svm_node * to_svm_node(const torch::Tensor &amp;sample)</div><div class="ttdoc">Convert single sample to libsvm format.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a1905f60fef9ffd3a8e8e45e41395352d"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a1905f60fef9ffd3a8e8e45e41395352d">svm_classifier::DataConverter::get_sparse_threshold</a></div><div class="ttdeci">double get_sparse_threshold() const</div><div class="ttdoc">Get sparse threshold.</div><div class="ttdef"><b>Definition</b> <a href="kernel__parameters_8hpp_source.html#l00123">kernel_parameters.hpp:123</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a26342a8cc8b943f099112040aa960ae6"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a26342a8cc8b943f099112040aa960ae6">svm_classifier::DataConverter::get_n_features</a></div><div class="ttdeci">int get_n_features() const</div><div class="ttdoc">Get number of features from last conversion.</div><div class="ttdef"><b>Definition</b> <a href="kernel__parameters_8hpp_source.html#l00100">kernel_parameters.hpp:100</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a46d12ba28c4c5bf6e0fad1122c621fa8"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8">svm_classifier::DataConverter::cleanup</a></div><div class="ttdeci">void cleanup()</div><div class="ttdoc">Clean up all allocated memory.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a503eba54e8bb1f370e04b6e24354a32f"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f">svm_classifier::DataConverter::from_decision_values</a></div><div class="ttdeci">torch::Tensor from_decision_values(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;decision_values)</div><div class="ttdoc">Convert decision values back to PyTorch tensor.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a5460485675613c54596418af3d5057ff"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff">svm_classifier::DataConverter::from_probabilities</a></div><div class="ttdeci">torch::Tensor from_probabilities(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;probabilities)</div><div class="ttdoc">Convert probabilities back to PyTorch tensor.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a5874904555f26448ed5ae4cf6f370056"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056">svm_classifier::DataConverter::DataConverter</a></div><div class="ttdeci">DataConverter()</div><div class="ttdoc">Default constructor.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a66f446e4decfe47bbba37c789f03f729"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a66f446e4decfe47bbba37c789f03f729">svm_classifier::DataConverter::to_svm_problem</a></div><div class="ttdeci">std::unique_ptr&lt; svm_problem &gt; to_svm_problem(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</div><div class="ttdoc">Convert PyTorch tensors to libsvm format.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a6bb2b4565b27df0db5f229dbd380795e"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a6bb2b4565b27df0db5f229dbd380795e">svm_classifier::DataConverter::to_feature_node</a></div><div class="ttdeci">feature_node * to_feature_node(const torch::Tensor &amp;sample)</div><div class="ttdoc">Convert single sample to liblinear format.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a7e7d8f6102b7a9b3256ff0dc6f536a35"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a7e7d8f6102b7a9b3256ff0dc6f536a35">svm_classifier::DataConverter::to_linear_problem</a></div><div class="ttdeci">std::unique_ptr&lt; problem &gt; to_linear_problem(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</div><div class="ttdoc">Convert PyTorch tensors to liblinear format.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_a9259322e54d2477478a684e99d8e557a"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#a9259322e54d2477478a684e99d8e557a">svm_classifier::DataConverter::set_sparse_threshold</a></div><div class="ttdeci">void set_sparse_threshold(double threshold)</div><div class="ttdoc">Set sparse threshold (features with absolute value below this are ignored)</div><div class="ttdef"><b>Definition</b> <a href="kernel__parameters_8hpp_source.html#l00117">kernel_parameters.hpp:117</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_aa0615f3de29958b2c5229d349f2f60ce"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#aa0615f3de29958b2c5229d349f2f60ce">svm_classifier::DataConverter::validate_tensors</a></div><div class="ttdeci">void validate_tensors(const torch::Tensor &amp;X, const torch::Tensor &amp;y=torch::Tensor())</div><div class="ttdoc">Validate input tensors.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_ab3e800a5016a915e9912d5873bb48741"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741">svm_classifier::DataConverter::from_predictions</a></div><div class="ttdeci">torch::Tensor from_predictions(const std::vector&lt; double &gt; &amp;predictions)</div><div class="ttdoc">Convert predictions back to PyTorch tensor.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html_ac3af2c9c03cffe2968f29147611e333d"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d">svm_classifier::DataConverter::~DataConverter</a></div><div class="ttdeci">~DataConverter()</div><div class="ttdoc">Destructor - cleans up allocated memory.</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

136
menu.js Normal file
View File

@@ -0,0 +1,136 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
function makeTree(data,relPath) {
var result='';
if ('children' in data) {
result+='<ul>';
for (var i in data.children) {
var url;
var link;
link = data.children[i].url;
if (link.substring(0,1)=='^') {
url = link.substring(1);
} else {
url = relPath+link;
}
result+='<li><a href="'+url+'">'+
data.children[i].text+'</a>'+
makeTree(data.children[i],relPath)+'</li>';
}
result+='</ul>';
}
return result;
}
var searchBoxHtml;
if (searchEnabled) {
if (serverSide) {
searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
'<div class="left">'+
'<form id="FSearchBox" action="'+relPath+searchPage+
'" method="get"><span id="MSearchSelectExt">&#160;</span>'+
'<input type="text" id="MSearchField" name="query" value="" placeholder="'+search+
'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)"'+
' onblur="searchBox.OnSearchFieldFocus(false)"/>'+
'</form>'+
'</div>'+
'<div class="right"></div>'+
'</div>';
} else {
searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
'<span class="left">'+
'<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()"'+
' onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>'+
'<input type="text" id="MSearchField" value="" placeholder="'+search+
'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" '+
'onblur="searchBox.OnSearchFieldFocus(false)" '+
'onkeyup="searchBox.OnSearchFieldChange(event)"/>'+
'</span>'+
'<span class="right"><a id="MSearchClose" '+
'href="javascript:searchBox.CloseResultsWindow()">'+
'<img id="MSearchCloseImg" border="0" src="'+relPath+
'search/close.svg" alt=""/></a>'+
'</span>'+
'</div>';
}
}
$('#main-nav').before('<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>'+
'<label class="main-menu-btn" for="main-menu-state">'+
'<span class="main-menu-btn-icon"></span> '+
'Toggle main menu visibility</label>'+
'<span id="searchBoxPos1" style="position:absolute;right:8px;top:8px;height:36px;"></span>'+
'</div>');
$('#main-nav').append(makeTree(menudata,relPath));
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
if (searchBoxHtml) {
$('#main-menu').append('<li id="searchBoxPos2" style="float:right"></li>');
}
var $mainMenuState = $('#main-menu-state');
var prevWidth = 0;
if ($mainMenuState.length) {
function initResizableIfExists() {
if (typeof initResizable==='function') initResizable();
}
// animate mobile menu
$mainMenuState.change(function(e) {
var $menu = $('#main-menu');
var options = { duration: 250, step: initResizableIfExists };
if (this.checked) {
options['complete'] = function() { $menu.css('display', 'block') };
$menu.hide().slideDown(options);
} else {
options['complete'] = function() { $menu.css('display', 'none') };
$menu.show().slideUp(options);
}
});
// set default menu visibility
function resetState() {
var $menu = $('#main-menu');
var $mainMenuState = $('#main-menu-state');
var newWidth = $(window).outerWidth();
if (newWidth!=prevWidth) {
if ($(window).outerWidth()<768) {
$mainMenuState.prop('checked',false); $menu.hide();
$('#searchBoxPos1').html(searchBoxHtml);
$('#searchBoxPos2').hide();
} else {
$menu.show();
$('#searchBoxPos1').empty();
$('#searchBoxPos2').html(searchBoxHtml);
$('#searchBoxPos2').show();
}
if (typeof searchBox!=='undefined') {
searchBox.CloseResultsWindow();
}
prevWidth = newWidth;
}
}
$(window).ready(function() { resetState(); initResizableIfExists(); });
$(window).resize(resetState);
}
$('#main-menu').smartmenus();
}
/* @license-end */

66
menudata.js Normal file
View File

@@ -0,0 +1,66 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
var menudata={children:[
{text:"Main Page",url:"index.html"},
{text:"Classes",url:"annotated.html",children:[
{text:"Class List",url:"annotated.html"},
{text:"Class Index",url:"classes.html"},
{text:"Class Hierarchy",url:"inherits.html"},
{text:"Class Members",url:"functions.html",children:[
{text:"All",url:"functions.html",children:[
{text:"a",url:"functions.html#index_a"},
{text:"c",url:"functions.html#index_c"},
{text:"d",url:"functions.html#index_d"},
{text:"e",url:"functions.html#index_e"},
{text:"f",url:"functions.html#index_f"},
{text:"g",url:"functions.html#index_g"},
{text:"h",url:"functions.html#index_h"},
{text:"i",url:"functions.html#index_i"},
{text:"l",url:"functions.html#index_l"},
{text:"o",url:"functions.html#index_o"},
{text:"p",url:"functions.html#index_p"},
{text:"r",url:"functions.html#index_r"},
{text:"s",url:"functions.html#index_s"},
{text:"t",url:"functions.html#index_t"},
{text:"v",url:"functions.html#index_v"},
{text:"~",url:"functions.html#index__7E"}]},
{text:"Functions",url:"functions_func.html",children:[
{text:"c",url:"functions_func.html#index_c"},
{text:"d",url:"functions_func.html#index_d"},
{text:"e",url:"functions_func.html#index_e"},
{text:"f",url:"functions_func.html#index_f"},
{text:"g",url:"functions_func.html#index_g"},
{text:"i",url:"functions_func.html#index_i"},
{text:"l",url:"functions_func.html#index_l"},
{text:"o",url:"functions_func.html#index_o"},
{text:"p",url:"functions_func.html#index_p"},
{text:"r",url:"functions_func.html#index_r"},
{text:"s",url:"functions_func.html#index_s"},
{text:"t",url:"functions_func.html#index_t"},
{text:"v",url:"functions_func.html#index_v"},
{text:"~",url:"functions_func.html#index__7E"}]},
{text:"Variables",url:"functions_vars.html"}]}]},
{text:"Files",url:"files.html",children:[
{text:"File List",url:"files.html"}]}]}

8
minus.svg Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<g>
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
<rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 582 B

8
minusd.svg Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<g>
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
<rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 582 B

View File

@@ -0,0 +1,587 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: src/multiclass_strategy.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">multiclass_strategy.cpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;svm_classifier/multiclass_strategy.hpp&quot;</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#include &quot;svm.h&quot;</span> <span class="comment">// libsvm</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &quot;linear.h&quot;</span> <span class="comment">// liblinear</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;algorithm&gt;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;unordered_set&gt;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;cmath&gt;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="keyword">namespace </span>svm_classifier {</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <span class="comment">// OneVsRestStrategy Implementation</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <a class="code hl_function" href="classsvm__classifier_1_1OneVsRestStrategy.html#a30f146a564a9c9681524593cacbb43e7">OneVsRestStrategy::OneVsRestStrategy</a>()</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> : library_type_(SVMLibrary::LIBLINEAR)</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> {</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> }</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> OneVsRestStrategy::~OneVsRestStrategy()</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> {</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> cleanup_models();</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> }</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> TrainingMetrics OneVsRestStrategy::fit(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">const</span> torch::Tensor&amp; y,</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">const</span> KernelParameters&amp; params,</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> DataConverter&amp; converter)</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> {</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> cleanup_models();</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">auto</span> start_time = std::chrono::high_resolution_clock::now();</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// Store parameters and determine library type</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> params_ = params;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> library_type_ = get_svm_library(params.get_kernel_type());</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="comment">// Extract unique classes</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">auto</span> y_cpu = y.to(torch::kCPU);</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">auto</span> unique_classes_tensor = torch::unique(y_cpu);</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> classes_.clear();</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; unique_classes_tensor.size(0); ++i) {</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> classes_.push_back(unique_classes_tensor[i].item&lt;int&gt;());</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> }</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> std::sort(classes_.begin(), classes_.end());</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="comment">// Handle binary classification case</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">if</span> (classes_.size() &lt;= 2) {</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="comment">// For binary classification, train a single classifier</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> classes_.resize(2); <span class="comment">// Ensure we have exactly 2 classes</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">auto</span> binary_y = y;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">if</span> (classes_.size() == 1) {</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="comment">// Edge case: only one class, create dummy binary problem</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> classes_.push_back(classes_[0] + 1);</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> binary_y = torch::cat({ y, torch::full({1}, classes_[1], y.options()) });</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">auto</span> dummy_x = torch::zeros({ 1, X.size(1) }, X.options());</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">auto</span> extended_X = torch::cat({ X, dummy_x });</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">double</span> training_time = train_binary_classifier(extended_X, binary_y, params, converter, 0);</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">double</span> training_time = train_binary_classifier(X, binary_y, params, converter, 0);</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> }</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// Multiclass case: train one classifier per class</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">if</span> (library_type_ == SVMLibrary::LIBSVM) {</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> svm_models_.resize(classes_.size());</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> linear_models_.resize(classes_.size());</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> }</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">double</span> total_training_time = 0.0;</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; classes_.size(); ++i) {</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">auto</span> binary_y = create_binary_labels(y, classes_[i]);</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> total_training_time += train_binary_classifier(X, binary_y, params, converter, i);</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> }</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> }</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">auto</span> end_time = std::chrono::high_resolution_clock::now();</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">auto</span> duration = std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(end_time - start_time);</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> is_trained_ = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> TrainingMetrics metrics;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> metrics.training_time = duration.count() / 1000.0;</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> metrics.status = TrainingStatus::SUCCESS;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">return</span> metrics;</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> }</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> std::vector&lt;int&gt; OneVsRestStrategy::predict(<span class="keyword">const</span> torch::Tensor&amp; X, DataConverter&amp; converter)</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> {</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">if</span> (!is_trained_) {</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Model is not trained&quot;</span>);</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> }</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">auto</span> decision_values = decision_function(X, converter);</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> std::vector&lt;int&gt; predictions;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> predictions.reserve(X.size(0));</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; decision_row : decision_values) {</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="comment">// Find the class with maximum decision value</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">auto</span> max_it = std::max_element(decision_row.begin(), decision_row.end());</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">int</span> predicted_class_idx = std::distance(decision_row.begin(), max_it);</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> predictions.push_back(classes_[predicted_class_idx]);</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> }</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">return</span> predictions;</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> }</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> std::vector&lt;std::vector&lt;double&gt;&gt; OneVsRestStrategy::predict_proba(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> DataConverter&amp; converter)</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> {</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span> (!supports_probability()) {</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Probability prediction not supported for current configuration&quot;</span>);</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> }</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">if</span> (!is_trained_) {</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Model is not trained&quot;</span>);</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> }</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> std::vector&lt;std::vector&lt;double&gt;&gt; probabilities;</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> probabilities.reserve(X.size(0));</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; X.size(0); ++i) {</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">auto</span> sample = X[i];</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> std::vector&lt;double&gt; sample_probs;</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> sample_probs.reserve(classes_.size());</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">if</span> (library_type_ == SVMLibrary::LIBSVM) {</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; classes_.size(); ++j) {</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span> (svm_models_[j]) {</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">auto</span> sample_node = converter.to_svm_node(sample);</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">double</span> prob_estimates[2];</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> svm_predict_probability(svm_models_[j].get(), sample_node, prob_estimates);</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> sample_probs.push_back(prob_estimates[0]); <span class="comment">// Probability of positive class</span></div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> sample_probs.push_back(0.0);</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> }</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> }</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; classes_.size(); ++j) {</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">if</span> (linear_models_[j]) {</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keyword">auto</span> sample_node = converter.to_feature_node(sample);</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordtype">double</span> prob_estimates[2];</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> predict_probability(linear_models_[j].get(), sample_node, prob_estimates);</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> sample_probs.push_back(prob_estimates[0]); <span class="comment">// Probability of positive class</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> sample_probs.push_back(0.0);</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> }</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> }</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> }</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// Normalize probabilities</span></div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">double</span> sum = std::accumulate(sample_probs.begin(), sample_probs.end(), 0.0);</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span> (sum &gt; 0.0) {</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; prob : sample_probs) {</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> prob /= sum;</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> }</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="comment">// Uniform distribution if all probabilities are zero</span></div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> std::fill(sample_probs.begin(), sample_probs.end(), 1.0 / classes_.size());</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> }</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> probabilities.push_back(sample_probs);</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> }</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">return</span> probabilities;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> }</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> std::vector&lt;std::vector&lt;double&gt;&gt; OneVsRestStrategy::decision_function(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> DataConverter&amp; converter)</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> {</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span> (!is_trained_) {</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Model is not trained&quot;</span>);</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> }</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> std::vector&lt;std::vector&lt;double&gt;&gt; decision_values;</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> decision_values.reserve(X.size(0));</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; X.size(0); ++i) {</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">auto</span> sample = X[i];</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> std::vector&lt;double&gt; sample_decisions;</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> sample_decisions.reserve(classes_.size());</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span> (library_type_ == SVMLibrary::LIBSVM) {</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; classes_.size(); ++j) {</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span> (svm_models_[j]) {</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">auto</span> sample_node = converter.to_svm_node(sample);</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">double</span> decision_value;</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> svm_predict_values(svm_models_[j].get(), sample_node, &amp;decision_value);</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> sample_decisions.push_back(decision_value);</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> sample_decisions.push_back(0.0);</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> }</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> }</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; classes_.size(); ++j) {</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span> (linear_models_[j]) {</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">auto</span> sample_node = converter.to_feature_node(sample);</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keywordtype">double</span> decision_value;</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> predict_values(linear_models_[j].get(), sample_node, &amp;decision_value);</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> sample_decisions.push_back(decision_value);</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> sample_decisions.push_back(0.0);</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> }</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> }</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> }</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> decision_values.push_back(sample_decisions);</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> }</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">return</span> decision_values;</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> }</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keywordtype">bool</span> OneVsRestStrategy::supports_probability()<span class="keyword"> const</span></div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">if</span> (!is_trained_) {</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">return</span> params_.get_probability();</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> }</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="comment">// Check if any model supports probability</span></div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">if</span> (library_type_ == SVMLibrary::LIBSVM) {</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; model : svm_models_) {</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">if</span> (model &amp;&amp; svm_check_probability_model(model.get())) {</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> }</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> }</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; model : linear_models_) {</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">if</span> (model &amp;&amp; check_probability_model(model.get())) {</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> }</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> }</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> }</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> </div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> }</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> </div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> torch::Tensor OneVsRestStrategy::create_binary_labels(<span class="keyword">const</span> torch::Tensor&amp; y, <span class="keywordtype">int</span> positive_class)</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> {</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keyword">auto</span> binary_labels = torch::ones_like(y) * (-1); <span class="comment">// Initialize with -1 (negative class)</span></div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keyword">auto</span> positive_mask = (y == positive_class);</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> binary_labels.masked_fill_(positive_mask, 1); <span class="comment">// Set positive class to +1</span></div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> </div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">return</span> binary_labels;</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> }</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> </div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <span class="keywordtype">double</span> OneVsRestStrategy::train_binary_classifier(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">const</span> torch::Tensor&amp; y_binary,</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">const</span> KernelParameters&amp; params,</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> DataConverter&amp; converter,</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keywordtype">int</span> class_idx)</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> {</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="keyword">auto</span> start_time = std::chrono::high_resolution_clock::now();</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">if</span> (library_type_ == SVMLibrary::LIBSVM) {</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="comment">// Use libsvm</span></div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="keyword">auto</span> problem = converter.to_svm_problem(X, y_binary);</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="comment">// Setup SVM parameters</span></div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> svm_parameter svm_params;</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> svm_params.svm_type = C_SVC;</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> </div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">switch</span> (params.get_kernel_type()) {</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">case</span> KernelType::RBF:</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> svm_params.kernel_type = RBF;</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">case</span> KernelType::POLYNOMIAL:</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> svm_params.kernel_type = POLY;</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">case</span> KernelType::SIGMOID:</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> svm_params.kernel_type = SIGMOID;</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Invalid kernel type for libsvm&quot;</span>);</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> }</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> </div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> svm_params.degree = params.get_degree();</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> svm_params.gamma = (params.get_gamma() == -1.0) ? 1.0 / X.size(1) : params.get_gamma();</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> svm_params.coef0 = params.get_coef0();</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> svm_params.cache_size = params.get_cache_size();</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> svm_params.eps = params.get_tolerance();</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> svm_params.C = params.get_C();</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> svm_params.nr_weight = 0;</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> svm_params.weight_label = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> svm_params.weight = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> svm_params.nu = 0.5;</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> svm_params.p = 0.1;</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> svm_params.shrinking = 1;</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> svm_params.probability = params.get_probability() ? 1 : 0;</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="comment">// Check parameters</span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* error_msg = svm_check_parameter(problem.get(), &amp;svm_params);</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">if</span> (error_msg) {</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;SVM parameter error: &quot;</span> + std::string(error_msg));</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> }</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> </div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="comment">// Train model</span></div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <span class="keyword">auto</span> model = svm_train(problem.get(), &amp;svm_params);</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">if</span> (!model) {</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Failed to train SVM model&quot;</span>);</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> }</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> </div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> svm_models_[class_idx] = std::unique_ptr&lt;svm_model&gt;(model);</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> </div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="comment">// Use liblinear</span></div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="keyword">auto</span> problem = converter.to_linear_problem(X, y_binary);</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> </div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="comment">// Setup linear parameters</span></div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> parameter linear_params;</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> linear_params.solver_type = L2R_L2LOSS_SVC_DUAL; <span class="comment">// Default solver for C-SVC</span></div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> linear_params.C = params.get_C();</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> linear_params.eps = params.get_tolerance();</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> linear_params.nr_weight = 0;</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> linear_params.weight_label = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> linear_params.weight = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> linear_params.p = 0.1;</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> linear_params.nu = 0.5;</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> linear_params.init_sol = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> linear_params.regularize_bias = 0;</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> </div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <span class="comment">// Check parameters</span></div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* error_msg = check_parameter(problem.get(), &amp;linear_params);</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">if</span> (error_msg) {</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Linear parameter error: &quot;</span> + std::string(error_msg));</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> }</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> </div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="comment">// Train model</span></div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keyword">auto</span> model = train(problem.get(), &amp;linear_params);</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">if</span> (!model) {</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Failed to train linear model&quot;</span>);</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> }</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> </div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> linear_models_[class_idx] = std::unique_ptr&lt;::model&gt;(model);</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> }</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> </div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">auto</span> end_time = std::chrono::high_resolution_clock::now();</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keyword">auto</span> duration = std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(end_time - start_time);</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> </div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">return</span> duration.count() / 1000.0;</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> }</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> </div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keywordtype">void</span> OneVsRestStrategy::cleanup_models()</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> {</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; model : svm_models_) {</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">if</span> (model) {</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> svm_free_and_destroy_model(&amp;model);</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> }</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> }</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> svm_models_.clear();</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> </div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; model : linear_models_) {</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">if</span> (model) {</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> free_and_destroy_model(&amp;model);</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> }</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> }</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> linear_models_.clear();</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> </div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> is_trained_ = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> }</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> </div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="comment">// OneVsOneStrategy Implementation</span></div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> OneVsOneStrategy::OneVsOneStrategy()</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> : library_type_(SVMLibrary::LIBLINEAR)</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> {</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> }</div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> </div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> OneVsOneStrategy::~OneVsOneStrategy()</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> {</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> cleanup_models();</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> }</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> </div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> TrainingMetrics OneVsOneStrategy::fit(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> <span class="keyword">const</span> torch::Tensor&amp; y,</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <span class="keyword">const</span> KernelParameters&amp; params,</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> DataConverter&amp; converter)</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> {</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> cleanup_models();</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> </div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <span class="keyword">auto</span> start_time = std::chrono::high_resolution_clock::now();</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> </div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> <span class="comment">// Store parameters and determine library type</span></div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> params_ = params;</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> library_type_ = get_svm_library(params.get_kernel_type());</div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> </div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <span class="comment">// Extract unique classes</span></div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <span class="keyword">auto</span> y_cpu = y.to(torch::kCPU);</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="keyword">auto</span> unique_classes_tensor = torch::unique(y_cpu);</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> classes_.clear();</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> </div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; unique_classes_tensor.size(0); ++i) {</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> classes_.push_back(unique_classes_tensor[i].item&lt;int&gt;());</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> }</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> </div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> std::sort(classes_.begin(), classes_.end());</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> </div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="comment">// Generate all class pairs</span></div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> class_pairs_.clear();</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; classes_.size(); ++i) {</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = i + 1; j &lt; classes_.size(); ++j) {</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> class_pairs_.emplace_back(classes_[i], classes_[j]);</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> }</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> }</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> </div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> <span class="comment">// Initialize model storage</span></div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">if</span> (library_type_ == SVMLibrary::LIBSVM) {</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> svm_models_.resize(class_pairs_.size());</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> linear_models_.resize(class_pairs_.size());</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> }</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> </div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="keywordtype">double</span> total_training_time = 0.0;</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> </div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="comment">// Train one classifier for each class pair</span></div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; class_pairs_.size(); ++i) {</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="keyword">auto</span> [class1, class2] = class_pairs_[i];</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> total_training_time += train_pairwise_classifier(X, y, class1, class2, params, converter, i);</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> }</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> </div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <span class="keyword">auto</span> end_time = std::chrono::high_resolution_clock::now();</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> <span class="keyword">auto</span> duration = std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(end_time - start_time);</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> </div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> is_trained_ = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> </div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> TrainingMetrics metrics;</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> metrics.training_time = duration.count() / 1000.0;</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> metrics.status = TrainingStatus::SUCCESS;</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> </div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">return</span> metrics;</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> }</div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> </div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> std::vector&lt;int&gt; OneVsOneStrategy::predict(<span class="keyword">const</span> torch::Tensor&amp; X, DataConverter&amp; converter)</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> {</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">if</span> (!is_trained_) {</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Model is not trained&quot;</span>);</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> }</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> </div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> <span class="keyword">auto</span> decision_values = decision_function(X, converter);</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">return</span> vote_predictions(decision_values);</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> }</div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> </div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> std::vector&lt;std::vector&lt;double&gt;&gt; OneVsOneStrategy::predict_proba(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> DataConverter&amp; converter)</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> {</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> <span class="comment">// OvO probability estimation is more complex and typically done via</span></div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> <span class="comment">// pairwise coupling (Hastie &amp; Tibshirani, 1998)</span></div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="comment">// For simplicity, we&#39;ll use decision function values and normalize</span></div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> </div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> <span class="keyword">auto</span> decision_values = decision_function(X, converter);</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> std::vector&lt;std::vector&lt;double&gt;&gt; probabilities;</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> probabilities.reserve(X.size(0));</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> </div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; decision_row : decision_values) {</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> std::vector&lt;double&gt; class_scores(classes_.size(), 0.0);</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> </div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="comment">// Aggregate decision values for each class</span></div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; class_pairs_.size(); ++i) {</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <span class="keyword">auto</span> [class1, class2] = class_pairs_[i];</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="keywordtype">double</span> decision = decision_row[i];</div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> </div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="keyword">auto</span> it1 = std::find(classes_.begin(), classes_.end(), class1);</div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <span class="keyword">auto</span> it2 = std::find(classes_.begin(), classes_.end(), class2);</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> </div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> <span class="keywordflow">if</span> (it1 != classes_.end() &amp;&amp; it2 != classes_.end()) {</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> <span class="keywordtype">size_t</span> idx1 = std::distance(classes_.begin(), it1);</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> <span class="keywordtype">size_t</span> idx2 = std::distance(classes_.begin(), it2);</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> </div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">if</span> (decision &gt; 0) {</div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> class_scores[idx1] += 1.0;</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> class_scores[idx2] += 1.0;</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> }</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> }</div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> }</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> </div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> <span class="comment">// Convert scores to probabilities</span></div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> <span class="keywordtype">double</span> sum = std::accumulate(class_scores.begin(), class_scores.end(), 0.0);</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> <span class="keywordflow">if</span> (sum &gt; 0.0) {</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; score : class_scores) {</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> score /= sum;</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> }</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> std::fill(class_scores.begin(), class_scores.end(), 1.0 / classes_.size());</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> }</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> </div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> probabilities.push_back(class_scores);</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> }</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> </div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">return</span> probabilities;</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> }</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> </div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> std::vector&lt;std::vector&lt;double&gt;&gt; OneVsOneStrategy::decision_function(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsRestStrategy_html_a30f146a564a9c9681524593cacbb43e7"><div class="ttname"><a href="classsvm__classifier_1_1OneVsRestStrategy.html#a30f146a564a9c9681524593cacbb43e7">svm_classifier::OneVsRestStrategy::OneVsRestStrategy</a></div><div class="ttdeci">OneVsRestStrategy()</div><div class="ttdoc">Constructor.</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

View File

@@ -0,0 +1,281 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SVM Classifier C++: include/svm_classifier/multiclass_strategy.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">SVM Classifier C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">High-performance Support Vector Machine classifier with scikit-learn compatible API</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_daf582bc00f2bbc6516ddb6630e28009.html">svm_classifier</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">multiclass_strategy.hpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &quot;types.hpp&quot;</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &quot;kernel_parameters.hpp&quot;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &quot;data_converter.hpp&quot;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;torch/torch.h&gt;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">// Forward declarations</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">struct </span>svm_model;</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="keyword">struct </span>model;</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="keyword">namespace </span>svm_classifier {</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
<div class="foldopen" id="foldopen00020" data-start="{" data-end="};">
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1MulticlassStrategyBase.html"> 20</a></span> <span class="keyword">class </span><a class="code hl_class" href="classsvm__classifier_1_1MulticlassStrategyBase.html">MulticlassStrategyBase</a> {</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8a5647dd57eed281288f0c9011b11395"> 25</a></span> <span class="keyword">virtual</span> <a class="code hl_function" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8a5647dd57eed281288f0c9011b11395">~MulticlassStrategyBase</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a548af7201b7970abee0c31e7ec07d896"> 35</a></span> <span class="keyword">virtual</span> <a class="code hl_struct" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a> <a class="code hl_function" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a548af7201b7970abee0c31e7ec07d896">fit</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">const</span> torch::Tensor&amp; y,</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">const</span> KernelParameters&amp; params,</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter) = 0;</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a70f94cfcf8b2bf6d60133c688fe55f9d"> 46</a></span> <span class="keyword">virtual</span> std::vector&lt;int&gt; <a class="code hl_function" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a70f94cfcf8b2bf6d60133c688fe55f9d">predict</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter) = 0;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ab5348ee3b83547702ec7903ee7ee2da7"> 55</a></span> <span class="keyword">virtual</span> std::vector&lt;std::vector&lt;double&gt;&gt; <a class="code hl_function" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ab5348ee3b83547702ec7903ee7ee2da7">predict_proba</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter) = 0;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ad1c4eb746cb1fdd67cf436ff85a9b0f0"> 64</a></span> <span class="keyword">virtual</span> std::vector&lt;std::vector&lt;double&gt;&gt; <a class="code hl_function" href="classsvm__classifier_1_1MulticlassStrategyBase.html#ad1c4eb746cb1fdd67cf436ff85a9b0f0">decision_function</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter) = 0;</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a379c4000227cc46410bfbecce6e80c33"> 71</a></span> <span class="keyword">virtual</span> std::vector&lt;int&gt; <a class="code hl_function" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a379c4000227cc46410bfbecce6e80c33">get_classes</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a2ab91902f8d6eb216f626ce9ea4be992"> 77</a></span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a2ab91902f8d6eb216f626ce9ea4be992">supports_probability</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a1740d877a4d634ec1763cb8646f5e172"> 83</a></span> <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a1740d877a4d634ec1763cb8646f5e172">get_n_classes</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a31a0501fa1a6db1d41cbf825b2348e47"> 89</a></span> <span class="keyword">virtual</span> MulticlassStrategy <a class="code hl_function" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a31a0501fa1a6db1d41cbf825b2348e47">get_strategy_type</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27"> 92</a></span> std::vector&lt;int&gt; <a class="code hl_variable" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">classes_</a>; </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8e74cd580feaac0da34d204274a24fea"> 93</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8e74cd580feaac0da34d204274a24fea">is_trained_</a> = <span class="keyword">false</span>; </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> };</div>
</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
<div class="foldopen" id="foldopen00099" data-start="{" data-end="};">
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsRestStrategy.html"> 99</a></span> <span class="keyword">class </span><a class="code hl_class" href="classsvm__classifier_1_1OneVsRestStrategy.html">OneVsRestStrategy</a> : <span class="keyword">public</span> <a class="code hl_class" href="classsvm__classifier_1_1MulticlassStrategyBase.html">MulticlassStrategyBase</a> {</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsRestStrategy.html#a30f146a564a9c9681524593cacbb43e7"> 104</a></span> <a class="code hl_function" href="classsvm__classifier_1_1OneVsRestStrategy.html#a30f146a564a9c9681524593cacbb43e7">OneVsRestStrategy</a>();</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsRestStrategy.html#acfd698dd6cc0a988ac642a00d1f0b970"> 109</a></span> <a class="code hl_function" href="classsvm__classifier_1_1OneVsRestStrategy.html#acfd698dd6cc0a988ac642a00d1f0b970">~OneVsRestStrategy</a>() <span class="keyword">override</span>;</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsRestStrategy.html#aae14da8c0effd04731b5a4a0181eb1b6"> 111</a></span> <a class="code hl_struct" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a> <a class="code hl_function" href="classsvm__classifier_1_1OneVsRestStrategy.html#aae14da8c0effd04731b5a4a0181eb1b6">fit</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keyword">const</span> torch::Tensor&amp; y,</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keyword">const</span> KernelParameters&amp; params,</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsRestStrategy.html#a771903a821d5380ddd5d0b3a912e7df9"> 116</a></span> std::vector&lt;int&gt; <a class="code hl_function" href="classsvm__classifier_1_1OneVsRestStrategy.html#a771903a821d5380ddd5d0b3a912e7df9">predict</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsRestStrategy.html#a55639e5adaadcd6414b50d5ebf0d1cd2"> 119</a></span> std::vector&lt;std::vector&lt;double&gt;&gt; <a class="code hl_function" href="classsvm__classifier_1_1OneVsRestStrategy.html#a55639e5adaadcd6414b50d5ebf0d1cd2">predict_proba</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsRestStrategy.html#a966b79bc8b6fac0fa78feefc2dd8a878"> 122</a></span> std::vector&lt;std::vector&lt;double&gt;&gt; <a class="code hl_function" href="classsvm__classifier_1_1OneVsRestStrategy.html#a966b79bc8b6fac0fa78feefc2dd8a878">decision_function</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsRestStrategy.html#a5e10800b16dbc66fd1c0d5e0a42871f0"> 125</a></span> std::vector&lt;int&gt; <a class="code hl_function" href="classsvm__classifier_1_1OneVsRestStrategy.html#a5e10800b16dbc66fd1c0d5e0a42871f0">get_classes</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> <a class="code hl_variable" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">classes_</a>; }</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsRestStrategy.html#a200300198628ac119eac09e62ff62336"> 127</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classsvm__classifier_1_1OneVsRestStrategy.html#a200300198628ac119eac09e62ff62336">supports_probability</a>() <span class="keyword">const override</span>;</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsRestStrategy.html#a53abe89ec25c33fd9c32d92ba08d01ed"> 129</a></span> <span class="keywordtype">int</span> <a class="code hl_function" href="classsvm__classifier_1_1OneVsRestStrategy.html#a53abe89ec25c33fd9c32d92ba08d01ed">get_n_classes</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(<a class="code hl_variable" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">classes_</a>.size()); }</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsRestStrategy.html#af9e1bd6d08ce3e7afd5279c835ce6cfb"> 131</a></span> MulticlassStrategy <a class="code hl_function" href="classsvm__classifier_1_1OneVsRestStrategy.html#af9e1bd6d08ce3e7afd5279c835ce6cfb">get_strategy_type</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> MulticlassStrategy::ONE_VS_REST; }</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> std::vector&lt;std::unique_ptr&lt;svm_model&gt;&gt; svm_models_; </div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> std::vector&lt;std::unique_ptr&lt;model&gt;&gt; linear_models_; </div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> KernelParameters params_; </div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> SVMLibrary library_type_; </div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> torch::Tensor create_binary_labels(<span class="keyword">const</span> torch::Tensor&amp; y, <span class="keywordtype">int</span> positive_class);</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">double</span> train_binary_classifier(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keyword">const</span> torch::Tensor&amp; y_binary,</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keyword">const</span> KernelParameters&amp; params,</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter,</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordtype">int</span> class_idx);</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keywordtype">void</span> cleanup_models();</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> };</div>
</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
<div class="foldopen" id="foldopen00171" data-start="{" data-end="};">
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsOneStrategy.html"> 171</a></span> <span class="keyword">class </span><a class="code hl_class" href="classsvm__classifier_1_1OneVsOneStrategy.html">OneVsOneStrategy</a> : <span class="keyword">public</span> <a class="code hl_class" href="classsvm__classifier_1_1MulticlassStrategyBase.html">MulticlassStrategyBase</a> {</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsOneStrategy.html#a6d4b060383169010dda4197a0bffa020"> 176</a></span> <a class="code hl_function" href="classsvm__classifier_1_1OneVsOneStrategy.html#a6d4b060383169010dda4197a0bffa020">OneVsOneStrategy</a>();</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsOneStrategy.html#af9a653b62502e296d0d18092be56344f"> 181</a></span> <a class="code hl_function" href="classsvm__classifier_1_1OneVsOneStrategy.html#af9a653b62502e296d0d18092be56344f">~OneVsOneStrategy</a>() <span class="keyword">override</span>;</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsOneStrategy.html#af5ce4aeb191c5feed178b6465eac66f6"> 183</a></span> <a class="code hl_struct" href="structsvm__classifier_1_1TrainingMetrics.html">TrainingMetrics</a> <a class="code hl_function" href="classsvm__classifier_1_1OneVsOneStrategy.html#af5ce4aeb191c5feed178b6465eac66f6">fit</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">const</span> torch::Tensor&amp; y,</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">const</span> KernelParameters&amp; params,</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsOneStrategy.html#ab60df2d9b6069a73369b0bf9d3675662"> 188</a></span> std::vector&lt;int&gt; <a class="code hl_function" href="classsvm__classifier_1_1OneVsOneStrategy.html#ab60df2d9b6069a73369b0bf9d3675662">predict</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> </div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsOneStrategy.html#ae62e8b24115042d1119e76f3302f6992"> 191</a></span> std::vector&lt;std::vector&lt;double&gt;&gt; <a class="code hl_function" href="classsvm__classifier_1_1OneVsOneStrategy.html#ae62e8b24115042d1119e76f3302f6992">predict_proba</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsOneStrategy.html#a6aae0b5cd72180e94212454da8b777d2"> 194</a></span> std::vector&lt;std::vector&lt;double&gt;&gt; <a class="code hl_function" href="classsvm__classifier_1_1OneVsOneStrategy.html#a6aae0b5cd72180e94212454da8b777d2">decision_function</a>(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsOneStrategy.html#a52f9c3d7d98077d1dec0d6034711b750"> 197</a></span> std::vector&lt;int&gt; <a class="code hl_function" href="classsvm__classifier_1_1OneVsOneStrategy.html#a52f9c3d7d98077d1dec0d6034711b750">get_classes</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> <a class="code hl_variable" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">classes_</a>; }</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsOneStrategy.html#a8875d29cb8666af10e0fb5634e08c0c1"> 199</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classsvm__classifier_1_1OneVsOneStrategy.html#a8875d29cb8666af10e0fb5634e08c0c1">supports_probability</a>() <span class="keyword">const override</span>;</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsOneStrategy.html#a16ee2ae3623767af2165fef2d4b7d039"> 201</a></span> <span class="keywordtype">int</span> <a class="code hl_function" href="classsvm__classifier_1_1OneVsOneStrategy.html#a16ee2ae3623767af2165fef2d4b7d039">get_n_classes</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(<a class="code hl_variable" href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">classes_</a>.size()); }</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> </div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"><a class="line" href="classsvm__classifier_1_1OneVsOneStrategy.html#aae80b4e75459b2aca4f561d62c3c5675"> 203</a></span> MulticlassStrategy <a class="code hl_function" href="classsvm__classifier_1_1OneVsOneStrategy.html#aae80b4e75459b2aca4f561d62c3c5675">get_strategy_type</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> MulticlassStrategy::ONE_VS_ONE; }</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> </div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> std::vector&lt;std::unique_ptr&lt;svm_model&gt;&gt; svm_models_; </div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> std::vector&lt;std::unique_ptr&lt;model&gt;&gt; linear_models_; </div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> std::vector&lt;std::pair&lt;int, int&gt;&gt; class_pairs_; </div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> KernelParameters params_; </div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> SVMLibrary library_type_; </div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> </div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> std::pair&lt;torch::Tensor, torch::Tensor&gt; extract_binary_data(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keyword">const</span> torch::Tensor&amp; y,</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordtype">int</span> class1,</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordtype">int</span> class2);</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> </div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keywordtype">double</span> train_pairwise_classifier(<span class="keyword">const</span> torch::Tensor&amp; X,</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keyword">const</span> torch::Tensor&amp; y,</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordtype">int</span> class1,</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordtype">int</span> class2,</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keyword">const</span> KernelParameters&amp; params,</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <a class="code hl_class" href="classsvm__classifier_1_1DataConverter.html">DataConverter</a>&amp; converter,</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keywordtype">int</span> model_idx);</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> std::vector&lt;int&gt; vote_predictions(<span class="keyword">const</span> std::vector&lt;std::vector&lt;double&gt;&gt;&amp; decisions);</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> </div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keywordtype">void</span> cleanup_models();</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> };</div>
</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> std::unique_ptr&lt;MulticlassStrategyBase&gt; create_multiclass_strategy(MulticlassStrategy strategy);</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> </div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span>} <span class="comment">// namespace svm_classifier</span></div>
<div class="ttc" id="aclasssvm__classifier_1_1DataConverter_html"><div class="ttname"><a href="classsvm__classifier_1_1DataConverter.html">svm_classifier::DataConverter</a></div><div class="ttdoc">Data converter between libtorch tensors and SVM library formats.</div><div class="ttdef"><b>Definition</b> <a href="data__converter_8hpp_source.html#l00023">data_converter.hpp:23</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1MulticlassStrategyBase_html"><div class="ttname"><a href="classsvm__classifier_1_1MulticlassStrategyBase.html">svm_classifier::MulticlassStrategyBase</a></div><div class="ttdoc">Abstract base class for multiclass classification strategies.</div><div class="ttdef"><b>Definition</b> <a href="multiclass__strategy_8hpp_source.html#l00020">multiclass_strategy.hpp:20</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1MulticlassStrategyBase_html_a15bb6eb53e91e604b259b3050bd40e27"><div class="ttname"><a href="classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27">svm_classifier::MulticlassStrategyBase::classes_</a></div><div class="ttdeci">std::vector&lt; int &gt; classes_</div><div class="ttdoc">Unique class labels.</div><div class="ttdef"><b>Definition</b> <a href="multiclass__strategy_8hpp_source.html#l00092">multiclass_strategy.hpp:92</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1MulticlassStrategyBase_html_a1740d877a4d634ec1763cb8646f5e172"><div class="ttname"><a href="classsvm__classifier_1_1MulticlassStrategyBase.html#a1740d877a4d634ec1763cb8646f5e172">svm_classifier::MulticlassStrategyBase::get_n_classes</a></div><div class="ttdeci">virtual int get_n_classes() const =0</div><div class="ttdoc">Get number of classes.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1MulticlassStrategyBase_html_a2ab91902f8d6eb216f626ce9ea4be992"><div class="ttname"><a href="classsvm__classifier_1_1MulticlassStrategyBase.html#a2ab91902f8d6eb216f626ce9ea4be992">svm_classifier::MulticlassStrategyBase::supports_probability</a></div><div class="ttdeci">virtual bool supports_probability() const =0</div><div class="ttdoc">Check if the model supports probability prediction.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1MulticlassStrategyBase_html_a31a0501fa1a6db1d41cbf825b2348e47"><div class="ttname"><a href="classsvm__classifier_1_1MulticlassStrategyBase.html#a31a0501fa1a6db1d41cbf825b2348e47">svm_classifier::MulticlassStrategyBase::get_strategy_type</a></div><div class="ttdeci">virtual MulticlassStrategy get_strategy_type() const =0</div><div class="ttdoc">Get strategy type.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1MulticlassStrategyBase_html_a379c4000227cc46410bfbecce6e80c33"><div class="ttname"><a href="classsvm__classifier_1_1MulticlassStrategyBase.html#a379c4000227cc46410bfbecce6e80c33">svm_classifier::MulticlassStrategyBase::get_classes</a></div><div class="ttdeci">virtual std::vector&lt; int &gt; get_classes() const =0</div><div class="ttdoc">Get unique class labels.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1MulticlassStrategyBase_html_a548af7201b7970abee0c31e7ec07d896"><div class="ttname"><a href="classsvm__classifier_1_1MulticlassStrategyBase.html#a548af7201b7970abee0c31e7ec07d896">svm_classifier::MulticlassStrategyBase::fit</a></div><div class="ttdeci">virtual TrainingMetrics fit(const torch::Tensor &amp;X, const torch::Tensor &amp;y, const KernelParameters &amp;params, DataConverter &amp;converter)=0</div><div class="ttdoc">Train the multiclass classifier.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1MulticlassStrategyBase_html_a70f94cfcf8b2bf6d60133c688fe55f9d"><div class="ttname"><a href="classsvm__classifier_1_1MulticlassStrategyBase.html#a70f94cfcf8b2bf6d60133c688fe55f9d">svm_classifier::MulticlassStrategyBase::predict</a></div><div class="ttdeci">virtual std::vector&lt; int &gt; predict(const torch::Tensor &amp;X, DataConverter &amp;converter)=0</div><div class="ttdoc">Predict class labels.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1MulticlassStrategyBase_html_a8a5647dd57eed281288f0c9011b11395"><div class="ttname"><a href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8a5647dd57eed281288f0c9011b11395">svm_classifier::MulticlassStrategyBase::~MulticlassStrategyBase</a></div><div class="ttdeci">virtual ~MulticlassStrategyBase()=default</div><div class="ttdoc">Virtual destructor.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1MulticlassStrategyBase_html_a8e74cd580feaac0da34d204274a24fea"><div class="ttname"><a href="classsvm__classifier_1_1MulticlassStrategyBase.html#a8e74cd580feaac0da34d204274a24fea">svm_classifier::MulticlassStrategyBase::is_trained_</a></div><div class="ttdeci">bool is_trained_</div><div class="ttdoc">Whether the model is trained.</div><div class="ttdef"><b>Definition</b> <a href="multiclass__strategy_8hpp_source.html#l00093">multiclass_strategy.hpp:93</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1MulticlassStrategyBase_html_ab5348ee3b83547702ec7903ee7ee2da7"><div class="ttname"><a href="classsvm__classifier_1_1MulticlassStrategyBase.html#ab5348ee3b83547702ec7903ee7ee2da7">svm_classifier::MulticlassStrategyBase::predict_proba</a></div><div class="ttdeci">virtual std::vector&lt; std::vector&lt; double &gt; &gt; predict_proba(const torch::Tensor &amp;X, DataConverter &amp;converter)=0</div><div class="ttdoc">Predict class probabilities.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1MulticlassStrategyBase_html_ad1c4eb746cb1fdd67cf436ff85a9b0f0"><div class="ttname"><a href="classsvm__classifier_1_1MulticlassStrategyBase.html#ad1c4eb746cb1fdd67cf436ff85a9b0f0">svm_classifier::MulticlassStrategyBase::decision_function</a></div><div class="ttdeci">virtual std::vector&lt; std::vector&lt; double &gt; &gt; decision_function(const torch::Tensor &amp;X, DataConverter &amp;converter)=0</div><div class="ttdoc">Get decision function values.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsOneStrategy_html"><div class="ttname"><a href="classsvm__classifier_1_1OneVsOneStrategy.html">svm_classifier::OneVsOneStrategy</a></div><div class="ttdoc">One-vs-One (OvO) multiclass strategy.</div><div class="ttdef"><b>Definition</b> <a href="multiclass__strategy_8hpp_source.html#l00171">multiclass_strategy.hpp:171</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsOneStrategy_html_a16ee2ae3623767af2165fef2d4b7d039"><div class="ttname"><a href="classsvm__classifier_1_1OneVsOneStrategy.html#a16ee2ae3623767af2165fef2d4b7d039">svm_classifier::OneVsOneStrategy::get_n_classes</a></div><div class="ttdeci">int get_n_classes() const override</div><div class="ttdoc">Get number of classes.</div><div class="ttdef"><b>Definition</b> <a href="multiclass__strategy_8hpp_source.html#l00201">multiclass_strategy.hpp:201</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsOneStrategy_html_a52f9c3d7d98077d1dec0d6034711b750"><div class="ttname"><a href="classsvm__classifier_1_1OneVsOneStrategy.html#a52f9c3d7d98077d1dec0d6034711b750">svm_classifier::OneVsOneStrategy::get_classes</a></div><div class="ttdeci">std::vector&lt; int &gt; get_classes() const override</div><div class="ttdoc">Get unique class labels.</div><div class="ttdef"><b>Definition</b> <a href="multiclass__strategy_8hpp_source.html#l00197">multiclass_strategy.hpp:197</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsOneStrategy_html_a6aae0b5cd72180e94212454da8b777d2"><div class="ttname"><a href="classsvm__classifier_1_1OneVsOneStrategy.html#a6aae0b5cd72180e94212454da8b777d2">svm_classifier::OneVsOneStrategy::decision_function</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; double &gt; &gt; decision_function(const torch::Tensor &amp;X, DataConverter &amp;converter) override</div><div class="ttdoc">Get decision function values.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsOneStrategy_html_a6d4b060383169010dda4197a0bffa020"><div class="ttname"><a href="classsvm__classifier_1_1OneVsOneStrategy.html#a6d4b060383169010dda4197a0bffa020">svm_classifier::OneVsOneStrategy::OneVsOneStrategy</a></div><div class="ttdeci">OneVsOneStrategy()</div><div class="ttdoc">Constructor.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsOneStrategy_html_a8875d29cb8666af10e0fb5634e08c0c1"><div class="ttname"><a href="classsvm__classifier_1_1OneVsOneStrategy.html#a8875d29cb8666af10e0fb5634e08c0c1">svm_classifier::OneVsOneStrategy::supports_probability</a></div><div class="ttdeci">bool supports_probability() const override</div><div class="ttdoc">Check if the model supports probability prediction.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsOneStrategy_html_aae80b4e75459b2aca4f561d62c3c5675"><div class="ttname"><a href="classsvm__classifier_1_1OneVsOneStrategy.html#aae80b4e75459b2aca4f561d62c3c5675">svm_classifier::OneVsOneStrategy::get_strategy_type</a></div><div class="ttdeci">MulticlassStrategy get_strategy_type() const override</div><div class="ttdoc">Get strategy type.</div><div class="ttdef"><b>Definition</b> <a href="multiclass__strategy_8hpp_source.html#l00203">multiclass_strategy.hpp:203</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsOneStrategy_html_ab60df2d9b6069a73369b0bf9d3675662"><div class="ttname"><a href="classsvm__classifier_1_1OneVsOneStrategy.html#ab60df2d9b6069a73369b0bf9d3675662">svm_classifier::OneVsOneStrategy::predict</a></div><div class="ttdeci">std::vector&lt; int &gt; predict(const torch::Tensor &amp;X, DataConverter &amp;converter) override</div><div class="ttdoc">Predict class labels.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsOneStrategy_html_ae62e8b24115042d1119e76f3302f6992"><div class="ttname"><a href="classsvm__classifier_1_1OneVsOneStrategy.html#ae62e8b24115042d1119e76f3302f6992">svm_classifier::OneVsOneStrategy::predict_proba</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; double &gt; &gt; predict_proba(const torch::Tensor &amp;X, DataConverter &amp;converter) override</div><div class="ttdoc">Predict class probabilities.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsOneStrategy_html_af5ce4aeb191c5feed178b6465eac66f6"><div class="ttname"><a href="classsvm__classifier_1_1OneVsOneStrategy.html#af5ce4aeb191c5feed178b6465eac66f6">svm_classifier::OneVsOneStrategy::fit</a></div><div class="ttdeci">TrainingMetrics fit(const torch::Tensor &amp;X, const torch::Tensor &amp;y, const KernelParameters &amp;params, DataConverter &amp;converter) override</div><div class="ttdoc">Train the multiclass classifier.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsOneStrategy_html_af9a653b62502e296d0d18092be56344f"><div class="ttname"><a href="classsvm__classifier_1_1OneVsOneStrategy.html#af9a653b62502e296d0d18092be56344f">svm_classifier::OneVsOneStrategy::~OneVsOneStrategy</a></div><div class="ttdeci">~OneVsOneStrategy() override</div><div class="ttdoc">Destructor.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsRestStrategy_html"><div class="ttname"><a href="classsvm__classifier_1_1OneVsRestStrategy.html">svm_classifier::OneVsRestStrategy</a></div><div class="ttdoc">One-vs-Rest (OvR) multiclass strategy.</div><div class="ttdef"><b>Definition</b> <a href="multiclass__strategy_8hpp_source.html#l00099">multiclass_strategy.hpp:99</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsRestStrategy_html_a200300198628ac119eac09e62ff62336"><div class="ttname"><a href="classsvm__classifier_1_1OneVsRestStrategy.html#a200300198628ac119eac09e62ff62336">svm_classifier::OneVsRestStrategy::supports_probability</a></div><div class="ttdeci">bool supports_probability() const override</div><div class="ttdoc">Check if the model supports probability prediction.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsRestStrategy_html_a30f146a564a9c9681524593cacbb43e7"><div class="ttname"><a href="classsvm__classifier_1_1OneVsRestStrategy.html#a30f146a564a9c9681524593cacbb43e7">svm_classifier::OneVsRestStrategy::OneVsRestStrategy</a></div><div class="ttdeci">OneVsRestStrategy()</div><div class="ttdoc">Constructor.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsRestStrategy_html_a53abe89ec25c33fd9c32d92ba08d01ed"><div class="ttname"><a href="classsvm__classifier_1_1OneVsRestStrategy.html#a53abe89ec25c33fd9c32d92ba08d01ed">svm_classifier::OneVsRestStrategy::get_n_classes</a></div><div class="ttdeci">int get_n_classes() const override</div><div class="ttdoc">Get number of classes.</div><div class="ttdef"><b>Definition</b> <a href="multiclass__strategy_8hpp_source.html#l00129">multiclass_strategy.hpp:129</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsRestStrategy_html_a55639e5adaadcd6414b50d5ebf0d1cd2"><div class="ttname"><a href="classsvm__classifier_1_1OneVsRestStrategy.html#a55639e5adaadcd6414b50d5ebf0d1cd2">svm_classifier::OneVsRestStrategy::predict_proba</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; double &gt; &gt; predict_proba(const torch::Tensor &amp;X, DataConverter &amp;converter) override</div><div class="ttdoc">Predict class probabilities.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsRestStrategy_html_a5e10800b16dbc66fd1c0d5e0a42871f0"><div class="ttname"><a href="classsvm__classifier_1_1OneVsRestStrategy.html#a5e10800b16dbc66fd1c0d5e0a42871f0">svm_classifier::OneVsRestStrategy::get_classes</a></div><div class="ttdeci">std::vector&lt; int &gt; get_classes() const override</div><div class="ttdoc">Get unique class labels.</div><div class="ttdef"><b>Definition</b> <a href="multiclass__strategy_8hpp_source.html#l00125">multiclass_strategy.hpp:125</a></div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsRestStrategy_html_a771903a821d5380ddd5d0b3a912e7df9"><div class="ttname"><a href="classsvm__classifier_1_1OneVsRestStrategy.html#a771903a821d5380ddd5d0b3a912e7df9">svm_classifier::OneVsRestStrategy::predict</a></div><div class="ttdeci">std::vector&lt; int &gt; predict(const torch::Tensor &amp;X, DataConverter &amp;converter) override</div><div class="ttdoc">Predict class labels.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsRestStrategy_html_a966b79bc8b6fac0fa78feefc2dd8a878"><div class="ttname"><a href="classsvm__classifier_1_1OneVsRestStrategy.html#a966b79bc8b6fac0fa78feefc2dd8a878">svm_classifier::OneVsRestStrategy::decision_function</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; double &gt; &gt; decision_function(const torch::Tensor &amp;X, DataConverter &amp;converter) override</div><div class="ttdoc">Get decision function values.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsRestStrategy_html_aae14da8c0effd04731b5a4a0181eb1b6"><div class="ttname"><a href="classsvm__classifier_1_1OneVsRestStrategy.html#aae14da8c0effd04731b5a4a0181eb1b6">svm_classifier::OneVsRestStrategy::fit</a></div><div class="ttdeci">TrainingMetrics fit(const torch::Tensor &amp;X, const torch::Tensor &amp;y, const KernelParameters &amp;params, DataConverter &amp;converter) override</div><div class="ttdoc">Train the multiclass classifier.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsRestStrategy_html_acfd698dd6cc0a988ac642a00d1f0b970"><div class="ttname"><a href="classsvm__classifier_1_1OneVsRestStrategy.html#acfd698dd6cc0a988ac642a00d1f0b970">svm_classifier::OneVsRestStrategy::~OneVsRestStrategy</a></div><div class="ttdeci">~OneVsRestStrategy() override</div><div class="ttdoc">Destructor.</div></div>
<div class="ttc" id="aclasssvm__classifier_1_1OneVsRestStrategy_html_af9e1bd6d08ce3e7afd5279c835ce6cfb"><div class="ttname"><a href="classsvm__classifier_1_1OneVsRestStrategy.html#af9e1bd6d08ce3e7afd5279c835ce6cfb">svm_classifier::OneVsRestStrategy::get_strategy_type</a></div><div class="ttdeci">MulticlassStrategy get_strategy_type() const override</div><div class="ttdoc">Get strategy type.</div><div class="ttdef"><b>Definition</b> <a href="multiclass__strategy_8hpp_source.html#l00131">multiclass_strategy.hpp:131</a></div></div>
<div class="ttc" id="astructsvm__classifier_1_1TrainingMetrics_html"><div class="ttname"><a href="structsvm__classifier_1_1TrainingMetrics.html">svm_classifier::TrainingMetrics</a></div><div class="ttdoc">Training metrics structure.</div><div class="ttdef"><b>Definition</b> <a href="types_8hpp_source.html#l00059">types.hpp:59</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Jun 22 2025 11:25:27 for SVM Classifier C++ by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>

BIN
nav_f.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

BIN
nav_fd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 B

BIN
nav_g.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

BIN
nav_h.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

BIN
nav_hd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

BIN
open.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

9
plus.svg Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<g>
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
<rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
<rect style="fill:#808080;stroke-width:0" width="15.874998" height="52.916668" x="44.979168" y="26.458332" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 696 B

9
plusd.svg Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<g>
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
<rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
<rect style="fill:#808080;stroke-width:0" width="15.874998" height="52.916668" x="44.979168" y="26.458332" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 696 B

4
search/all_0.js Normal file
View File

@@ -0,0 +1,4 @@
var searchData=
[
['accuracy_0',['accuracy',['../structsvm__classifier_1_1EvaluationMetrics.html#abe60e87c99b8b3c4499e602d8c26847a',1,'svm_classifier::EvaluationMetrics']]]
];

9
search/all_1.js Normal file
View File

@@ -0,0 +1,9 @@
var searchData=
[
['c_0',['SVM Classifier C++',['../index.html',1,'']]],
['classes_5f_1',['classes_',['../classsvm__classifier_1_1MulticlassStrategyBase.html#a15bb6eb53e91e604b259b3050bd40e27',1,'svm_classifier::MulticlassStrategyBase']]],
['classifier_20c_2',['SVM Classifier C++',['../index.html',1,'']]],
['cleanup_3',['cleanup',['../classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8',1,'svm_classifier::DataConverter::cleanup()'],['../classsvm__classifier_1_1DataConverter.html#a46d12ba28c4c5bf6e0fad1122c621fa8',1,'svm_classifier::DataConverter::cleanup()']]],
['confusion_5fmatrix_4',['confusion_matrix',['../structsvm__classifier_1_1EvaluationMetrics.html#a843fbb476ae6bf24d7f72dabc3ef334a',1,'svm_classifier::EvaluationMetrics']]],
['cross_5fvalidate_5',['cross_validate',['../classsvm__classifier_1_1SVMClassifier.html#a4c91072ea0d3d9b97ba458ff7d0898b8',1,'svm_classifier::SVMClassifier']]]
];

8
search/all_10.js Normal file
View File

@@ -0,0 +1,8 @@
var searchData=
[
['_7edataconverter_0',['~dataconverter',['../classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d',1,'svm_classifier::DataConverter::~DataConverter()'],['../classsvm__classifier_1_1DataConverter.html#ac3af2c9c03cffe2968f29147611e333d',1,'svm_classifier::DataConverter::~DataConverter()']]],
['_7emulticlassstrategybase_1',['~MulticlassStrategyBase',['../classsvm__classifier_1_1MulticlassStrategyBase.html#a8a5647dd57eed281288f0c9011b11395',1,'svm_classifier::MulticlassStrategyBase']]],
['_7eonevsonestrategy_2',['~OneVsOneStrategy',['../classsvm__classifier_1_1OneVsOneStrategy.html#af9a653b62502e296d0d18092be56344f',1,'svm_classifier::OneVsOneStrategy']]],
['_7eonevsreststrategy_3',['~OneVsRestStrategy',['../classsvm__classifier_1_1OneVsRestStrategy.html#acfd698dd6cc0a988ac642a00d1f0b970',1,'svm_classifier::OneVsRestStrategy']]],
['_7esvmclassifier_4',['~SVMClassifier',['../classsvm__classifier_1_1SVMClassifier.html#a233584f6696969ce1a402624fd046146',1,'svm_classifier::SVMClassifier']]]
];

6
search/all_2.js Normal file
View File

@@ -0,0 +1,6 @@
var searchData=
[
['dataconverter_0',['dataconverter',['../classsvm__classifier_1_1DataConverter.html',1,'svm_classifier::DataConverter'],['../classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056',1,'svm_classifier::DataConverter::DataConverter()'],['../classsvm__classifier_1_1DataConverter.html#a5874904555f26448ed5ae4cf6f370056',1,'svm_classifier::DataConverter::DataConverter()']]],
['decision_5ffunction_1',['decision_function',['../classsvm__classifier_1_1MulticlassStrategyBase.html#ad1c4eb746cb1fdd67cf436ff85a9b0f0',1,'svm_classifier::MulticlassStrategyBase::decision_function()'],['../classsvm__classifier_1_1OneVsRestStrategy.html#a966b79bc8b6fac0fa78feefc2dd8a878',1,'svm_classifier::OneVsRestStrategy::decision_function()'],['../classsvm__classifier_1_1OneVsOneStrategy.html#a6aae0b5cd72180e94212454da8b777d2',1,'svm_classifier::OneVsOneStrategy::decision_function()'],['../classsvm__classifier_1_1SVMClassifier.html#ad153c0537998eae5fbca5fd0b5ead2b7',1,'svm_classifier::SVMClassifier::decision_function()']]],
['decision_5fvalues_2',['decision_values',['../structsvm__classifier_1_1PredictionResult.html#a1ba501fdd3da8d3c4b99285b2f71c1d9',1,'svm_classifier::PredictionResult']]]
];

5
search/all_3.js Normal file
View File

@@ -0,0 +1,5 @@
var searchData=
[
['evaluate_0',['evaluate',['../classsvm__classifier_1_1SVMClassifier.html#a38a9b020b9f4f9254920c97a3a047e9b',1,'svm_classifier::SVMClassifier']]],
['evaluationmetrics_1',['EvaluationMetrics',['../structsvm__classifier_1_1EvaluationMetrics.html',1,'svm_classifier']]]
];

8
search/all_4.js Normal file
View File

@@ -0,0 +1,8 @@
var searchData=
[
['f1_5fscore_0',['f1_score',['../structsvm__classifier_1_1EvaluationMetrics.html#a0eca4a2bc01318bb641f384abd0a47bc',1,'svm_classifier::EvaluationMetrics']]],
['fit_1',['fit',['../classsvm__classifier_1_1MulticlassStrategyBase.html#a548af7201b7970abee0c31e7ec07d896',1,'svm_classifier::MulticlassStrategyBase::fit()'],['../classsvm__classifier_1_1OneVsRestStrategy.html#aae14da8c0effd04731b5a4a0181eb1b6',1,'svm_classifier::OneVsRestStrategy::fit()'],['../classsvm__classifier_1_1OneVsOneStrategy.html#af5ce4aeb191c5feed178b6465eac66f6',1,'svm_classifier::OneVsOneStrategy::fit()'],['../classsvm__classifier_1_1SVMClassifier.html#a7e6648c4d2bac92bb00381076ea92db3',1,'svm_classifier::SVMClassifier::fit()']]],
['from_5fdecision_5fvalues_2',['from_decision_values',['../classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f',1,'svm_classifier::DataConverter::from_decision_values(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;decision_values)'],['../classsvm__classifier_1_1DataConverter.html#a503eba54e8bb1f370e04b6e24354a32f',1,'svm_classifier::DataConverter::from_decision_values(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;decision_values)']]],
['from_5fpredictions_3',['from_predictions',['../classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741',1,'svm_classifier::DataConverter::from_predictions(const std::vector&lt; double &gt; &amp;predictions)'],['../classsvm__classifier_1_1DataConverter.html#ab3e800a5016a915e9912d5873bb48741',1,'svm_classifier::DataConverter::from_predictions(const std::vector&lt; double &gt; &amp;predictions)']]],
['from_5fprobabilities_4',['from_probabilities',['../classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff',1,'svm_classifier::DataConverter::from_probabilities(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;probabilities)'],['../classsvm__classifier_1_1DataConverter.html#a5460485675613c54596418af3d5057ff',1,'svm_classifier::DataConverter::from_probabilities(const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;probabilities)']]]
];

16
search/all_5.js Normal file
View File

@@ -0,0 +1,16 @@
var searchData=
[
['get_5fclasses_0',['get_classes',['../classsvm__classifier_1_1OneVsRestStrategy.html#a5e10800b16dbc66fd1c0d5e0a42871f0',1,'svm_classifier::OneVsRestStrategy::get_classes()'],['../classsvm__classifier_1_1OneVsOneStrategy.html#a52f9c3d7d98077d1dec0d6034711b750',1,'svm_classifier::OneVsOneStrategy::get_classes()'],['../classsvm__classifier_1_1SVMClassifier.html#af0fea42cdfc9416ed854b0d4aefa82b9',1,'svm_classifier::SVMClassifier::get_classes()'],['../classsvm__classifier_1_1MulticlassStrategyBase.html#a379c4000227cc46410bfbecce6e80c33',1,'svm_classifier::MulticlassStrategyBase::get_classes()']]],
['get_5ffeature_5fimportance_1',['get_feature_importance',['../classsvm__classifier_1_1SVMClassifier.html#a2ade33562381e34cbe4b04089545a715',1,'svm_classifier::SVMClassifier']]],
['get_5fkernel_5ftype_2',['get_kernel_type',['../classsvm__classifier_1_1SVMClassifier.html#a55338ab396bd5da923b6acbef8ed783a',1,'svm_classifier::SVMClassifier']]],
['get_5fmulticlass_5fstrategy_3',['get_multiclass_strategy',['../classsvm__classifier_1_1SVMClassifier.html#a14c2f7917c8a91154c09160288509f2c',1,'svm_classifier::SVMClassifier']]],
['get_5fn_5fclasses_4',['get_n_classes',['../classsvm__classifier_1_1MulticlassStrategyBase.html#a1740d877a4d634ec1763cb8646f5e172',1,'svm_classifier::MulticlassStrategyBase::get_n_classes()'],['../classsvm__classifier_1_1OneVsRestStrategy.html#a53abe89ec25c33fd9c32d92ba08d01ed',1,'svm_classifier::OneVsRestStrategy::get_n_classes()'],['../classsvm__classifier_1_1OneVsOneStrategy.html#a16ee2ae3623767af2165fef2d4b7d039',1,'svm_classifier::OneVsOneStrategy::get_n_classes()'],['../classsvm__classifier_1_1SVMClassifier.html#a75d501339e2e2273082b0838e9caadcd',1,'svm_classifier::SVMClassifier::get_n_classes()']]],
['get_5fn_5ffeatures_5',['get_n_features',['../classsvm__classifier_1_1DataConverter.html#a26342a8cc8b943f099112040aa960ae6',1,'svm_classifier::DataConverter::get_n_features()'],['../classsvm__classifier_1_1SVMClassifier.html#a780afcb2ad618e46541aff8a44e9c7b4',1,'svm_classifier::SVMClassifier::get_n_features()'],['../classsvm__classifier_1_1DataConverter.html#a26342a8cc8b943f099112040aa960ae6',1,'svm_classifier::DataConverter::get_n_features() const']]],
['get_5fn_5fsamples_6',['get_n_samples',['../classsvm__classifier_1_1DataConverter.html#a16999ded27bc2d42d2ebd9551b00c1cb',1,'svm_classifier::DataConverter::get_n_samples() const'],['../classsvm__classifier_1_1DataConverter.html#a16999ded27bc2d42d2ebd9551b00c1cb',1,'svm_classifier::DataConverter::get_n_samples() const']]],
['get_5fparameters_7',['get_parameters',['../classsvm__classifier_1_1SVMClassifier.html#a7c39ec09b15186dcb4f04ae7171d23bb',1,'svm_classifier::SVMClassifier']]],
['get_5fsparse_5fthreshold_8',['get_sparse_threshold',['../classsvm__classifier_1_1DataConverter.html#a1905f60fef9ffd3a8e8e45e41395352d',1,'svm_classifier::DataConverter::get_sparse_threshold() const'],['../classsvm__classifier_1_1DataConverter.html#a1905f60fef9ffd3a8e8e45e41395352d',1,'svm_classifier::DataConverter::get_sparse_threshold() const']]],
['get_5fstrategy_5ftype_9',['get_strategy_type',['../classsvm__classifier_1_1MulticlassStrategyBase.html#a31a0501fa1a6db1d41cbf825b2348e47',1,'svm_classifier::MulticlassStrategyBase::get_strategy_type()'],['../classsvm__classifier_1_1OneVsRestStrategy.html#af9e1bd6d08ce3e7afd5279c835ce6cfb',1,'svm_classifier::OneVsRestStrategy::get_strategy_type()'],['../classsvm__classifier_1_1OneVsOneStrategy.html#aae80b4e75459b2aca4f561d62c3c5675',1,'svm_classifier::OneVsOneStrategy::get_strategy_type()']]],
['get_5fsvm_5flibrary_10',['get_svm_library',['../classsvm__classifier_1_1SVMClassifier.html#a38173e5cf0f6a4620f032fd54c28d592',1,'svm_classifier::SVMClassifier']]],
['get_5ftraining_5fmetrics_11',['get_training_metrics',['../classsvm__classifier_1_1SVMClassifier.html#a0b8c77f81d84489b2da0d080773a2970',1,'svm_classifier::SVMClassifier']]],
['grid_5fsearch_12',['grid_search',['../classsvm__classifier_1_1SVMClassifier.html#afed66a704dfb38cc7d080d3337d10194',1,'svm_classifier::SVMClassifier']]]
];

Some files were not shown because too many files have changed in this diff Show More