pyfunc를 사용하는 KNN 모델이 ModuleNotFoundError 또는 FileNotFoundError를 반환

문제

을 사용 하 여 작동 하는 모델을 만들고를 사용 하 여 KNeighborsClassifierpyfunc 예측을 실행 했습니다.

예:

import mlflow.pyfunc
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri=model_uri, result_type='string')
predicted_df = merge.withColumn("prediction", pyfunc_udf(*merge.columns[1:]))
predicted_df.collect()

예측에서 오류 메시지를 반환 합니다 ModuleNotFoundError: No module named 'sklearn.neighbors._classification' .

예측은 오류 메시지를 반환할 수도 있습니다 FileNotFoundError: [Errno 2] No usable temporary directory found .

원인

KNN 모델을 기록 하면 학습에 사용 되는 모든 데이터 요소가 pickle 파일의 일부로 저장 됩니다.

수백만 개의 레코드를 사용 하 여 모델을 학습 하는 경우 모든 데이터가 모델에 추가 되므로 크기가 크게 증가할 수 있습니다. 수백만 개의 레코드에 대해 학습 된 모델은 여러 Gb을 쉽게 파악할 수 있습니다.

pyfunc 예측을 실행할 때 전체 모델을 실행자 캐시로 로드 하려고 시도 합니다.

모델이 너무 커서 메모리에 맞지 않는 경우 위의 오류 메시지 중 하나가 발생 합니다.

해결 방법

KNN 모델의 데이터를 다운 샘플링 하려면 임의 포리스트 또는 XGBoost와 같은 트리 기반 알고리즘을 사용 해야 합니다.

데이터가 불균형 한 경우 트리 기반 알고리즘을 학습 하는 경우 SMOTE와 같은 샘플링 방법을 시도 합니다.