分类器的编码

数据挖掘 机器学习 分类 逻辑回归 支持向量机 一热编码
2022-03-03 08:01:37

我对编码(我不熟悉此类任务)分类变量有一些疑问,以便将它们用作逻辑回归或 SVM 等模型中的参数。我的数据集如下所示

Text                                  Symbol    Note    Account    Age   Label 
There is a red car                      !        red      John    24   1
My bag was very expensive               ?       orange    Luke    36  0
Where are my keys?                      @        red      Red     58  1
I promise: I will never let you go!    ...       green    Aoife   28  0

文本中存储了来自社区用户的评论;符号包括用户最常用的符号;注表示其等级:绿色为经验丰富,红色为新入职者;帐户是用户名。标签给了我关于用户可信度的信息:如果 0 用户不是假的;如果一个用户可能是一个可能的机器人。

我想根据当前信息对新用户进行分类(见上列)。我的数据集包括 1000 多行和 400 个用户。由于要使用分类器,我需要对分类字段进行编码,因此我尝试通过MultiColumnLabelEncoder在 sklearn 中使用来执行以下操作:

MultiColumnLabelEncoder(columns = ['Text', 'Symbol', 'Note', 'Account']).fit_transform(df)

其中 df 是我的数据框。但是,我知道 onehotencoder 也应该是可取的。我还包括帐户,因为可能有来自同一帐户的更多评论,所以如果我将一个帐户归类为假帐户,并且我从同一帐户收到新评论,那么这个帐户很容易被检测为假的。正如我之前提到的,目标是根据给定的信息(符号、注释、年龄、文本)以一定的准确性对测试集中的新元素进行分类,即寻找这些变量之间可能的相关性可以让我说一个新帐户是假的(1)还是假的(0)。

如您所见,问题与分类器有关,其中参数不仅是数字的,而且是分类的。
对于数据预处理(去除停用词和清理数据),我使用了 nltk 的 Python 包;关于特征提取(这应该是一个关键点,因为它与下一步相关联,即使用分类器来预测类 - 1 或 0),我发现很难理解我应该从编码中得到什么输出以便成为能够在我的模型中使用上述信息作为输入(其中目标称为标签,它是二进制值)。我使用逻辑回归作为分类器,也使用 SVM。

我的预期输出,如果用户 X 的年龄为 16 岁,符号 #、note Wonderful 和 note red(新加入者)将被分类为具有一定百分比的假货。

如果有人可以逐步向我解释将我的数据集转换为数据集的方法,我将不胜感激,我可以在逻辑回归中使用其变量来确定新用户的标签(假或非假)。

1个回答

您将不得不混合使用文本处理和一种热编码。文本列不应被视为一次性编码,因为它会尝试为数据集中的每个唯一句子创建一个新变量,这会很多(并且对学习没有太大帮助)。文本向量化器将根据出现在其中的单词/标记的类型来总结文本列。

因此,您应该首先使用文本矢量化器仅处理文本列。这将为您提供一个数据框(例如 A)。此数据框将具有与数据集中的标记/单词对应的列。因此,如果文本矢量化器选择了 100 个唯一词,那么您将拥有一个 1000x100 大小的数据框。请注意,这 100 列仅由文本矢量化器生成。

对于符号和注释,您可以使用 one-hot 编码,这将为您提供另一个数据帧(例如 B)。然后,如果输入,您应该在公共键上加入 A 和 B 以获得最终的数据框。这里的通用键将是行 ID(尽管阅读以下关于在用户级别聚合数据的评论)。

不清楚数据中的用户名(Account)列是否唯一?如果有 1000 行但只有 400 个用户,这意味着每个用户可以有超过 1 行。在这种情况下,您可以考虑在用户级别聚合数据(对于文本列,您可以简单地为同一用户连接所有字符串)。