gpt4 book ai didi

python - 在没有所有可能标签的情况下训练 sklearn LogisticRegression 分类器

转载 作者:太空狗 更新时间:2023-10-30 01:49:08 24 4
gpt4 key购买 nike

我正在尝试使用 scikit-learn 0.12.1 来:

  1. 训练逻辑回归分类器
  2. 根据保留的验证数据评估分类器
  3. 向该分类器提供新数据并为每个观察检索 5 个最可能的标签

Sklearn 使所有这一切变得非常简单,除了一个特点。无法保证每个可能的标签都会出现在用于适合我的分类器的数据中。有数百种可能的标签,其中一些未出现在可用的训练数据中。

这会导致两个问题:

  1. 标签矢量器无法识别验证数据中出现的以前未见过的标签。这很容易通过将标签器安装到可能的标签集来解决,但它加剧了问题 2。
  2. LogisticRegression 分类器的 predict_proba 方法的输出是一个 [n_samples, n_classes] 数组,其中 n_classes 包含在训练数据中看到的类。这意味着在 predict_proba 数组上运行 argsort 不再提供直接映射到标签矢量化器词汇表的值。

我的问题是,强制分类器识别所有可能类别的最佳方法是什么,即使其中一些类别没有出现在训练数据中?显然,它在了解从未见过数据的标签时会遇到困难,但 0 在我的情况下非常有用。

最佳答案

这里有一个解决方法。确保您有一个名为 all_classes 的所有类的列表。然后,如果 clf 是您的 LogisticRegression 分类器,

from itertools import repeat

# determine the classes that were not present in the training set;
# the ones that were are listed in clf.classes_.
classes_not_trained = set(clf.classes_).symmetric_difference(all_classes)

# the order of classes in predict_proba's output matches that in clf.classes_.
prob = clf.predict_proba(test_samples)
for row in prob:
prob_per_class = (zip(clf.classes_, prob)
+ zip(classes_not_trained, repeat(0.)))

生成 (cls, prob) 对列表。

关于python - 在没有所有可能标签的情况下训练 sklearn LogisticRegression 分类器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15034664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com