控制多输出分类中的每个任务使用哪些特征?

数据挖掘 scikit-学习 多类分类 可能性 多输出
2022-02-15 18:03:30

我想对矢量化文本数据执行多类多输出分类任务。我首先在多输出 startegy 中使用随机森林分类器:

    forest = RandomForestClassifier(random_state=1)
    multi_target_forest = MultiOutputClassifier(forest, n_jobs=-1)
    multi_target_forest.fit(X_train, y_train)
    y_pred_test = multi_target_forest.predict(X_test)

在查看单个估计器(multi_target_forest.estimators_)的特征重要性时,我注意到我的数据集中的一些特征对某些任务非常相关和有用,但对另一个类却是干扰。例子:

任务 1:为日期分类文档(q1、q2、q3、q4) 任务 2:为版本分类文档(初步、最终、修订)

对于任务 1,与日期相关的功能(例如“四月”)非常有用。然而,对于第二个任务,特征“April”具有很高的重要性,但却是过度拟合到小数据集的结果。知道了这一点,我想积极删除这些功能。

有没有办法控制每项任务使用哪些功能?

我可以为每个任务显式训练单独的分类器,但这是否等同于多输出多类?还是正在进行一些联合概率计算,我会错过?

谢谢!

1个回答

我不认为这是可能的。

首先,让我们看看为不同任务显式建模单独的树与以联合方式建模它们有什么区别。

假设我们有 2 个任务,每个 n 类。在后一种情况下,为了能够对相关性进行联合建模,必须创建新类,它是来自 2 个任务的类的 nC2 组合的所有可用排列的子集。现在,如果一个特征(比如特征 A)确实对任务 1 有益,但对任务 2 没有好处,那么在确定两个任务中的最终类的同时,如何决定是否使用特征 A?任务 1 想要该特征,但任务 2 不想要,所以这会造成死锁,这将阻止我们在树模型中加入不使用特征 A 进行分类的偏差!

因此,如果您确定某个特定功能对特定任务无益,那么更简单、更有效的方法是分别对它们进行建模,如您所提到的。