00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "TargetInfo.h"
00019
00020 using namespace std;
00021
00022 TargetInfo::TargetInfo(const TargetInfo& org) { operator=(org); }
00023
00024 TargetInfo& TargetInfo::operator=(const TargetInfo& org) {
00025 _targets.resize(org._targets.size());
00026 _weights.resize(org._weights.size());
00027 _tcov_part.resize(org._tcov_part.size());
00028
00029 _targets = org._targets;
00030 _weights = org._weights;
00031 _tcov_part = org._tcov_part;
00032
00033 _tmean = org._tmean;
00034 _tvar = org._tvar;
00035 _tstd = org._tstd;
00036 _tmed = org._tmed;
00037 return *this;
00038 }
00039
00040
00041 TargetInfo::TargetInfo(const std::valarray<double>& t) {
00042 _weights.resize(0);
00043 _targets.resize(t.size());
00044 _targets = t;
00045
00046 _tmean = _targets.sum()/_targets.size();
00047
00048 _tcov_part.resize(_targets.size());
00049 _tcov_part = _targets;
00050 _tcov_part -= _tmean;
00051
00052 std::valarray<double> tmp = _tcov_part;
00053 tmp = _tcov_part;
00054 tmp *= tmp;
00055
00056 _tvar = tmp.sum() / (tmp.size()-1);
00057 _tstd = sqrt(_tvar);
00058 _tmed = 0;
00059 }
00060
00061 TargetInfo::TargetInfo(const std::valarray<double>& t, const std::valarray<double>& w) {
00062
00063 _targets.resize(t.size());
00064 _weights.resize(w.size());
00065
00066 _targets = t;
00067 _weights = w;
00068
00069 double sumw = _weights.sum();
00070
00071 _weights /= sumw;
00072
00073 _tmean = (_targets * _weights).sum();
00074 _tcov_part.resize(_targets.size());
00075 _tcov_part = _targets;
00076 _tcov_part -= _tmean;
00077
00078 _tvar = (pow(_targets - _tmean, 2.0) * _weights).sum();
00079 _tstd = sqrt(_tvar);
00080 _tmed = 0.;
00081 }
00082
00083
00084 void TargetInfo::set_training_mask(const std::valarray<bool>& tmask) {
00085
00086 TargetInfo tmp;
00087
00088 if (has_weights() ) {
00089 tmp = TargetInfo( _targets[tmask], _weights[tmask]);
00090 } else {
00091 tmp = TargetInfo( _targets[tmask] );
00092 }
00093
00094 _tcov_part.resize(tmp._tcov_part.size());
00095 _tcov_part = tmp._tcov_part;
00096
00097 _tmean = tmp._tmean;
00098 _tvar = tmp._tvar;
00099 _tstd = tmp._tstd;
00100 _tmed = tmp._tmed;
00101
00102 _training_mask.resize(tmask.size());
00103 _training_mask = tmask;
00104 }
00105
00106 struct SortOnTargets
00107 {
00108 const valarray<double>& t;
00109 SortOnTargets(const valarray<double>& v) : t(v) {}
00110
00111 bool operator()(int i, int j) const {
00112 return fabs(t[i]) < fabs(t[j]);
00113 }
00114 };
00115
00116 vector<int> TargetInfo::sort() {
00117
00118 vector<int> ind(_targets.size());
00119 for (unsigned i = 0; i < ind.size(); ++i) { ind[i] = i; }
00120
00121 std::sort(ind.begin(), ind.end(), SortOnTargets(_targets));
00122
00123 valarray<double> tmptargets = _targets;
00124 valarray<double> tmpweights = _weights;
00125 valarray<double> tmpcov = _tcov_part;
00126
00127 for (unsigned i = 0; i < ind.size(); ++i)
00128 {
00129 _targets[i] = tmptargets[ ind[i] ];
00130 _tcov_part[i] = tmpcov[ ind[i] ];
00131 if (_weights.size()) _weights[i] = tmpweights[ ind[i] ];
00132 }
00133
00134 return ind;
00135 }
00136
00137
00138