如何将数据随机分为训练集和测试集?

2024-05-02 01:11:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的数据集,想把它分成训练集(50%)和测试集(50%)。

假设我有100个示例存储在输入文件中,每行包含一个示例。我需要选择50行作为训练集和50行测试集。

我的想法是首先生成一个长度为100的随机列表(值范围从1到100),然后使用前50个元素作为50个训练示例的行号。测试集也一样。

这在Matlab中很容易实现

fid=fopen(datafile);
C = textscan(fid, '%s','delimiter', '\n');
plist=randperm(100);
for i=1:50
    trainstring = C{plist(i)};
    fprintf(train_file,trainstring);
end
for i=51:100
    teststring = C{plist(i)};
    fprintf(test_file,teststring);
end

但是我怎样才能用Python完成这个功能呢?我是Python新手,不知道是否可以将整个文件读入数组,并选择某些行。


Tags: 文件数据元素示例列表forfileend
3条回答

在Python中,这可以类似地使用列表来实现(注意,整个列表都在适当的位置进行了洗牌)。

import random

with open("datafile.txt", "rb") as f:
    data = f.read().split('\n')

random.shuffle(data)

train_data = data[:50]
test_data = data[50:]

你也可以用numpy。当数据存储在numpy.ndarray中时:

import numpy as np
from random import sample
l = 100 #length of data 
f = 50  #number of elements you need
indices = sample(range(l),f)

train_data = data[indices]
test_data = np.delete(data,indices)
from sklearn.model_selection import train_test_split
import numpy

with open("datafile.txt", "rb") as f:
   data = f.read().split('\n')
   data = numpy.array(data)  #convert array to numpy type array

   x_train ,x_test = train_test_split(data,test_size=0.5)       #test_size=0.5(whole_data)

相关问题 更多 >