槌头特征选择类似于将特征值设置为0

时间:2013-10-04 08:18:24

标签: java machine-learning feature-selection mallet

我正在查看Mallet源代码,并且似乎大多数分类器实现(例如朴素的bayes)并没有真正考虑到功能选择,即使InstanceList类具有{{ 1}}方法。

现在我想对涉及特征选择的数据集进行一些快速实验。我想,从技术捷径的角度来看,我可能会获得排名最低的功能,并在实例向量中将这些值设置为0。这在机器学习中是否等同于分类器训练中的特征选择,根本不考虑它们(如果不涉及平滑,例如不涉及拉普拉斯估计)?

谢谢

1 个答案:

答案 0 :(得分:1)

是的,将特征值设置为零与从特征向量中移除特征值具有相同的效果,因为MALLET没有“缺少特征”的概念,只有零和非零特征值。

使用FeatureSelection课程并不是太痛苦。 MALLET附带了几个内置类,根据RankedFeatureVector子实体在引擎盖下应用“掩码”。例如,要使用信息增益功能选择,您应该能够执行此操作:

FeatureSelection fs = FeatureSelection(new InfoGain(ilist), numFeatures);
ilist.setFeatureSelection(fs);

您还可以为更加自定义的内容实现自己的RankedFeatureVector子类(the API is here)。要以其他方式手动选择要素,您仍然可以通过创建要素掩码作为BitSet来创建,其中包含您要使用的所有要素ID(来自字母),例如:

java.util.BitSet featureMask = /* some code to pick your features */;
FeatureSelection fs = FeatureSelection(ilist.getAlphabet(), featureMask);
ilist.setFeatureSelection(fs);

通常,我建议使用FeatureSelection个对象,而不是破坏性地更改实例数据。