2017-12-14 11 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이 scikit 알고리즘 여부를 처리 할 수있는 적합한 형태의 경우

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) 

그래서 당신은 검사를 참조하십시오. 그 후 데이터는 label_binarize ( source code is)으로 전달되며, 다른 추가 검사를 수행합니다. 제 의견으로는 이것이 느린 이유입니다.

+0

답장을 보내 주셔서 감사합니다. 팬더의 get_dummies와 비교하는 것이 더 적절하다고 생각합니다. get_dummies는 여전히 더 빠름 – user1700890

+0

@ user1700890 get_dummies가 내가 언급 한 모든 검사를 수행하지 않기 때문에 –

+0

죄송합니다. 명확하지 않았습니다. get_dummies는 labelbinarizer보다 훨씬 빠릅니다. – user1700890