如何使用另一个数组

时间:2017-03-23 11:55:37

标签: python arrays numpy

我对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

4 个答案:

答案 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

来改变每组的大小
相关问题