- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试制作一个自定义评分器函数,用于在 scikit-learn (Python) 中交叉验证我的(二元分类)模型。
我的原始测试数据的一些示例:
Source Feature1 Feature2 Feature3
123 0.1 0.2 0.3
123 0.4 0.5 0.6
456 0.7 0.8 0.9
假设任何折叠都可能包含来自同一来源的多个测试示例...
然后对于具有相同来源的示例集,我希望我的自定义评分器“确定”“获胜者”是模型吐出更高概率的示例。换句话说,每个来源只能有一个正确的预测,但如果我的模型声称不止一个评估示例是“正确的”(标签= 1),我希望概率最高的示例与事实相匹配我的得分手。
我的问题是 scorer 函数需要签名:
score_func(y_true, y_pred, **kwargs)
其中 y_true
和 y_pred
仅包含概率/标签。
然而,我真正需要的是:
score_func(y_true_with_source, y_pred_with_source, **kwargs)
所以我可以按来源对 y_pred_with_source
示例进行分组,然后选择获胜者来与 y_true_with_source
真相相匹配。例如,然后我可以继续计算我的精度。
有没有办法以某种方式传递这些信息?也许是示例的索引?
最佳答案
听起来您在这里遇到了学习排名问题。您正在尝试从每组实例中找出排名最高的实例。 scikit-learn 现在不直接支持学习排名 - scikit-learn 几乎假设 i.i.d.实例 - 所以你必须做一些额外的工作。
我认为我的第一个建议是降低 API 中的级别并使用 cross-validation iterators .那只会生成用于训练和验证折叠的索引。您可以使用这些索引对数据进行子集化,并在子集上调用 fit
和 predict
,删除 Source,然后使用 对其进行评分>源列。
您或许可以将其破解到 cross_val_score 方法中,但它更棘手。在 scikit-learn 中,上面显示的评分函数与 scoring object 之间存在区别。 (可以是一个函数)由 cross_val_score 获取。评分对象是一个可调用对象或函数,其签名为 scorer(estimator, X, y)
。在我看来,您可以定义一个适用于您的指标的评分对象。您只需在将数据发送到估算器之前删除 Source 列,然后在计算指标时使用该列。如果你走这条路,我认为你还必须包装分类器,以便它的 fit
方法跳过 Source 列。
希望对您有所帮助...祝您好运!
关于python - SKLearn 交叉验证 : How to pass info on fold examples to my scorer function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34315893/
我已经编写了我的自定义评分器对象,这对于我的问题是必要的,我将其称为“p_value_scoring_object”。 对于函数 sklearn.cross_validation.cross_val_
我正在尝试使用 GridSearchCV 找到 XGB_Classifier 的最佳参数集。由于我的数据非常不平衡,拟合和评分(在交叉验证中)都必须使用权重执行,因此我必须使用自定义评分器,它将“权重
我想通过使用 train_test_split 将其与预定义分割上的手动计算(可以这么说)进行比较,确保我的自定义评分函数的行为符合预期。 但是我似乎无法将这种分割传递给 cross_val_scor
我试图在 Python 中使用 eli5 包。最初我无法安装它,但后来使用 conda install -c conda-forge eli5 修复了它。 现在,当我尝试将 eli5 导入我的 Jup
我在尝试加载 NER 模型时遇到 spacy 问题: nlp = spacy.load("./output_model/model-best") 提示如下错误: RegistryError: [E89
我在尝试加载 NER 模型时遇到 spacy 问题: nlp = spacy.load("./output_model/model-best") 提示如下错误: RegistryError: [E89
我正在尝试制作一个自定义评分器函数,用于在 scikit-learn (Python) 中交叉验证我的(二元分类)模型。 我的原始测试数据的一些示例: Source Feature1 Feat
尝试使用 Scorer 在我的测试集上获取分数时遇到以下错误 TypeError: score() takes 2 positional arguments but 3 were given impo
我是一名优秀的程序员,十分优秀!