用于scikit-learn中的多类问题的级联分类器

时间:2014-01-16 00:44:11

标签: python machine-learning data-mining scikit-learn

假设我有一个多类和特征分层的分类问题,例如'可食用','营养'和'营养' - 所以它可以表示如此

├── edible
│   ├── nutritious
│   └── ~nutritious
└── ~edible

虽然可以使用支持多类分类的分类器或者对于那些不支持多分类的分类器来获得合理的性能,但是在每个级别单独训练分类器并将它们连接起来也可能是有益的。归类为“可食用”可归类为nutritious或不归类。

我想使用scikit-lean估算器作为构建块,我想知道我是否可以使Pipeline支持这个,或者我是否需要编写自己的估算器来实现基本估算器并且可能BaseEnsemble要做到这一点。

@ogrisel之前在邮件列表http://sourceforge.net/mailarchive/message.php?msg_id=31417048上已经提到过,我想知道是否有人对如何进行此操作有任何见解或建议。

1 个答案:

答案 0 :(得分:4)

您可以通过提供构造函数参数base_estimator以及要级联的列表有序目标类列表,将您自己的类编写为元估计器。在这个元分类器的fit方法中,您根据这些类来对这些数据进行子数据并为每个级别拟合base_estimators的克隆,并将得到的子分类器存储在元分类器的属性中。

在预测方法中,您再次在级联结构上进行迭代,此时调用预测基础子分类器以对预测进行切片并递归地将这些预测传递到下一级别。你将需要一个公平的numpy花式索引;)

您可以在源代码中git grep base_estimator查找代码库中的元估计器的现有示例(如Bagging,AdaBoost,GridSearchCV ......)。