0

我目前正在使用 scikit-multilearn 进行多标签分类。我必须使用 meka.classifiers.multilabel.CM作为 meka_classifier。
但是当我运行我的代码时,我得到了不同的错误,我不明白为什么..

meka = Meka(
    meka_classifier="meka.classifiers.multilabel.meta.CM",
    weka_classifier = "weka.classifiers.trees.J48", 
    meka_classpath = meka_classpath#, #obtained via download_meka
)
print("Fit")
meka.fit(X_train, y_train)

我不得不说,traningsdata 和路径(Weka 和 Java(通过 wichcraft))都在工作。如果我用 BR 交换 meka_classifier 一切正常。
运行代码后,我收到以下错误消息:

weka.core.UnsupportedAttributeTypeException: weka.classifiers.trees.J48: Cannot handle numeric class!
at weka.core.Capabilities.test(Capabilities.java:1067)
at weka.core.Capabilities.test(Capabilities.java:1256)
at weka.core.Capabilities.test(Capabilities.java:1138)
at weka.core.Capabilities.testWithFail(Capabilities.java:1468)
at weka.classifiers.trees.J48.buildClassifier(J48.java:277)
at meka.classifiers.multilabel.meta.CM.buildClassifier(CM.java:50)
at meka.classifiers.multilabel.Evaluation.runExperiment(Evaluation.java:229)
at meka.classifiers.multilabel.ProblemTransformationMethod.runClassifier(ProblemTransformationMethod.java:172)
at meka.classifiers.multilabel.ProblemTransformationMethod.evaluation(ProblemTransformationMethod.java:152)
at meka.classifiers.multilabel.meta.CM.main(CM.java:83)

奇怪的是,它说他不能处理数值,因为如果我更改为 BR,分类器对(相同的)数据没有问题。
在错误消息上方还有一个关于如何使用分类器(选项)的文本。所以我用另一种方式尝试了它:

meka = Meka(
    meka_classifier = "meka.classifiers.multilabel.meta.CM  -I 10 -W meka.classifiers.multilabel.CC - -S 0 -W weka.classifiers.trees.J48", 
    #weka_classifier = "weka.classifiers.trees.J48", 
    meka_classpath = meka_classpath#, #obtained via download_meka
)

 print("Fit Data")
 meka.fit(X_train, y_train)

 print("Predict")
 prediction = meka.predict(x_test)

带有 weka_classifier 的命令行就在那里,因为我以不同的方式尝试了它(从 meka_classifier 中排除了 J48 并将其包含在其中)。无论如何,我总是得到同样的错误:

Traceback (most recent call last):
File "C:/Users/*****/Desktop/MachineLearningClassifier/blabla.py", line 72, in <module>
prediction = meka.predict(x_test)
File "D:\Users\*****\AppData\Local\Programs\Python\Python36\lib\site-packages\skmultilearn\ext\meka.py", line 314, in predict
self._parse_output()
File "D:\Users\*****\AppData\Local\Programs\Python\Python36\lib\site-packages\skmultilearn\ext\meka.py", line 374, in _parse_output
predictions = self.output_.split(predictions_split_head)[1].split(
IndexError: list index out of range

我已经搜索了这个错误,并且在那里安装了 arff 而不是 liac-arff 的人,但这里不是这种情况。是的,就像我说的,如果我改用 BR 或其他东西都可以。它只是不适用于CM。我现在不知道该怎么办......我希望有人能提供帮助。提前致谢!

最好的问候

编辑:
在 fit() 之后,我让我打印 meka.classifier_dump,并使用我发布的第二个代码,它是空的!我已经和 BR 等其他人一起测试过它,它不是空的。所以我假设我在创建分类器时做错了什么?

4

1 回答 1

1

该错误weka.core.UnsupportedAttributeTypeException: weka.classifiers.trees.J48: Cannot handle numeric class!指出 J48 算法不能用于数值类。这里的类是指你想学习的输出,而不是学习时使用的属性。J48 可以使用数字属性,但不能预测数字类。

您无法预测 J48 中的数值(例如将温度预测为整数),您只能使用 J48 预测标称类型(例如冷/中性/热之一)。

为了使用 J48,您需要将类更改为标称。

于 2019-03-21T11:09:31.460 回答