template class MulticlassClassifier; template class MulticlassClassifierFactory; template class BinaryClassifierMulticlass : public BinaryClassifier { public: BinaryClassifierMulticlass(MulticlassClassifier &Learner) { _Learner = &Learner; } void Train(const Dataset &Examples, UINT Class0Index, UINT Class1Index) { _Class0Index = Class0Index; _Class1Index = Class1Index; _Learner->Train(Examples); } void Evaluate(const LearnerInput &Input, UINT &Class, double &ProbabilityClass0) const { _Learner->Evaluate(Input, Class, _ClassProbabilitiesStorage); ProbabilityClass0 = _ClassProbabilitiesStorage[_Class0Index]; } UINT Class0Index() const { return _Class0Index; } UINT Class1Index() const { return _Class1Index; } private: UINT _Class0Index, _Class1Index; mutable Vector _ClassProbabilitiesStorage; MulticlassClassifier *_Learner; }; template class BinaryClassifierFactoryMulticlass : public BinaryClassifierFactory { public: BinaryClassifierFactoryMulticlass() {} BinaryClassifierFactoryMulticlass(const MulticlassClassifierFactory *MulticlassFactory) { _MulticlassFactory = MulticlassFactory; } void Configure(const MulticlassClassifierFactory *MulticlassFactory) { _MulticlassFactory = MulticlassFactory; } BinaryClassifier* MakeClassifier() const { MulticlassClassifier *MulticlassLearner = _MulticlassFactory->MakeClassifier(); BinaryClassifierMulticlass *BinaryLearner = new BinaryClassifierMulticlass(*MulticlassLearner); return BinaryLearner; } private: const MulticlassClassifierFactory *_MulticlassFactory; };