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



我正在查看 Mallet 源代码,似乎大多数分类器实现(例如朴素贝叶斯)并没有真正考虑功能选择,即使 InstanceList 类具有setFeatureSelection方法。

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

谢谢

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

不过,使用 FeatureSelection 类并不太痛苦。MALLET 带有几个内置类,这些类基于RankedFeatureVector子单元在引擎盖下应用"面具"。例如,要使用信息增益功能选择,您应该能够执行以下操作:

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新