我正在尝试使用python中的weka来学习给定数据的规则。Weka返回了“无法处理字符串和数值属性”的错误信息。
我使用的是 https://github.com/fracpete/python-weka-wrapper3
起初,我做了以下操作:
loader = Loader(classname="weka.core.converters.CSVLoader") data = loader.load_file(path) data.class_is_last()
但得到了以下错误:
javabridge.jutil.JavaException: weka.associations.Apriori: Cannot handle numeric attributes!
当尝试学习规则时出现了这个错误。
我理解这个错误,weka需要名义属性。好的!我已经搜索并找到了解决方法: http://weka.sourceforge.net/doc.dev/weka/filters/unsupervised/attribute/NominalToString.html
因此我尝试了以下方法:
loader = Loader(classname="weka.core.converters.CSVLoader") data = loader.load_file(path) nominal = Filter(classname="weka.filters.unsupervised.attribute.NumericToNominal", options=["-R", "first-last"]) nominal.inputformat(data) nominal_data = nominal.filter(data) nominal_data.class_is_last() return nominal_data
但得到了以下错误:
javabridge.jutil.JavaException: weka.associations.Apriori: Cannot handle string attributes!
我错过了什么?谢谢
回答:
在Weka中,存在String
和nominal
两种数据类型。String
数据类型是一种文本类型,具有未指定数量的值(例如,追踪ID: R99432239US),而Nominal
类型对应于来自一个闭合集合的值(例如,状态{walking, running, sitting})。
在解析csv
文件时,加载器会根据数据中出现的值的数量来分配属性的数据类型。
如果你想将数值作为名义值处理,我认为你应该考虑使用Discretize
过滤器,而不是NumericToNominal
过滤器。