使用自定义评分器依赖于训练特征的Scikit-learn分类器

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

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

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

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

自定义评分器是通过Scikit-learn的make_scorer函数定义的:custom_scorer = make_scorer(custom_scorer_function, greater_is_better=True)

如果自定义评分函数仅依赖于y_truey_pred,这个框架非常简单。然而,在我的情况下,我需要定义一个评分器,它使用X数据集中包含的18个特征之一,即根据y_predy_true的值,自定义评分将是它们和该特征的组合。

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

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

我尝试通过在y_true数组中打包该特征,并在custom_scorer_function中解包它来增强y_true数组(第一列是实际标签,第二列是我需要计算自定义评分的特征值):y_true_augmented

然而,这样做违反了分类器需要一个一维标签数组的要求,并触发了以下错误。

ValueError: Unknown label type: ‘continuous-multioutput’

任何帮助都将不胜感激。

谢谢你。


回答:

你可以像这样做(请注意你没有提供任何实际代码,所以这只是一个基本框架)

X = [...]y = [...]def custom_scorer_function(y, y_pred, **kwargs):   a_feature = X[:,1]   # 现在你有了y, y_pred 和你想要的特征custom_scorer = make_scorer(custom_scorer_function, greater_is_better=True)...

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注