classifier.trainF(ferns_data,2):训练集成分类器
对任一随机蕨数据:对于正样本,判断其可信度是否低于阈值thr_fern;对于负样本,判断其可信度是否大于0.5。如果满足以上条件,则使用了一次P/N约束,使用update()计数更新每个特征对应的可信度。
update(ferns[i].first,0,1):
void FerNNClassifier::update(const vector<int>& fern, int C, int N) {
int idx;
for (int i = 0; i < nstructs; i++) { //每棵树共nstructs个蕨
idx = fern[i];//每个蕨的值(2bitBP特征组成的二进制数)
(C==1) ? pCounter[i][idx] += N : nCounter[i][idx] += N;//计数统计
if (pCounter[i][idx]==0) {
posteriors[i][idx] = 0;
} else {
posteriors[i][idx] = ((float)(pCounter[i][idx]))/(pCounter[i][idx] + nCounter[i][idx]);
}
}
}