You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:54:53