我正在处理维度超过 10,000 的数据集。为了使用Weka,我需要将文本文件转换为ARFF格式,但是由于即使使用稀疏ARFF格式,属性也太多,文件大小太大。是否有与数据类似的方法来避免在 ARFF 文件头中写入如此多的属性标识符。
例如 :
@属性A1数字
@属性A2数字
...
...
@属性 A10000 数字
我在 AWK 中编写了一个脚本,将以下几行(在 TXT 文件中)格式化为 ARFF
示例.txt 来源:
Att_0 | Att_1 | Att_2 | ... | Att_n
1 | 2 | 3 | ... | 999
我的脚本 (to_arff),您可以根据 TXT 文件中使用的分隔符更改 FS 值:
#!/usr/bin/awk -f
# ./<script>.awk data.txt > data.arff
BEGIN {
FS = "|";
# WEKA separator
separator = ",";
}
# The first line
NR == 1 {
# WEKA headers
split(FILENAME, relation, ".");
# the relation's name is the source file's name
print "@RELATION "relation[1]"\n";
# attributes are "numeric" by default
# types available: numeric, <nominal> {n1, n2, ..., nN}, string and date [<date-format>]
for (i = 1; i <= NF; i++) {
print "@ATTRIBUTE "$i" NUMERIC";
}
print "\n@DATA";
}
NR > 1 {
s = "";
first = 1;
for (i = 1; i <= NF; i++) {
if (first)
first = 0;
else
s = s separator;
s = s $i;
}
print s;
}
Output:
@RELATION example
@ATTRIBUTE Att_0 NUMERIC
@ATTRIBUTE Att_1 NUMERIC
@ATTRIBUTE Att_2 NUMERIC
@ATTRIBUTE Att_n NUMERIC
@DATA
1,2,3,9999
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)