2014-01-16 71 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 ...)。