2017-12-14 6 views
1

は、私は簡単な辞書でsklearnからLabelBinarizerのパフォーマンスを比較しようとしています:2.9169740676879883秒---SklearnのLabelBinarizerが遅いのはなぜですか? ---:

start_time = time.time() 
result = lb.transform(sample_list*1000000) 
print("--- %s seconds ---" % (time.time() - start_time)) 
そして、このコードが実行---:

from sklearn.preprocessing import LabelBinarizer 
import time 

sample_list = list('abcdefg') 
lb = LabelBinarizer() 
lb.fit(dep_tag_list) 
lb_t = lb.transform(sample_list) 
sample_dict = {key:value for (key,value) in zip(sample_list, lb_t)} 

このコードは走りました0.6299951076507568秒---

start_time = time.time() 
result = [sample_dict[el] for el in sample_list*1000000] 
print("--- %s seconds ---" % (time.time() - start_time)) 

りんごとリンゴを比較していますか?なぜLableBinarizerが遅いのですか?

答えて

1

LabelBinarizerはlabel_binarizeのラッパーです。また、他のいくつかのscikitユーティリティで内部的に使用することもできます。したがって、渡されたデータが適切であるように注意する必要があります。

このため、渡されたデータを複数回チェックします。 transform() function hereのソースコードを見てください:

y_is_multilabel = type_of_target(y).startswith('multilabel') 
if y_is_multilabel and not self.y_type_.startswith('multilabel'): 
    raise ValueError("The object was not fitted with multilabel" 
        " input.") 

return label_binarize(y, self.classes_, 
         pos_label=self.pos_label, 
         neg_label=self.neg_label, 
         sparse_output=self.sparse_output) 

渡さyがscikitアルゴリズムやないで処理することができ、適切な型であるのであれば、あなたはそのチェックを参照してください。その後、データはlabel_binarizesource code is)に渡され、その他の追加チェックが実行されます。私の意見では、これはその遅さの理由です。

+0

ご回答いただきありがとうございます。私はそれをパンダのget_dummiesと比較することがより適切だと思う。 get_dummiesはまだ高速です – user1700890

+0

@ user1700890 get_dummiesはまだ私が言及したすべてのチェックを実行しないので、 –

+0

申し訳ありませんが、私は明確ではありませんでした。 get_dummiesはlabelbinarizerより高速です – user1700890

関連する問題