我正在使用python生成10倍交叉验证的训练和测试数据,并将数据集写入2x10分离文件(每个折叠写一个训练文件和一个测试文件).奇怪的是,当将数据写入文件时,总会有一条"丢失"的行.实际上,它甚至可能不会"丢失",因为我后来发现文件中间的某些行(只有一行)将自己连接到它的前一行.所以输出文件应该类似于以下内容(总共应该有39150行):
44 1 90 0 44 0 45 46 0 1
55 -3 95 0 44 22 40 51 12 4
50 -3 81 0 50 0 31 32 0 1
44 -4 76 0 42 -30 32 34 2 1
Run Code Online (Sandbox Code Playgroud)
但是,我一直得到39149行,并且在文件中间的某处似乎弄得像这样:
44 1 90 0 44 0 45 46 0 1
55 -3 95 0 44 22 40 51 12 450 -3 81 0 50 0 31 32 0 1
44 -4 76 0 42 -30 32 34 2 1
Run Code Online (Sandbox Code Playgroud)
我的代码:
def k_fold(myfile, myseed=1, k=10):
# Load data
data = open(myfile).readlines()
# Shuffle input
random.seed = myseed
random.shuffle(data)
# Compute partition size given input k
len_total = len(data)
len_part = int(math.floor(len_total / float(k)))
# Create one partition per fold
train = {}
test = {}
for i in range(k):
test[i] = data[i * len_part:(i + 1) * len_part]
train[i] = data[0:i * len_part] + data[(i + 1) * len_part:len_total]
return train, test
if __name__ == "__main__":
path = '....' #some path and input
input = '...'
# Generate data
[train, test] = k_fold(input)
# Write data to files
for i in range(10):
train_old = path + 'tmp_train_' + str(i)
test_old = path + 'tmp_test_' + str(i)
trainF = open(train_old, 'a')
testF = open(test_old, 'a')
print(len(train[i]))
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我正在为训练和测试数据集做同样的事情.测试数据集输出正确的文件(4350行),但训练数据集存在上述问题.我确信该函数返回39150行训练数据,所以我认为问题应该在文件写入部分.任何机构都有任何想法我怎么可能做错了?提前致谢!
我假设双倍长度行的前半部分是原始文件的最后一行.
如果文件不以空行结束,则返回的行readlines(或通过迭代文件)仍将以除最后一行之外的LF字符结束.在那种情况下,你所做的改组将把那条无线放在中间的某个地方.'\n' '\n''data'
strip在处理之前将空行添加到原始文件或所有行,并在写回文件时将换行添加到每行.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |