2017-04-24 3 views
0

일부 회귀 작업을 위해 추가 트리 모델을 교육했습니다. 우리 모델은 3 개의 여분의 나무들로 이루어져 있으며, 각각은 200 나무의 깊이 30을 가지고 있습니다. 3 여분의 나무 꼭대기에는 능선 회귀를 사용합니다. 우리는 몇 시간 동안 모델을 훈련시키고 훈련 된 모델 (전체 클래스 객체)을 나중에 사용하기 위해 pickle합니다. 그러나 저장된 훈련 된 모델의 크기는 약 140GB입니다. 저장된 모델의 크기를 줄이는 방법이 있습니까? 도움이 될 수있는 피클의 구성이나 피클에 대한 대안이 있습니까?훈련 된 기계 학습 모델이 너무 큼

+1

scikit 모델 지속성 [페이지] (HTTP ://scikit-learn.org/stable/modules/model_persistence.html#)는'joblib '를 사용하는 것이 더 효율적일 수 있음을 암시합니다. – Tchotchke

답변

3

최상의 경우 (이진 트리)에는 3 * 200 * (2^30 - 1) = 644245094400 개의 노드 또는 434Gb 개의 노드가 저장하는 데 1 바이트의 비용 만들 것이라고 가정합니다. 나는 140GB가 비교에서 꽤 괜찮은 크기라고 생각한다.

편집 : 나쁜 수학.

1

압축 매개 변수와 함께 joblib를 사용해 볼 수 있습니다.

from sklearn.externals import joblib 
    joblib.dump(your_algo, 'pickle_file_name.pkl',compress=3) 

compress - 0에서 9까지입니다. 값이 클수록 압축률은 높아지지만 읽기 및 쓰기 시간이 느려집니다. 값 3을 사용하면 좋은 절충안이됩니다.

python 표준 압축 모듈 zlib, gzip, bz2, lzma 및 xz를 사용할 수 있습니다. 당신은 단지 특정 확장자를 가진

예를

joblib.dump(obj, 'your_filename.pkl.z') # zlib 

더 많은 정보를 형식을 지정할 수 있음을 사용하려면 [링크]를 참조 :(http://gael-varoquaux.info/programming/new_low-overhead_persistence_in_joblib_for_big_data.html를)