Exemple #1
0
    CPT1(const DatasetMetadata* metadata, int self, const vector<int>& parents) : CPT(self, parents) {
        Feature* selfFeature = metadata->featureList[self];
        Feature* parentFeature = metadata->classVariable;

        table.resize(selfFeature->getRange());
        for (int i = 0; i < table.size(); ++i)
            table[i].resize(parentFeature->getRange());
    }
Exemple #2
0
double BayesNet::computeMutualInfo(int featureIdxI, int featureIdxJ) const {
    Feature* Y = metadata->classVariable;
    Feature* Xi = metadata->featureList[featureIdxI];
    Feature* Xj = metadata->featureList[featureIdxJ];
    
    int rangeY = Y->getRange();
    int rangeXi = Xi->getRange();
    int rangeXj = Xj->getRange();
    
    vector<int> YOccurance;
    YOccurance.resize(rangeY);
    vector<vector<int> > YXiOccurance;
    YXiOccurance.resize(rangeY);
    for (int valY = 0; valY < rangeY; ++valY)
        YXiOccurance[valY].resize(rangeXi);
    vector<vector<int> > YXjOccurance;
    YXjOccurance.resize(rangeY);
    for (int valY = 0; valY < rangeY; ++valY)
        YXjOccurance[valY].resize(rangeXj);
    vector<vector<vector<int> > > YXiXjOccurance;
    YXiXjOccurance.resize(rangeY);
    for (int valY = 0; valY < rangeY; ++valY) {
        YXiXjOccurance[valY].resize(rangeXi);
        for (int valXi = 0; valXi < rangeXi; ++valXi)
            YXiXjOccurance[valY][valXi].resize(rangeXj);
    }
    
    for (int i = 0; i < instances.size(); ++i) {
        Instance* inst = instances[i];
        int valY = (int)round(inst->classLabel);
        int valXi = (int)round(inst->featureVector[featureIdxI]);
        int valXj = (int)round(inst->featureVector[featureIdxJ]);
        YOccurance[valY]++;
        YXiOccurance[valY][valXi]++;
        YXjOccurance[valY][valXj]++;
        YXiXjOccurance[valY][valXi][valXj]++;
    }
    
    int total = (int)instances.size();
    double mutualInfo = 0.0;
    for (int valY = 0; valY < rangeY; ++valY) {
        for (int valXi = 0; valXi < rangeXi; ++valXi) {
            for (int valXj = 0; valXj < rangeXj; ++valXj) {
                double pXiXjY = (YXiXjOccurance[valY][valXi][valXj] + 1.0) /
                    (total + rangeXi * rangeXj * rangeY);
                double pXiXj_Y = (YXiXjOccurance[valY][valXi][valXj] + 1.0) /
                    (YOccurance[valY] + rangeXi * rangeXj);
                double pXi_Y = (YXiOccurance[valY][valXi] + 1.0) /
                    (YOccurance[valY] + rangeXi);
                double pXj_Y = (YXjOccurance[valY][valXj] + 1.0) /
                    (YOccurance[valY] + rangeXj);
                mutualInfo += pXiXjY * log2(pXiXj_Y / (pXi_Y * pXj_Y));
            }
        }
    }
    
    return mutualInfo;
}
Exemple #3
0
    CPT2(const DatasetMetadata* metadata, int self, const vector<int>& parents) : CPT(self, parents) {
        Feature* selfFeature =  metadata->featureList[self];
        Feature* parentFeature0 = metadata->featureList[parents[0]];
        Feature* parentFeature1 = metadata->classVariable;

        table.resize(selfFeature->getRange());
        for (int i = 0; i < table.size(); ++i) {
            table[i].resize(parentFeature0->getRange());
            for (int j = 0; j < table[i].size(); ++j)
                table[i][j].resize(parentFeature1->getRange());
        }
    }
Exemple #4
0
 CPT0(const DatasetMetadata* metadata, int self, const vector<int>& parents) : CPT(self, parents) {
     Feature* selfFeature = metadata->classVariable;
     table.resize(selfFeature->getRange());
 }