【问题标题】:How to convert sparse matrix data into WEKA's arff file format?如何将稀疏矩阵数据转换成WEKA的arff文件格式?
【发布时间】:2014-05-31 13:35:34
【问题描述】:

我有一个稀疏矩阵 .txt 文件,其中包含许多数字,但大多是 0。以下是来自此 .txt 文件的示例:

0 0 0.271178 0 0 0 0.538776 0 -0.631228 0 0 -0.501485 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.438643 0 0 0 0 0 0.287754 0 0 0 0 0 0 0 0 0 -0.498918 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.370479 0 0 0.1.10987 0 0 0.163637 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.261758 0 0 0 0.153415 0.17412 0 -0.129725 0 0.17598 0 0 0 0 0 0 0.56053 0 0 -0.211302 0 0 0 0 0 0 0 0.213277 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0698458 0 0 0 0 0 0 0 0 0 0. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.376654 0 0 -0.604655 0 0 0 0 0 0.301025 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.404718 0.610013 -0.286108 0 0.46045 0 0 0 0 0 0 0.0.193543 0 0 0 0 0 0 0 0.315063 0 0 -0.285598 0 0 0.206607 0

我需要做的是能够通过这个文件并将数据转换为WEKA's 可识别的文件格式 .arff,因此我可以在数据集上运行数据挖掘算法。有谁知道如何做到这一点?我在 StackOverflow 上发现了一些与我的问题类似的问题,但是,它们使用的是 AWK 语言的脚本,而我之前从未使用过 .awk 程序,因此我无法让这些程序正确运行。 以下是这些帖子的链接: 12

【问题讨论】:

  • 输出文件应该是什么样子的?

标签: awk converter weka arff


【解决方案1】:

查看the ARFF file format 和您链接的问题。

您可以很容易地将 awk 程序嵌入到 shell 脚本中,因此您可以这样做:

#!/bin/sh
file=$1
awk '
    BEGIN {print "@RELATION something\n"} 
    {
        data = sep = ""
        for (i=1; i<=NF; i++) {
            if ($i != 0) {
                printf "@ATTRIBUTE a_%d NUMERIC\n", i
                data = data sep $i
                sep = ","
            }
        print ""
        print "@DATA"
        print data
    }
' "$file"

调用脚本:bash script.sh data_file 并查看

@RELATION something

@ATTRIBUTE a_3 NUMERIC
@ATTRIBUTE a_7 NUMERIC
@ATTRIBUTE a_9 NUMERIC
@ATTRIBUTE a_12 NUMERIC
@ATTRIBUTE a_33 NUMERIC
@ATTRIBUTE a_39 NUMERIC
@ATTRIBUTE a_52 NUMERIC
@ATTRIBUTE a_58 NUMERIC
@ATTRIBUTE a_70 NUMERIC
@ATTRIBUTE a_72 NUMERIC
@ATTRIBUTE a_74 NUMERIC
@ATTRIBUTE a_77 NUMERIC
@ATTRIBUTE a_84 NUMERIC
@ATTRIBUTE a_86 NUMERIC
@ATTRIBUTE a_124 NUMERIC
@ATTRIBUTE a_128 NUMERIC
@ATTRIBUTE a_129 NUMERIC
@ATTRIBUTE a_131 NUMERIC
@ATTRIBUTE a_133 NUMERIC
@ATTRIBUTE a_141 NUMERIC
@ATTRIBUTE a_144 NUMERIC
@ATTRIBUTE a_152 NUMERIC
@ATTRIBUTE a_185 NUMERIC
@ATTRIBUTE a_189 NUMERIC
@ATTRIBUTE a_207 NUMERIC
@ATTRIBUTE a_210 NUMERIC
@ATTRIBUTE a_216 NUMERIC
@ATTRIBUTE a_219 NUMERIC
@ATTRIBUTE a_222 NUMERIC
@ATTRIBUTE a_238 NUMERIC
@ATTRIBUTE a_239 NUMERIC
@ATTRIBUTE a_240 NUMERIC
@ATTRIBUTE a_242 NUMERIC
@ATTRIBUTE a_249 NUMERIC
@ATTRIBUTE a_257 NUMERIC
@ATTRIBUTE a_260 NUMERIC
@ATTRIBUTE a_263 NUMERIC

@DATA
0.271178,0.538776,-0.631228,-0.501485,0.438643,0.287754,-0.498918,0.475561,0.370479,-0.300765,-1.10987,0.163637,0.304006,0.181697,-0.261758,0.153415,0.17412,-0.129725,0.17598,0.56053,-0.211302,0.213277,0.0698458,0.661972,0.376654,-0.604655,0.301025,-0.431324,-0.139445,0.404718,0.610013,-0.286108,0.46045,-0.193543,0.315063,-0.285598,0.206607

但是你必须让我们知道这是否是你想要输出的。

【讨论】:

  • +1 表示要多跑 26 英里来调查问题!我只是要告诉 OP 缩写他们的输入并发布预期的输出!
【解决方案2】:

很棒的脚本Glenn,但它缺少索引并将其放在属性名称中。比如:

@attribute a_0 numeric
@attribute a_1 numeric
@attribute a_2 numeric
@attribute a_3 numeric
...

@data
{3 0.271178,...}

这是避免丢失属性位置信息所需的稀疏 ARFF 格式。我的建议是采用密集格式(仅 CSV)并使用 WEKA 过滤器NonSparseToSparse

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 2013-10-03
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2023-04-10
    • 2021-11-25
    相关资源
    最近更新 更多