python - 训练并加载了 sklearn 模型,但无法访问模型以执行预测
问题描述
我已经训练了一个模型并使用类方法保存了它。在进行评估时,我想加载经过训练的模型并在我的测试文件上进行预测;但我什至无法使用我加载的模型。我检查了加载模型的类型,它是一种方法,但我不确定它是否是正确使用的类型。
另外,我不确定我的 save_model 方法是否已将拟合模型与经过训练的模型一起保存,我想这可能是我无法访问加载的模型的原因。抱歉,如果我不是很清楚,请参阅下面的代码——我的意思会更清楚。
我在互联网上搜索了所有的解决方案,似乎都没有帮助..所以任何帮助都将不胜感激!!!!
保存模型方法
# POS class
def __init__(self):
self.vec = DictVectorizer()
self.model = LinearSVC()
def fit_and_report(self, X, Y):
X = self.vec.fit_transform(X)
self.model.fit(X, Y)
def save_model(self, output_file):
with open(output_file, "wb") as outfile:
pickle.dump(self, outfile)
在第一次训练模型时,我做了以下事情。
X, Y = pre_process.load_dataset('my_train_file')
X, Y = pre_process.prepare_data_for_training(X, Y)
my_model = function_in_tagger.POS() #call the POS class from a separate script
my_model.fit_and_report(X, Y) # I assumed the self.model.fit(X, Y) in the method is also saved to the model???
my_model.save_model('my_model_file')
加载并执行预测
X_test, Y_test = pre_process.load_dataset('my_test_file') # it returns X and Y (both are list)
loaded_model = pickle.load(open('my_model_file', 'rb'))
y_predict = loaded_model.predict(X_test)
我得到的错误是
y_predict = loaded_model.predict(Y_test)
AttributeError: 'POS' object has no attribute 'predict'
我也尝试获取训练模型的分数,但得到了同样的错误
score = loaded_model.score(X_test, Y_test)
AttributeError: 'POS' object has no attribute 'score'
新编辑
我尝试使用 DictVectorizer 转换我的测试数据,但它给了我一个属性错误('DictVectorizer' 对象没有属性'feature_names_')
vec = DictVectorizer()
vec.transform(X_test)
然后我尝试在转换之前拟合测试数据,然后它没有给我任何错误消息。但据我了解,我不应该拟合我的测试数据,而只是变换。
当同时使用 fit 和 transform 方法时,它仍然给我以下错误
y_predict = loaded_model.predict(Y_test)
AttributeError: 'POS' object has no attribute 'predict'
解决方案
您的错误源于您的测试数据。您应该在接受训练的模型之前转换测试数据。您的模型是在未列出的转换数据上训练的,请参见下面基于文本分类的示例;
#加载训练好的模型
with open('Rf Classifier', 'rb') as training_model: Rf_model = pickle.load(training_model)
)
加载模型后,在我的情况下转换测试数据,它是数据框的形式。由于我使用了多个变量,因此我使用 DataframeMapper 库来转换测试数据
test_data=mapper.transform(df_test) #df_test refers to the test data which is a dataframe
之后,您使用经过训练的模型预测您的转换/矢量化数据,如下所示;
df_test["class"] = Rf_model.predict(test_data) # this section creates a new column for predicted class
推荐阅读
- c# - 在 C# 中使用 POST 请求登录网站
- java - 如何为 Selenium 中的以下跨度类编写 XPATH?
- r - Add a new vector to a nested list
- python - Docker:如何容器化从终端获取输入的控制台应用程序
- ruby - Windows 上的 Ruby PATH 噩梦——PATH 变量不起作用
- php - 如何修复 json 对象错误地添加到数据库?
- javascript - 将此代码段从 Perl 转换为 Javascript
- jquery - 如何使用 Jquery tablesorter 对包含 Kbps Mbps Gbps 的列进行排序?
- python - 如何在python中获取pandas的x和y值对
- r - Cowplot Package: How to align legends vertically downwards after arranging many plots into one plot using plot_grid() in R