我使用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"))
但由于模型不是多标签,因此会出现错误。任何帮助深深感激。
答案 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函数中更改了该部分。