sklearn RandomizedSearchCV 提取不同折叠的混淆矩阵

Posted

技术标签:

【中文标题】sklearn RandomizedSearchCV 提取不同折叠的混淆矩阵【英文标题】:sklearn RandomizedSearchCV extract confusion matrix for different folds 【发布时间】:2018-02-05 12:02:48 【问题描述】:

我尝试计算一个聚合混淆矩阵来评估我的模型:

cv_results = cross_validate(estimator, dataset.data, dataset.target, scoring=scoring,
                cv=Config.CROSS_VALIDATION_FOLDS, n_jobs=N_CPUS, return_train_score=False)

但我不知道如何提取不同折叠的单个混淆矩阵。在得分手中我可以计算它:

scoring = 
'cm': make_scorer(confusion_matrix)

,但我无法返回 comfusion 矩阵,因为它必须返回一个数字而不是数组。如果我尝试它,我会收到以下错误:

ValueError: scoring must return a number, got [[...]] (<class 'numpy.ndarray'>) instead. (scorer=cm)

我想知道是否可以将混淆矩阵存储在全局变量中,但使用没有成功

global cm_list
cm_list.append(confusion_matrix(y_true,y_pred))

在自定义记分器中。

提前感谢您的任何建议。

【问题讨论】:

如果下面的答案给了你所需的答案,你能接受它作为答案 【参考方案1】:

要返回每个折叠的混淆矩阵,您可以在每次迭代(折叠)中从度量模块调用混淆矩阵,这将为您提供一个数组作为输出。输入将为每个折叠获得的 y_true 和 y_predict 值。

from sklearn import metrics
print metrics.confusion_matrix(y_true,y_predict)
array([[327582, 264313],
       [167523, 686735]])

或者,如果您使用的是 pandas,那么 pandas 有一个交叉表模块

df_conf = pd.crosstab(y_true,y_predict,rownames=['Actual'],colnames=['Predicted'],margins=True)
print df_conf

Predicted       0       1     All
Actual                           
  0          332553   58491  391044
  1           97283  292623  389906
  All        429836  351114  780950 

【讨论】:

【参考方案2】:

问题是,在 RandomizedSearchCV 完成后我无法访问估计器,因为我不知道 RandomizedSearchCV 实现了预测方法。这是我的个人解决方案:

r_search = RandomizedSearchCV(estimator=estimator, param_distributions=param_distributions,
                          n_iter=n_iter, cv=cv, scoring=scorer, n_jobs=n_cpus,
                          refit=next(iter(scorer)))
r_search.fit(X, y_true)
y_pred = r_search.predict(X)
cm = confusion_matrix(y_true, y_pred)

【讨论】:

这是否为您提供了 k 折叠中所有解决方案的混淆矩阵或仅其中一个? 在 fit() 方法中,您应该传递您的 x_train 和 y_train,而应使用 y_test 和 y_test pred 绘制混淆方法。你在混合东西。

以上是关于sklearn RandomizedSearchCV 提取不同折叠的混淆矩阵的主要内容,如果未能解决你的问题,请参考以下文章

sklearn的PCA

sklearn数据库-老鱼学sklearn

使用sklearn画二分类模型ROC曲线,PR曲线

Keras Sklearn Tuner 模块“sklearn”没有属性“管道”

导入sklearn时出现conda sklearn错误

sklearn库的安装