如何使用libact从sklearn使用f1得分指标?

时间:2017-06-06 15:06:26

标签: python-3.x scikit-learn

我使用libact中的SkeleanrProbaAdapter来使用Sklearn Gradient Boosting分类器,如下所示:

clf=SklearnProbaAdapter(GradientBoostingClassifier(n_estimators=5, learning_rate=1.0,max_depth=2, random_state=0))

在他们的文档中提供example libact后,我以这种方式初始化并测量错误:

qs=UncertaintySampling(trn_ds1, method='lc', model=clf) model = clf ...training and labeling... E_out = np.append(E_out, 1 - model.score(tst_ds))

现在我正在尝试使用libact的f1指标。我试过了

E_out = np.append(E_out, 1 - model.score(tst_ds, criterion="f1"))

但由于模型不是多标签,因此会出现错误。任何帮助深深感激。

1 个答案:

答案 0 :(得分:0)

我最终使用了sklearn.metrics f1得分。如果有人发现这个有用的话,这是代码:

from sklearn.metrics import f1_score 
def run(trn_ds, tst_ds, lbr, model, qs, quota,fully_labeled_trn_ds,train_each,labels):
    E_in, E_out, E_full,E_out_f1 = [], [],[],[]
    counter=0
    for i in range(quota):
        # Standard usage of libact objects
        ask_id = qs.make_query()
        X, _ = zip(*trn_ds.data)
        _, Y = zip(*fully_labeled_trn_ds.data)
        lb = lbr.label(X[ask_id])
        trn_ds.update(ask_id, lb)
        if counter%train_each==0:
            model.train(trn_ds)
        E_in = np.append(E_in, 1 - model.score(trn_ds))
        E_out = np.append(E_out, 1 - model.score(tst_ds))
        E_full= np.append(E_full, 1 - model.score(fully_labeled_trn_ds))
        E_out_f1 = np.append(E_out_f1, f1_score(Y,model.predict(X),average='micro'))
    return E_in, E_out, E_full,E_out_f1

我刚刚在libact示例中的active_learning函数内调用的run函数中更改了该部分。