2013-07-11 1 views
3

scikit-learn 분류자를 serialize하는 가장 효율적인 방법은 무엇입니까?scikit-learn 분류자를 효율적으로 serialize하는 방법

저는 현재 파이썬의 표준 Pickle 모듈을 사용하여 text classifier을 직렬화했습니다.하지만이 결과는 엄청나게 큰 피클이됩니다. 직렬화 된 객체는 100MB 이상일 수 있습니다. 이는 과도한 것으로 보이며 생성 및 저장하는 데 시간이 걸립니다. 나는 Weka와 비슷한 작업을 수행했으며, 동등한 직렬화 된 분류기는 대개 몇 MBs입니다.

피클에서 scikit-training 데이터 또는 기타 관련없는 정보를 캐싱 할 가능성이 있습니까? 그렇다면 직렬화 된 scikit-learn 분류기의 속도를 높이고 줄일 수있는 방법은 무엇입니까? (잠재적 파이프 라인에 TfidfTransformer 적층)을 HashingVectorizer하여 TfidfVectorizer 교체 : 큰 텍스트 데이터 세트에 대한

classifier = Pipeline([ 
    ('vectorizer', CountVectorizer(ngram_range=(1,4))), 
    ('tfidf', TfidfTransformer()), 
    ('clf', OneVsRestClassifier(LinearSVC())), 
]) 
+0

cPickle에서 프로토콜 -1을 사용 했습니까? 그것은 종종 기괴한 차이를 만듭니다. –

답변

3

는, 해시 트릭을 사용하면 저장할 필요가 없습니다로는 피클 훨씬 빨라집니다 어떤 등과 같은이 질문에 최근 논의 DICT 어휘 :

How can i reduce memory usage of Scikit-Learn Vectorizers?

+0

감사합니다. 그것과 joblib 사용은 약 20-30 % 크기를 줄였습니다. 거대하지만 괜찮은. – Cerin

2

또한 joblib.dump을 사용하여 압축에 전달할 수 있습니다. 필자는 분급 기 피클 덤프가 compress = 3 옵션을 사용하여 ~ 16의 인수로 감소한다는 것을 알았습니다.

관련 문제