猿问

使用 joblib 加载的 sklearn 模型时出错。类型错误:

我使用 sklearn创建了一个VotingClassifier()对象。后来,我使用joblib将其保存到voting_predictor.pkl文件。当我成功加载它时,当我尝试预测一些数据时,voting_predictor.predict(X_test)出现以下错误:


类型错误:无法根据规则“安全”将数组数据从 dtype('O') 转换为 dtype('int64')


我试图用泡菜转储/加载对象,但我得到了完全相同的错误。代码如下所示:


eclf1 = VotingClassifier(estimators=estimators, voting='hard')


eclf1 = eclf1.fit(X_train, y_train)

y_pred = eclf1.predict(X_test)


report = classification_report(y_test, y_pred)

poll_accuracy = accuracy_score(y_test, y_pred)


print(report)

print(poll_accuracy)


# successful object dump

filename = 'voting_predictor.pkl'

joblib.dump(eclf1, filename)


#successful object load

voting_predictor = joblib.load(filename)

# this prints the object correctly, showing all its parameters 

print(voting_predictor)


#error shows here

y_pred = voting_predictor.predict(X_test)


report = classification_report(y_test, y_pred)

poll_accuracy = accuracy_score(y_test, y_pred)

在print(voting_predictor)成功地打印出对象及其所有参数。关于为什么会发生这种情况的任何想法?


德玛西亚99
浏览 571回答 2
2回答

30秒到达战场

我在将 catbooster 与其他预测器结合时遇到了同样的错误。我找到了这个解决方案,但是我正在寻找一个更优雅的解决方案。

素胚勾勒不出你

问题是目标列是类的名称,作为字符串。似乎在没有将字符串值标签编码为某个整数的情况下将其保留为导致此错误的原因。但是,在其他任何情况下,sklearn 都正确处理了每个类的字符串名称,提供了诸如分类报告和准确度分数之类的所有指标而没有错误。只有当我从文件加载对象时才会发生错误。
随时随地看视频慕课网APP

相关分类

Python
我要回答