如何在机器学习中更加关注某些特征?

28
如果使用像scikit-learn这样的库,如何在将输入提供给SVM分类器时对某些特征分配更多的权重?这是人们常做的事情吗?

1
为什么要这样做?好的算法已经可以自动和情境地完成这个任务了。 - MSalters
看一下TF-IDF - 它进行加权。 - paparazzo
@Paparazzi tfidf 不是关于特征加权的,它更多地是关于“压缩”过快增长的特征,以便获得合理的比例。它不会导致某个特定特征“更重要”,除非您在其上使用非常特定的分类器(例如对于决策树,tfidf 根本不涉及“重要性”)。 - lejlot
@lejlot 无论如何。如果出现次数和逆文档频率不是权重,那么它是什么? - paparazzo
3
这只是一种表示方法,不是OP所问的权重。分类器并不因为某个特征出现的次数(tfidf值)而被“强制”关注于它。虽然对于某些模型来说它会像权重一样工作,就像答案中所描述的那样——但这需要分类器喜欢高特征值,这不是机器学习模型的一般属性。 - lejlot
3个回答

38

首先 - 您可能不应该这样做。机器学习的整个概念是使用统计分析分配最优权重。你在此处干扰了整个概念,因此你需要有非常强的证据说明这对你正在尝试建模的过程至关重要,并且由于某种原因,你的模型目前缺少它。

话虽如此-没有通用答案。这完全取决于模型,其中一些模型允许您加权特征-例如,在随机森林中,您可以将采样特征进行偏置分布,以便分析您感兴趣的特征; 在SVM中,只需将给定特征乘以一个常数即可 - 还记得当您被告知在SVM中归一化您的特征吗?这就是为什么-您可以使用特征的比例“引导”分类器朝着给定的特征方向。具有高值的特征将受到优先考虑。这实际上对大多数线性权重规范化模型(规范化逻辑回归、岭回归、套索等)都适用。


谢谢您的回复,我注意到在scikit-learn中,SVC分类器有一个“sample_weight”输入,您可以赋予某些类更重要的权重。您能否举个例子说明这个特性是如何使用的? - 28r
4
sample_weight是用于加权特定的样本(实例、数据点、对象),而不是整个类别(虽然它也可以用于此目的)。例如,它可用于实现增强方法,该方法通过反复加权先前被错误分类的样本来提高其重要性。它还可用于在不平衡的分类中加权少数类别。但是需要注意的是,这种加权与问题中提到的另一种加权方式是不同的。 - lejlot
乘法仅适用于某些模型。在这种情况下,它将在训练和推断期间以及标准化后进行。 - lejlot
谢谢@lejlot,我相信这对于支持向量机、L1/L2逻辑回归以及任何加权正则化线性模型都有效,除了你在答案中提到的那些模型? - Mathguy
@lejlot 如果您在标准化后进行缩放,那么它对线性模型的权重不会产生任何影响吗?例如,如果您将归一化特征f1乘以因子“k”,那么模型是否只会学习w1/k而不是w1? - Mathguy
显示剩余2条评论

1

最好的方法是: 假设您有f [1,2,..N],特定特征的权重为w_f [0.12,0.14 ... N]。 首先,您需要通过任何特征缩放方法对特征进行归一化,然后您还需要将特征权重w_f归一化到[0-1]范围内,然后将归一化权重乘以新转换的特征的f [1,2,..N]。 请记住,您还需要在测试数据中进行转换。 现在,您可以检查两个模型的性能:引入功能和不引入功能。


0
如前所述,我不建议使用索引权重,因为这是机器学习的工作。然而,在我的观点中,权重排名必须在原始数据源(数据库表、.txt等)中完成,通过更新一个附加字段,并且始终在0到1的范围内,即0.1、0.2……0.7……),并且一定要与相应的特征(参数)绝对相关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接