如何在 Rapidminer 中将 ArrayList 转换为 ExampleSet?

How to convert ArrayList to ExampleSet in Rapidminer?

我正在使用 java 创建 rapidminer 的扩展。我有一个 Example 类型的元素数组,我需要将它转换为 ExampleSet 类型的数据集。

Rapidminer 的 ExampleSet 定义如下所示:

public interface ExampleSet extends ResultObject, Cloneable, Iterable<Example>

我需要从数据集中选取某些元素并将其发回,仍然作为 ExampleSet,但是转换不起作用,我不能简单地创建新的 ExampleSet 对象,因为它是一个接口。

private ExampleSet generateSet(ExampleSet dataset){
    List<Example> list = new ArrayList<Example>();
    // pick elements from sent dataset and add them to newly created list above
    return (ExampleSet)list;
}

您需要的不仅仅是简单的显式转换。 在 RapidMiner 中,ExampleSet 不仅仅是 Example 的集合。它包含更复杂的信息和逻辑。

因此,您需要另一种方法来处理 ExampleSets。就像你已经说过的,它只是接口,它引导我们选择正确的子类型。

对于初学者,(自:7.3) 只需使用 ExampleSets class 的方法之一。
您还需要定义此 ExampleSet 将要包含的每个 Attribute,即列。

下面,我创建了一个名为 First

的单个 Attribute
Attribute attributeFirst = AttributeFactory.createAttribute("First", Ontology.POLYNOMINAL);
ExampleSetBuilder builder = ExampleSets.from(attributeFirst);
builder.addDataRow(example.getDataRow());
ExampleSet result = builder.build();

您还可以使用以下更通用的方式获取属性:

Attribute[] attributes = example.getAttributes().createRegularAttributeArray();
ExampleSetBuilder builder = ExampleSets.from(attributes);
...

如果您在很多情况下必须创建或更改 ExampleSet,我鼓励您编写自己的 ExampleSetBuilder,因为原始实现有很多缺点。

您也可以尝试搜索其他扩展程序,它们可能已经满足您的要求,并且您不需要创建自己的扩展程序(相信我,这并不轻松)。

ExampleSet class 已被弃用(但仍然可以很好地使用)。

您可能需要考虑切换到名为 Belt (https://github.com/rapidminer/belt) 的较新数据集 API。它使用起来更快、更直观。它仍在积极开发中,因此也欢迎提供反馈。

此外,如果您有更具体的问题,请随时访问 RapidMiner 社区 (https://community.rapidminer.com/),那里的许多开发人员也非常活跃。