Weka无法使用字符串作为属性来分类文本

我有一个分类任务,输入是一个字符串,并将其分类到一些标签。训练数据如下:

Text1: label_1Text2: label_2Text3: label_1

当我使用Weka时,很多分类器会抛出异常:

weka.core.UnsupportedAttributeTypeException: weka.classifiers.functions.MultilayerPerceptron: Cannot handle string attributes!    at weka.core.Capabilities.test(Capabilities.java:979)    at weka.core.Capabilities.test(Capabilities.java:868)    at weka.core.Capabilities.test(Capabilities.java:1084)    at weka.core.Capabilities.test(Capabilities.java:1022)    at weka.core.Capabilities.testWithFail(Capabilities.java:1301)

回答:

很难理解您到底想要实现什么,但在机器学习中,大多数分类器寻找的是数值/二进制属性,而不是字符串属性。

您可以做的一件事是使用某种模型将您的特征空间转换为数值/二进制属性。词袋模型是一个常见的解决方案。

根据这个模型,您需要做的是:

  1. 遍历数据库中所有“特征”(字符串),为每个字符串/单词分配一个数字/特征
  2. 对于每个分类示例,创建一个具有修改后的特征空间的新实例 – 对于每个单词/字符串,您现在有一个数字(来自步骤1),因此将匹配此数字的属性设置为该单词在文本中的出现次数。标签保持不变
  3. 在修改后的示例上运行学习算法,使用新的(数值)特征空间
  4. 在分类过程中,如果遇到一个未识别的单词(您之前没有它,也没有为其分配属性编号) – 您可以选择静默忽略它,或者使用某种启发式方法来预测它是否与您见过的单词有某种联系。作为起点,我建议先忽略它,稍后再回来进行后续优化。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注