コード例 #1
0
double DecisionTree::ComputeEntropyGivenSurvival(int attr, vi& data){
	vi ones, zeroes;
	for(int i : data){
		if(train[i][0] == 0)
			zeroes.pb(i);
		else
			ones.pb(i);
	}
	double entropy = (ones.size() * ComputeEntropy(attr, ones) + zeroes.size() * ComputeEntropy(attr, zeroes)) / data.size();
	return entropy;
}
コード例 #2
0
// LogZp
double MatchMRFGraph::ComputeLogZp()
{
	double ae,en;

	ae = ComputeAverageEnergy();
	en = ComputeEntropy();

	return ae+en;
}
コード例 #3
0
int DecisionTree::ChooseAttributeToSplit(node* curr){
	if(__MESSAGE__)
		cout << "Choosing an attribute to split ... " << endl;
	vector<pair<double,int> > v;
	double mutualInfo = 0;
	for(int i=1; i<NUM_ATTR; i++){
		if(curr->parAttr.count(i))
			continue;
		mutualInfo = ComputeEntropy(i, curr->data) - ComputeEntropyGivenSurvival(i, curr->data);
		v.pb(mp(mutualInfo, NUM_ATTR - i));
	}
	if(v.empty())
		return -1;
	sort(v.begin(), v.end());
	int ret = (NUM_ATTR - v.back().second);
	if(__MESSAGE__)
		cout << "Chosen attribute number for splitting : " << ret << "..." <<endl;
	return ret;
}