【发布时间】:2017-01-09 16:19:00
【问题描述】:
我正在使用Ubuntu 15.10、Python 2.7,并且当前安装了python weka-wrapper 包。
我正在执行以下操作:(1) 根据我从.csv 文件加载的数据训练分类器。 (2) 从另一个.csv 文件加载第二组数据——该数据具有相同的标头,用于指定用于训练原始分类器的特征。 (3) 我正在尝试使用经过训练的分类器对从第二个文件加载的数据进行分类——实际上,我真正想要的是每个实例符合某个类的概率(但这是一个我将很快指出的旁白)
这是我的代码,它将经过训练的分类器和(第二个)文件名作为输入:
def classifyData(classifier,datFile):
loader = Loader(classname="weka.core.converters.CSVLoader")
data = loader.load_file(datFile)
data.class_is_last()
preds = []
dists = []
iCount = 0
for inst in data:
iCount+=1
pred = classifier.classify_instance(inst)
dist = classifier.distribution_for_instance(inst)
preds.append(pred)
dists.append(dists)
return preds,dists
注意:我还要注意,类变量(第二个数据文件中的最后一个特征)用“?”指定,表示我没有标签的数据。 p>
简短的问题: dist 变量是否包含类别的概率?如果没有,我将如何获得这些信息?
运行此函数会产生以下错误:
Exception in thread "Thread-0" java.lang.ArrayIndexOutOfBoundsException: 1
at weka.classifiers.meta.Bagging.distributionForInstance(Bagging.java:816)
at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:173)
Traceback (most recent call last):
File "parsFunc.py", line 33, in main
initProb = classifyData(classifTrain,ttDir+"temp.csv")
File "parsFunc.py", line 136, in classifyData
pred = classifier.classify_instance(inst)
File "/usr/local/lib/python2.7/dist-packages/weka/classifiers.py", line 105, in classify_instance
return self.__classify(inst.jobject)
File "/usr/local/lib/python2.7/dist-packages/javabridge/jutil.py", line 852, in fn
raise JavaException(x)
javabridge.jutil.JavaException: 1
不完全是这里出了什么问题。我知道第二个文件中的实例数量与用于训练模型的实例数量相同,并且标题相同。任何帮助将不胜感激!
【问题讨论】:
标签: python-2.7 wrapper weka