2014-01-16 58 views
6

假设我有一个分类问题,它是多类的并且是特征分层的,例如, “食用”,“营养”和“〜有营养” - 所以它可以表示像这样scikit-learn中的多级分类问题的级联分类器

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

尽管人们可以得到合理的性能,支持多分类的分类或使用一个-VS-一个/所有方案的那些不这样做,在每个级别单独训练分类器并连接它们可能也是有益的,因此被分类为“可食用”的实例可以被分类为nutritious或不被分类。

我想用scikit-lean估计为构建模块和我想知道如果我可以让Pipeline支持这还是我需要写我自己的估计,实现基本估计,可能BaseEnsemble做到这一点。

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

+0

你最终做了什么? – Afflatus

回答

4

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

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

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