【问题标题】:Weka could not use string as attribute to classify textWeka 无法使用字符串作为属性对文本进行分类
【发布时间】:2012-12-14 12:04:48
【问题描述】:

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

Text1: label_1
Text2: label_2
Text3: 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)

【问题讨论】:

  • 我不知道你想做什么,但错误信息很清楚。您正在将字符串传递给不接受字符串的函数。

标签: java algorithm machine-learning weka


【解决方案1】:

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

您可以做的一件事是使用某些模型将您的特征空间转换为数字/二进制属性。 Bag of Words model 是一个常见的解决方案。

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

  1. 遍历数据库中的所有“特征”(字符串),分配一个 每个字符串/单词的数字/特征
  2. 对于每个分类示例,创建一个具有修改的特征空间的新实例 - 对于每个单词/字符串,您现在都有一个数字(从步骤 1 开始),因此将匹配此数字的属性设置为该单词的出现次数在文本中。标签保持不变
  3. 使用新的(数字)特征空间对修改后的示例运行学习算法
  4. 在分类过程中,如果您遇到无法识别的单词(您之前没有它并且没有分配给它的属性号) - 您可以默默地忽略它,或者使用一些启发式来预测它是否以某种方式与您确实看到的单词相关联。对于初学者,我会忽略它,稍后再返回执行此步骤以进行后续优化。

【讨论】:

    猜你喜欢
    • 2014-11-08
    • 2017-04-09
    • 2012-03-27
    • 2014-04-30
    • 2013-03-16
    • 2013-12-25
    • 2016-09-25
    • 2015-01-25
    相关资源
    最近更新 更多