2017-06-06 3 views
-1

私はここに示すように分類器を後押しSklearnグラデーションを使用するように、libactからSkeleanrProbaAdapterを使用: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がlibact.base.datasetモジュールを作成するというエラーでした。しかし、 "criterion =" 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内部で呼び出され、実行機能でその一部を変更しました。