1#ifndef FSTCRITERIONMULTINOMBHATTACHARYYA_H
2#define FSTCRITERIONMULTINOMBHATTACHARYYA_H
99template<
class RETURNTYPE,
typename DATATYPE,
typename REALTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR>
100class Criterion_Multinomial_Bhattacharyya :
public Clonable_Impl<Criterion_Multinomial_Bhattacharyya<RETURNTYPE,DATATYPE,REALTYPE,IDXTYPE,DIMTYPE,SUBSET,DATAACCESSOR>,Criterion_Multinomial<RETURNTYPE,DATATYPE,REALTYPE,IDXTYPE,DIMTYPE,SUBSET,DATAACCESSOR> > {
106 Criterion_Multinomial_Bhattacharyya() {
_IB_computed=
false;
notify(
"Criterion_Multinomial_Bhattacharyya constructor.");}
115 virtual std::ostream&
print(std::ostream& os)
const override {os <<
"Criterion_Multinomial_Bhattacharyya()";
return os;}
119 Criterion_Multinomial_Bhattacharyya(
const Criterion_Multinomial_Bhattacharyya& cmb);
124template<
class RETURNTYPE,
typename DATATYPE,
typename REALTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR>
125Criterion_Multinomial_Bhattacharyya<RETURNTYPE,DATATYPE,REALTYPE,IDXTYPE,DIMTYPE,SUBSET,DATAACCESSOR>::Criterion_Multinomial_Bhattacharyya(
const Criterion_Multinomial_Bhattacharyya& cmb) :
129 notify(
"Criterion_Multinomial_Bhattacharyya copy-constructor.");
134template<
class RETURNTYPE,
typename DATATYPE,
typename REALTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR>
137 notify(
"Criterion_Multinomial_Bhattacharyya::evaluate().");
141 if(sub->get_d_raw()==0)
return false;
142 DIMTYPE _d = sub->get_d_raw();
153 auto r=sub->selected_features();
auto it=r.begin();
154 if(!(it!=r.end()))
return false;
157 assert(f<parent::_model->
get_n());
165 REALTYPE *tmpoint1, *tmpoint2;
167 RETURNTYPE value=0.0;
173 std::ostringstream sos; sos <<
"d="<<_d<<
", doc_avg_length="<<doc_avg_length<<std::endl;
177 for(c1=0;c1<_classes;c1++)
for(c2=c1+1;c2<_classes;c2++)
184 thetasum+=sqrt(tmpoint1[f]*tmpoint2[f]);
187 std::ostringstream sos; sos <<
"classes<"<<c1<<
","<<c2<<
">: feat "<<f<<
".thetasum="<<thetasum<<
", tmpoint1[i="<<f<<
"]="<< tmpoint1[f]<<
", tmpoint2[i="<<f<<
"]="<< tmpoint2[f]<<std::endl;
194 result = (-doc_avg_length)*value;
197 std::ostringstream sos; sos <<
"result="<<result<<std::endl<<std::endl;
205template<
class RETURNTYPE,
typename DATATYPE,
typename REALTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR>
208 notify(
"Criterion_Multinomial_Bhattacharyya::initialize().");
223template<
class RETURNTYPE,
typename DATATYPE,
typename REALTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR>
224class Criterion_Multinomial_MI :
public Clonable_Impl<Criterion_Multinomial_MI<RETURNTYPE,DATATYPE,REALTYPE,IDXTYPE,DIMTYPE,SUBSET,DATAACCESSOR>,Criterion_Multinomial<RETURNTYPE,DATATYPE,REALTYPE,IDXTYPE,DIMTYPE,SUBSET,DATAACCESSOR> > {
230 Criterion_Multinomial_MI() {
_MI_computed=
false;
notify(
"Criterion_Multinomial_MI constructor.");}
237 virtual std::ostream&
print(std::ostream& os)
const override {os <<
"Criterion_Multinomial_MI()";
return os;}
245template<
class RETURNTYPE,
typename DATATYPE,
typename REALTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR>
248 notify(
"Criterion_Multinomial_MI::evaluate().");
252 if(sub->get_d_raw()==0)
return false;
264 for(DIMTYPE f : sub->selected_features()) {
265 assert(f<parent::_model->
get_n());
269 if(!any)
return false;
274template<
class RETURNTYPE,
typename DATATYPE,
typename REALTYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR>
277 notify(
"Criterion_Multinomial_MI::initialize().");
CRTP mixin implementing the Clonable protocol for a concrete class.
Definition clonable.hpp:184
Implements Bhattacharyya distance based on multinomial model to serve as feature selection criterion.
Definition criterion_multinom_bhattacharyya.hpp:100
virtual bool initialize(PDataAccessor da) override
learns the model (parent::initialize()) and resets the lazily-computed individual-Bhattacharyya cache
Definition criterion_multinom_bhattacharyya.hpp:206
bool _IB_computed
true once the per-feature individual-Bhattacharyya cache (Model_Multinomial::get_IB()) has been compu...
Definition criterion_multinom_bhattacharyya.hpp:121
std::shared_ptr< DATAACCESSOR > PDataAccessor
shared pointer to the data accessor the model is learned from
Definition criterion_multinom_bhattacharyya.hpp:104
Criterion_Multinomial< RETURNTYPE, DATATYPE, REALTYPE, IDXTYPE, DIMTYPE, SUBSET, DATAACCESSOR > parent
base class: the multinomial-model learning/interface skeleton
Definition criterion_multinom_bhattacharyya.hpp:102
Clonable_Impl< Criterion_Multinomial_Bhattacharyya, parent > parent_impl
implements clone(); sharing/stateless_clone throw in Criterion
Definition criterion_multinom_bhattacharyya.hpp:103
virtual std::ostream & print(std::ostream &os) const override
writes a human-readable identification of the object; base default writes nothing
Definition criterion_multinom_bhattacharyya.hpp:115
virtual bool evaluate(RETURNTYPE &result, const PSubset sub) override
Scores sub: the general multinomial Bhattacharyya distance over class pairs, or (on a singleton) the ...
Definition criterion_multinom_bhattacharyya.hpp:135
std::shared_ptr< SUBSET > PSubset
shared pointer to the feature subset being evaluated
Definition criterion_multinom_bhattacharyya.hpp:105
Implements individual Mutual Information based on multinomial model to serve as feature selection cri...
Definition criterion_multinom_bhattacharyya.hpp:224
Criterion_Multinomial< RETURNTYPE, DATATYPE, REALTYPE, IDXTYPE, DIMTYPE, SUBSET, DATAACCESSOR > parent
base class: the multinomial-model learning/interface skeleton
Definition criterion_multinom_bhattacharyya.hpp:226
Clonable_Impl< Criterion_Multinomial_MI, parent > parent_impl
implements clone(); sharing/stateless_clone throw in Criterion
Definition criterion_multinom_bhattacharyya.hpp:227
Criterion_Multinomial_MI(const Criterion_Multinomial_MI &cmi)
Copy-constructor; copies _MI_computed (base _model copied by parent_impl).
Definition criterion_multinom_bhattacharyya.hpp:241
bool _MI_computed
true once the per-feature individual-MI cache (Model_Multinomial::get_MI()) has been computed for the...
Definition criterion_multinom_bhattacharyya.hpp:242
std::shared_ptr< SUBSET > PSubset
shared pointer to the feature subset being evaluated
Definition criterion_multinom_bhattacharyya.hpp:229
virtual bool initialize(PDataAccessor da) override
learns the model (parent::initialize()) and resets the lazily-computed individual-MI cache
Definition criterion_multinom_bhattacharyya.hpp:275
std::shared_ptr< DATAACCESSOR > PDataAccessor
shared pointer to the data accessor the model is learned from
Definition criterion_multinom_bhattacharyya.hpp:228
virtual bool evaluate(RETURNTYPE &result, const PSubset sub) override
Scores sub as the sum of per-feature individual Mutual Information values over its selected features.
Definition criterion_multinom_bhattacharyya.hpp:246
virtual std::ostream & print(std::ostream &os) const override
writes a human-readable identification of the object; base default writes nothing
Definition criterion_multinom_bhattacharyya.hpp:237
Abstract class, defines interface for feature selection criterion implementations based on multinomia...
Definition criterion_multinom.hpp:96
std::unique_ptr< Model_Multinomial< DATATYPE, REALTYPE, IDXTYPE, DIMTYPE, SUBSET, DATAACCESSOR > > _model
the learned per-class multinomial (term-probability) model
Definition criterion_multinom.hpp:121
virtual bool initialize(PDataAccessor da)
learns the multinomial model from da; subclasses must call this base before their own initialize() wo...
Definition criterion_multinom.hpp:139
DIMTYPE get_n() const
the full (raw, unnarrowed) feature count the model was learned for
Definition criterion_multinom.hpp:114
static void print(std::ostream &os, std::ostringstream &sos)
Writes sos's buffered content to os, serializing concurrent writers under FST_THREADED via a shared m...
Definition global.hpp:86
Defines interface for feature selection criterion implementations based on multinomial model.
FST4 specific error passing class.
Implements multinomial model.
The Feature Selection Toolbox 4 library: every library component – data access, criteria and classifi...
Definition data_accessor.hpp:80
void notify(const std::string msg)
Prints msg followed by a newline via syncout::print(); a no-op unless the preprocessor macro DEBUG is...
Definition global.hpp:112