2017-06-06 82 views
-1

我用SkeleanrProbaAdapter从libact,使用Sklearn梯度推进分类如下所示:如何使用使用libact的sklearn使用f1评分指标?

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"))

但由于模型没有多标签,将引发一个错误。任何帮助深表感谢。

+0

什么是错误?这个模型的意思是不是多标签?请提供详情。 –

+0

是的,很抱歉,当您使用SklearnProbaAdapter创建一个libact.base.dataset模块时,错误是该libact。但为了使用“标准=”f1“”我需要libact.models.multilabel。 –

回答

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功能运行功能的一部分。