Fix predict_proba_spode
This commit is contained in:
@@ -316,41 +316,43 @@ namespace platform {
|
|||||||
// We multiply p(c) * p(x_sp| c) * p(x_i| c, x_sp).
|
// We multiply p(c) * p(x_sp| c) * p(x_i| c, x_sp).
|
||||||
// Then normalize the distribution.
|
// Then normalize the distribution.
|
||||||
//
|
//
|
||||||
// std::vector<double> predict_proba_spode(const std::vector<int>& instance, int parent)
|
std::vector<double> predict_proba_spode(const std::vector<int>& instance, int parent)
|
||||||
// {
|
{
|
||||||
// // accumulates posterior probabilities for each class
|
// accumulates posterior probabilities for each class
|
||||||
// auto probs = std::vector<double>(statesClass_);
|
auto probs = std::vector<double>(statesClass_);
|
||||||
// auto spodeProbs = std::vector<double>(statesClass_);
|
auto spodeProbs = std::vector<double>(statesClass_);
|
||||||
// // Initialize the probabilities with the feature|class probabilities
|
// Initialize the probabilities with the feature|class probabilities x class priors
|
||||||
// int localOffset;
|
int localOffset;
|
||||||
// int sp = instance[parent];
|
int sp = instance[parent];
|
||||||
// localOffset = (featureClassOffset_[parent] + sp) * statesClass_;
|
localOffset = (featureClassOffset_[parent] + sp) * statesClass_;
|
||||||
// for (int c = 0; c < statesClass_; ++c) {
|
for (int c = 0; c < statesClass_; ++c) {
|
||||||
// spodeProbs[c] = classFeatureProbs_[localOffset + c] * classPriors_[c];
|
spodeProbs[c] = classFeatureProbs_[localOffset + c] * classPriors_[c];
|
||||||
// }
|
}
|
||||||
// int idx, base, sc, parent_offset;
|
int idx, base, sc, parent_offset;
|
||||||
// sp = instance[parent];
|
sp = instance[parent];
|
||||||
// parent_offset = pairOffset_[featureClassOffset_[parent] + sp];
|
parent_offset = pairOffset_[featureClassOffset_[parent] + sp];
|
||||||
// for (int child = 0; child < parent; ++child) {
|
for (int child = 0; child < nFeatures_; ++child) {
|
||||||
// sc = instance[child];
|
if (child == parent) {
|
||||||
// base = (parent_offset + featureClassOffset_[child] + sc) * statesClass_;
|
continue;
|
||||||
// for (int c = 0; c < statesClass_; ++c) {
|
}
|
||||||
// /*
|
sc = instance[child];
|
||||||
// * The probability P(xc|xp,c) is stored in dataOpp_, and
|
base = (parent_offset + featureClassOffset_[child] + sc) * statesClass_;
|
||||||
// * the probability P(xp|xc,c) is stored in data_
|
for (int c = 0; c < statesClass_; ++c) {
|
||||||
// */
|
/*
|
||||||
// idx = base + c;
|
* The probability P(xc|xp,c) is stored in dataOpp_, and
|
||||||
// spodeProbs[c] *= data_[idx];
|
* the probability P(xp|xc,c) is stored in data_
|
||||||
// spodeProbs[c] *= dataOpp_[idx];
|
*/
|
||||||
// }
|
idx = base + c;
|
||||||
// }
|
spodeProbs[c] *= child < parent ? dataOpp_[idx] : data_[idx];
|
||||||
// // Normalize the probabilities
|
}
|
||||||
// normalize(spodeProbs);
|
}
|
||||||
// return spodeProbs;
|
// Normalize the probabilities
|
||||||
// }
|
normalize(spodeProbs);
|
||||||
|
return spodeProbs;
|
||||||
|
}
|
||||||
int predict_spode(const std::vector<int>& instance, int parent)
|
int predict_spode(const std::vector<int>& instance, int parent)
|
||||||
{
|
{
|
||||||
auto probs = predict_proba(instance, parent);
|
auto probs = predict_proba_spode(instance, parent);
|
||||||
return (int)std::distance(probs.begin(), std::max_element(probs.begin(), probs.end()));
|
return (int)std::distance(probs.begin(), std::max_element(probs.begin(), probs.end()));
|
||||||
}
|
}
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
@@ -363,8 +365,7 @@ namespace platform {
|
|||||||
// We multiply p(c) * p(x_i| c) * p(x_j| c, x_i) for all i, j.
|
// We multiply p(c) * p(x_i| c) * p(x_j| c, x_i) for all i, j.
|
||||||
// Then normalize the distribution.
|
// Then normalize the distribution.
|
||||||
//
|
//
|
||||||
// if spode != -1, we only return the probabilities for that spode
|
std::vector<double> predict_proba(const std::vector<int>& instance)
|
||||||
std::vector<double> predict_proba(const std::vector<int>& instance, int spode = -1)
|
|
||||||
{
|
{
|
||||||
// accumulates posterior probabilities for each class
|
// accumulates posterior probabilities for each class
|
||||||
auto probs = std::vector<double>(statesClass_);
|
auto probs = std::vector<double>(statesClass_);
|
||||||
@@ -403,11 +404,6 @@ namespace platform {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (spode != -1) {
|
|
||||||
// no need to use significance_models_ if we are predicting with a single spode
|
|
||||||
normalize(spodeProbs[spode]);
|
|
||||||
return spodeProbs[spode];
|
|
||||||
}
|
|
||||||
/* add all the probabilities for each class */
|
/* add all the probabilities for each class */
|
||||||
for (int c = 0; c < statesClass_; ++c) {
|
for (int c = 0; c < statesClass_; ++c) {
|
||||||
for (int i = 0; i < nFeatures_; ++i) {
|
for (int i = 0; i < nFeatures_; ++i) {
|
||||||
|
Reference in New Issue
Block a user