加载pickle保存的KNN模型时遇AttributeError: EuclideanDistance获取失败求助
解决KNN模型加载时的AttributeError问题
错误原因
这个错误是由于scikit-learn版本不兼容导致的:保存模型时使用的sklearn版本,与当前加载模型的版本中,EuclideanDistance类的模块位置发生了变动,导致pickle无法找到该类。
解决办法
匹配原始训练环境的sklearn版本
找到当初训练并保存模型时使用的scikit-learn版本,在当前环境安装完全相同的版本:pip install scikit-learn==x.x.x替换
x.x.x为具体版本号(比如0.24.2),之后重新加载模型即可。重新训练并保存模型
如果无法找到旧版本的sklearn,直接用当前环境的sklearn重新训练KNN模型,再重新保存:from sklearn.neighbors import KNeighborsClassifier import pickle # 替换为你的训练数据X_train和y_train knn_model = KNeighborsClassifier() knn_model.fit(X_train, y_train) # 重新保存模型 pickle.dump(knn_model, open('knn_pickle_new.sav', 'wb'))之后使用新保存的
knn_pickle_new.sav文件加载模型。改用joblib保存/加载模型
sklearn推荐用joblib处理模型的序列化,比pickle更适配sklearn的模型结构:from sklearn.neighbors import KNeighborsClassifier import joblib # 训练并保存 knn_model = KNeighborsClassifier() knn_model.fit(X_train, y_train) joblib.dump(knn_model, 'knn_joblib.sav') # 加载 knn_model = joblib.load('knn_joblib.sav')
内容的提问来源于stack exchange,提问作者Rabil Farhan
相关产品推荐
相关产品推荐

