KNN模型使用pyfunc返回ModuleNotFoundError或FileNotFoundError

在KNN模型上使用pyfunc進行預測將返回ModuleNotFoundError或FileNotFoundError。

寫的pradeepkumar.palaniswamy

最後發布日期:2022年5月16日

問題

您已經創建了一個Sklearn模型KNeighborsClassifier並且正在使用pyfunc進行預測。

例如:

導入mlflow。pyfuncpyfunc_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()

預測返回一個沒有名為“sklearn.neighbors._classification”的模塊錯誤消息。

預測也可能返回aFileNotFoundError: [Errno 2]找不到可用的臨時目錄錯誤消息。

導致

當記錄KNN模型時,用於訓練的所有數據點都保存為pickle文件的一部分。

如果用數百萬條記錄訓練模型,那麼所有這些數據都會被添加到模型中,這將極大地增加模型的大小。在數百萬條記錄上訓練的模型很容易總計數gb。

pyfunc在運行預測時,嚐試將整個模型加載到執行程序的緩存中。

如果模型太大,無法裝入內存,則會導致上述錯誤消息之一。

解決方案

您應該使用基於樹的算法,例如隨機森林或XGBoost對KNN模型中的數據進行下采樣。

如果你有不平衡的數據,在訓練基於樹的算法時,嚐試像SMOTE這樣的抽樣方法。

這篇文章有用嗎?