python - 具有依赖于训练特征的自定义评分器的 Scikit-learn 分类器

标签 python machine-learning scikit-learn classification grid-search

我正在尝试使用自定义记分器训练 RandomForestClassifier,其输出需要依赖于其中一个特征。

X 数据集包含 18 个特征: X dataset

y 是通常的 0 和 1 数组: y_true

带有自定义记分器的 RandomForestClassifier 在 GridSearchCV 实例中使用: GridSearchCV(分类器,param_grid=[...],scoring=custom_scorer)

自定义记分器是通过 Scikit-learn 函数 ma​​ke_scorer 定义的: custom_scorer = ma​​ke_scorer(custom_scorer_function, greater_is_better=True)

如果 custom_scorer_function 仅依赖于 y_truey_pred,则此框架非常简单。然而,在我的例子中,我需要定义一个记分器,它利用 X 数据集中包含的 18 个特征之一,即取决于 y_pred 的值y_true 自定义分数将是它们和特征的组合。

我的问题是如何将特征传递给 custom_scorer_function,因为它的标准签名接受 y_truey_pred

我知道它接受额外的 **kwargs,但是以这种方式传递整个特征数组并不能解决问题,因为这个函数是为每对 y_truey_pred 调用的 值(需要提取与它们对应的单个特征值才能使其正常工作,我不确定是否可以完成)。

我试图扩充 y_true 数组,将该特征打包到其中并在 custom_scorer_function 中解包(第一列是实际标签,第二列是特征值我需要计算自定义分数): y_true_augmented

但是这样做违反了分类器具有一维标签数组的要求并触发了以下错误。

ValueError:未知标签类型:'continuous-multioutput'

非常感谢任何帮助。

谢谢。

最佳答案

你可以这样做(注意你没有给出真正的代码,所以这是准系统)

X = [...]
y = [...]

def custom_scorer_function(y, y_pred, **kwargs):
   a_feature = X[:,1]
   # now have y, y_pred and the feature you want

custom_scorer = make_scorer(custom_scorer_function, greater_is_better=True)
...

关于python - 具有依赖于训练特征的自定义评分器的 Scikit-learn 分类器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49246856/

相关文章:

c++ - 与 boost::python 斗争

python - Keras InputLayer 存在于 Function API 创建的模型中,但不存在于 Sequential API 中?

machine-learning - 使用一个 "majority topic"和多个 "minority topics"对语料库进行主题建模

python - 如何在 Keras 中将损失函数指定为二次加权 kappa?

python - 随机森林分类的​​不确定性

python - 如何获取python中函数内部定义的所有局部变量?

python - 使用 Python 在 Maya 中调整图像大小

python - 在AWS上运行Python脚本并将5GB文件传输到EC2

machine-learning - SKlearn (scikit-learn) 用于回归的多元特征选择

python - 超越 Python 中 rx 的基础知识