我正在尝试使用 scikit-learn 0.12.1 来:
- 训练一个 LogisticRegression 分类器
- 在保留的验证数据上评估分类器
- 向该分类器提供新数据并为每个观察检索 5 个最可能的标签
Sklearn 让这一切变得非常简单,除了一个特点。无法保证每个可能的标签都会出现在用于适合我的分类器的数据中。有数百个可能的标签,其中一些没有出现在可用的训练数据中。
这会导致两个问题:
- 当标签矢量化器出现在验证数据中时,它们无法识别以前看不见的标签。这很容易通过将贴标机拟合到一组可能的标签来解决,但它会加剧问题 2。
- LogisticRegression 分类器的 predict_proba 方法的输出是一个 [n_samples, n_classes] 数组,其中 n_classes仅包含在训练数据中看到的类。这意味着在 predict_proba 数组上运行 argsort 不再提供直接映射到标签矢量化器词汇表的值。
我的问题是,强制分类器识别全部可能类的最佳方法是什么,即使其中一些类没有出现在训练数据中?显然,它在学习从未见过数据的标签时会遇到麻烦,但 0 在我的情况下非常有用。