pandas 使用sklearn包打印k折分类结果

fiei3ece  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(107)

我有一个数据集,我使用sklearn通过holdout方法拆分。以下是程序

from sklearn.model_selection import train_test_split
(X_train, X_test, y_train, y_test)=train_test_split(X,y,test_size=0.3, stratify=y)

我使用随机森林作为分类器。下面是代码

clf = RandomForestClassifier(random_state=0 )
clf.fit(X_train, y_train)
R_y_pred = clf.predict(X_test)
target_names = ['Alive', 'Dead']
print(classification_report(y_test, R_y_pred, target_names=target_names))

现在我想对训练集使用分层kfold交叉验证。我写的代码

cv_results = cross_validate(clf, X_train, y_train, cv=5)
R_y_pred = cv_results.predict(X_test)
target_names = ['Alive', 'Dead']
print(classification_report(y_test, R_y_pred, target_names=target_names))

我得到了错误,因为cv_results没有像predict这样的属性。
我想知道如何打印使用k折交叉验证后的分类结果。
谢谢你。

gk7wooem

gk7wooem1#

  • cv_results* 只是返回分数,这些分数展示了模型在预测分割样本(在本例中指定为5)的数据时的表现。

它不是一个可以用于预测目的的模型。
例如,当考虑使用分类模型预测酒店取消的单独problem时,使用随机森林分类器的5倍交叉验证产生以下测试分数:

>>> from sklearn.model_selection import cross_validate
>>> cv_results = cross_validate(clf, x1_train, y1_train, cv=5)
>>> cv_results

{'fit_time': array([1.09486771, 1.13821363, 1.11560798, 1.08220959, 1.06806993]),
 'score_time': array([0.07809329, 0.10946631, 0.09018588, 0.07582998, 0.07735801]),
 'test_score': array([0.84440007, 0.85172242, 0.85322017, 0.84656349, 0.84190381])}

但是,当尝试使用此模型进行预测时,会返回相同的错误消息:

>>> from sklearn.model_selection import cross_validate
>>> cv_results = cross_validate(clf, x1_train, y1_train, cv=5)
>>> cv_results
>>> R_y_pred = cv_results.predict(x1_val)
>>> print(classification_report(y_test, R_y_pred))

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[33], line 4
      2 cv_results = cross_validate(clf, x1_train, y1_train, cv=5)
      3 cv_results
----> 4 R_y_pred = cv_results.predict(x1_val)
      5 print(classification_report(y_test, R_y_pred))

AttributeError: 'dict' object has no attribute 'predict'

相关问题