【问题标题】:Exception with duplicate label when transform data from Numeric to Nominal via python-weka-wrapper v0.3.10通过 python-weka-wrapper v0.3.10 将数据从数字转换为标称时出现重复标签的异常
【发布时间】:2017-09-12 06:47:15
【问题描述】:

使用 python-weka-wrapper v0.3.10 存在数据预处理问题,这让我困惑了几天。

我正在使用 create_instances_from_matrices() 生成从 ndarray 到实例的数据集,它是数字类型。

然后通过

将数据集保存到一个arff文件(numeric_data.arff)
Saver(classname="weka.core.converters.ArffSaver")

然后尝试使用

将我的数据集转换为名义类型
Filter(classname="weka.filters.unsupervised.attribute.NumericToNominal", options=["-R", "first-last"])

异常消息输出如下:

线程“Thread-0”中的异常 java.lang.IllegalArgumentException: A 名义属性 (x2) 不能有重复的标签 (1)。

但是,使用我生成的相同数据集(numeric_data.arff),它可以通过 Weka GUI Explorer v3.8.1 成功转换为名义类型。

如有任何想法可以提供帮助,我将不胜感激。

谢谢!

【问题讨论】:

    标签: python weka


    【解决方案1】:

    (摘自邮件列表上的discussion,正确回答这个问题)

    NumericToNominal 过滤器是一个非常愚蠢的过滤器。它的唯一目的是提供一种简单的方法来转换应该是分类值的数值(例如,1.0、2.0 到标签 1 和 2)。将数字转换为标签时,它会在小数点后 6 位后去掉小数点。但是,它没有检查这是否会导致生成重复标签。例如,2.00000001 和 2.0 都会生成 2(或 2.0)作为标签。

    您可以使用 NumericCleaner 过滤器来删除这些尾随小数,例如:

    # round to specified number of decimals
    decimals = 3
    cleaner = Filter(classname="weka.filters.unsupervised.attribute.NumericCleaner", options=["-R", "first-last", "-decimals", str(decimals)])
    cleaner.inputformat(data)
    data = cleaner.filter(data)
    

    【讨论】:

      【解决方案2】:

      问题很可能是你的值很小(

      或者,您可以告诉ArffSaver 在保存文件时要使用多少个小数(-decimal 选项)。另请参阅 ArffSaver 类的 Javadoc。

      【讨论】:

      • 我试过但仍然失败,没有保存到 arff 文件。而且,重复标签的值都是1(整数),而不是小的值。
      • python-weka-wrapper 有一个mailing list,您可以发布您的脚本和数据集进行分析。
      猜你喜欢
      • 2013-12-17
      • 1970-01-01
      • 2013-11-29
      • 2014-04-26
      • 2018-05-21
      • 2017-04-28
      • 2015-01-24
      • 1970-01-01
      • 2011-02-03
      相关资源
      最近更新 更多