我对numpy很新。我需要获取一个数据集并创建一个测试集和一个训练集。 如果我的数据集是一个包含150行和4列的numpy数组(最后一列是标签),那么使用数据集中的值填充训练和测试数组的正确方法是什么?数据集可以是不同的 - 也就是说,我不想手动编写测试和训练集的形状?
我想要做的是,提供分割值,它将采用数据集并使用数据集行填充测试和训练集,并根据该值进行分割。
我需要写一个这样的方法:
def split(dataset, value, training, test):
training = np.array #this is what I am confused about how to define
test = np.array
if random.random() < value:
#this is where I am confused about how to populate the arrays
append rows to training
else:
append rows to test
答案 0 :(得分:1)
如果不是出于教育目的,您想手动分割数据,我建议使用现有的解决方案。这样你可以确定它是正确的*。 Scikit-learn具有执行cross-validation的各种功能,或者只是使用train_test_split
在训练和测试集中拆分数据:
将数组或矩阵拆分为随机训练和测试子集
例如,要将数据集拆分为80行用于训练,将20行拆分用于测试:
from sklearn.model_selection import train_test_split
x = np.random.randn(100, 5) # generate random data
x_train, x_test = train_test_split(x, train_size=0.8)
print(x_train.shape) # (80, 5)
print(x_test.shape) # (20, 5)
*至少该功能将正确实施。它不一定是正确使用的功能 - 通常有很多方法可以将数据分成训练集和测试集。根据应用程序的具体情况,其中一些可能比其他更合适。
答案 1 :(得分:0)
您可以简单地执行类似
的操作n = 4
m = 120
data = np.loadtxt('iris.txt')
train_X = data[:m, :n]
train_Y = data[:m, n:]
test_X = data[m:, :n]
test_Y = data[m:, :n]
其中 n 是输入的维度, m 是训练集中的模式数。
答案 2 :(得分:0)
如果您想将数据随机分成火车和测试,您可以通过以下方式进行:
import numpy as np
from sklearn.model_selection import train_test_split
m=150
n=4
data=np.random.randint(5,size=[m,n])
X_train, X_test, y_train, y_test = train_test_split(data[:,:n-1], data[:,n-1], test_size=value)
在上面的代码中,value表示将用作测试数据的数据的百分比。
如果你想相对于价值而不是随机分割,根据你修改后的代码似乎就是这种情况:
if random.random() < value:
#this is where I am confused about how to populate the arrays
append rows to training
else:
append rows to test
你可以做到
data_train=data[data[:,n-1]<value]
data_test=data[data[:,n-1]>=value]
答案 3 :(得分:0)
实施方式因您希望如何将数据拆分为培训和测试集而异。一种简单的方法可以是基于布尔掩码随机分割。
data = np.random.rand(150,4)
mask = np.random.rand(len(data)) < 0.5 #returns a boolean array
train = data[mask]
test = data[~mask]
这将分开火车并平均测试,每次50%。您可以通过修改0.5