特征分类——我做得对吗?

数据挖掘 机器学习 分类 特征选择
2022-02-19 21:03:36

我有一个系统,我将其作为特征字符串的输入数组:

["kol","bol","sol","nol"]

这个数组的长度是动态的,我可以得到 2、4 或 6 等,总特征 <20

我需要根据这个数组做出决定,决定是另一个字符串:

x = ["feature1","feature5","feature3","feature8"] #in
y = "john" #decide

我最终要做的是为每个训练集(dataframe pandas)创建一个表,如果存在则为 1,否则为 0:

feature1   feature2   feature3   feature4   feature5...  decision
1          0          1          0          1            1 (john mapped to 1, Ly to 2, etc)

我使用sklearn. ( DecisionTreeClassifier) 我用 100 多个输入特征数组和期望的结果训练它。

它有效,但我确实感觉如果输入与训练数据不同,它不会真正提供价值,因为这些二进制值没有真正的意义/权重。

这些特征字符串来自一个词袋如果出现在文本中,我会提取它,以创建一组定义明确的特征来训练/预测。

  1. 我可以,还是应该将值从 1/0 更改为更加权的值?我怎么得到它们?
  2. 假设我有一个词袋,我在文本中查找并产生文本和袋子中的特征,这是一种正确的方法吗?
1个回答

这看起来与文本分类非常相似。任何监督分类的主要概念是模型在应用时与训练时接收相同的特征(以相同的顺序) 。

这就是为什么传统上使用词袋表示的原因:词汇表中的每个词都被分配一个索引来表示为特征特征的值可以是布尔值(如果存在于实例中,则为 1,否则为 0)或数字(实例中单词的频率,或者一些更复杂的值,如 TFIDF)。这些特征的含义很简单:它告诉模型一个特定的词是否存在。该模型计算特定标签与特定单词关联的频率。因此,在决策树中,模型由以下条件组成:“如果实例包含单词 A,不包含单词 B,但包含单词 C,则标签为 Y”。ii

至关重要的是,词汇在训练阶段是固定的。这意味着在测试实例中找到的任何新词都不能使用。这就是词汇外(OOV)词的问题。通常还建议删除最不常见的单词,因为它们很可能是偶然发生的,并导致过度拟合的高风险(请参阅上一个链接)。过度拟合是指模型认为特定单词和标签之间存在很强的关联,即使它只有一两个偶然发生的例子。