sklearn RandomizedSearchCV 提取不同折叠的混淆矩阵
sklearn RandomizedSearchCV extract confusion matrix for different folds
我尝试计算聚合混淆矩阵来评估我的模型:
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)
}
,但我不能 return 混淆矩阵,因为它必须 return 一个数字而不是一个数组。如果我尝试它,我会收到以下错误:
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))
在自定义记分器中。
提前感谢您的任何建议。
到每个折叠的 return 混淆矩阵,您可以在每次迭代(折叠)中从度量模块调用 confusion_matrix,这将为您提供一个数组,因为 output.Input 将是 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
问题是,在 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)
我尝试计算聚合混淆矩阵来评估我的模型:
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)
}
,但我不能 return 混淆矩阵,因为它必须 return 一个数字而不是一个数组。如果我尝试它,我会收到以下错误:
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))
在自定义记分器中。
提前感谢您的任何建议。
到每个折叠的 return 混淆矩阵,您可以在每次迭代(折叠)中从度量模块调用 confusion_matrix,这将为您提供一个数组,因为 output.Input 将是 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
问题是,在 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)