35 #ifndef SHARK_MODELS_ONEVERSUSONE_H 36 #define SHARK_MODELS_ONEVERSUSONE_H 61 template <
class InputType>
78 {
return "OneVersusOneClassifier"; }
85 RealVector ret(total);
87 for (std::size_t i=0; i<
m_binary.size(); i++)
89 std::size_t n =
m_binary[i]->numberOfParameters();
90 RealVectorRange(ret,
Range(used, used + n)) =
m_binary[i]->parameterVector();
99 for (std::size_t i=0; i<
m_binary.size(); i++)
101 std::size_t n =
m_binary[i]->numberOfParameters();
102 m_binary[i]->setParameterVector(ConstRealVectorRange(newParameters,
Range(used, used + n)));
106 "[OneVersusOneClassifier::setParameterVector] invalid number of parameters");
113 for (std::size_t i=0; i<
m_binary.size(); i++)
130 binary_classifier_type
const&
binary(
unsigned int class_one,
unsigned int class_zero)
const 134 unsigned int index = class_one * (class_zero - 1) / 2 + class_zero;
146 void addClass(std::vector<binary_classifier_type*>
const& binmodels)
148 SHARK_CHECK(binmodels.size() ==
m_classes,
"[OneVersusOneClassifier::addClass] wrong number of binary models");
154 return boost::shared_ptr<State>(
new EmptyState());
161 BatchInputType
const & patterns, BatchOutputType& output,
State& state
163 std::size_t numPatterns =
size(patterns);
164 output.resize(numPatterns);
173 UIntVector bin(numPatterns);
175 for (
unsigned int i=0, c=0; c<
m_classes; c++)
177 for (std::size_t e=0; e<c; e++, i++)
180 for(std::size_t p = 0; p != numPatterns; ++p){
190 for(std::size_t p = 0; p != numPatterns; ++p){
191 for (
unsigned int c=1; c <
m_classes; c++){
192 if (votes(p,c) > votes(p,output(p)))