使用java在arff文件中定义属性

时间:2014-12-15 13:38:30

标签: java csv weka

我在weka中使用j48方法。我的样本培训数据.arff文件如下,

 @relation l4_tbl_final

    @attribute MouseVariance numeric
    @attribute EyeValue numeric
    @attribute SocialTime numeric
    @attribute KeyWords numeric
    @attribute InvolvedTime numeric
    @attribute grade {B,A,C}

    @data
    2731.35,87,47.55,0,49.7,B
    864.891,55,0,0,94.33,B
    2495.8,1386,0,2,71.75,A
    1104.04,4490,0,0,61.91,B

前5个值是参数,并且基于该等级' A' B'' C'给出了。

现在我需要提供测试数据集并预测这些数据的等级。为此我应该提供testdata.arff文件如下(?等级的标记)

@attribute MouseVariance numeric
@attribute EyeValue numeric
@attribute SocialTime numeric
@attribute KeyWords numeric
@attribute InvolvedTime numeric
@attribute grade {B,A,C}

@data
2731.35,87,47.55,0,49.7,?
864.891,55,0,0,94.33,?
2495.8,1386,0,2,71.75,?
1104.04,4490,0,0,61.91,?

我使用以下java代码将sql数据库转换为csv,然后将csv转换为arff:

while (resultSet.next()) {
        row = spreadsheet.createRow(i);
        cell = row.createCell(0);
        cell.setCellValue(resultSet.getString("MouseVariance"));
        cell = row.createCell(1);
        cell.setCellValue(resultSet.getString("EyeValue"));
        cell = row.createCell(2);
        cell.setCellValue(resultSet.getString("SocialTime"));
        cell = row.createCell(3);
        cell.setCellValue(resultSet.getString("KeyWords"));
        cell = row.createCell(4);
        cell.setCellValue(resultSet.getString("InvolvedTime"));
        cell = row.createCell(5);
        cell.setCellValue("?");

                i++;
    }

但是当我以这种方式创建arff文件时,该属性显示为

@attribute grade {numaric} value.

因此预计等级不会被预测。 但如果它如下,将解决问题。

 @attribute grade {B,A,C}

我该如何解决?

1 个答案:

答案 0 :(得分:0)

听起来,属性不知道列表中可用的名义值列表。

也许AddValues过滤器可能有助于将这些项添加到列表中。您可以将A,B和C的值添加到名义变量中,从而使它们与训练数据保持一致。

如果这不是问题,请提供更多代码和生成的输出,我会进一步了解。

希望这有帮助!