我正在尝试将我numpy
的数据点数组分为测试集和培训集。为此,我从数组中随机选择行以用作训练集,其余的是测试集。
这是我的代码:
matrix = numpy.loadtxt("matrix_vals.data", delimiter=',', dtype=float)
matrix_rows, matrix_cols = matrix.shape
# training set
randvals = numpy.random.randint(matrix_rows, size=50)
train = matrix[randvals,:]
test = numpy.delete(matrix, randvals, 0)
print matrix.shape
print train.shape
print test.shape
但是我得到的输出是:
matrix.shape: (130, 14)
train.shape: (50, 14)
test.shape: (89, 14)
这显然是错误的,因为来自训练和测试的行数应总计为矩阵中的行总数,但显然要多得多。谁能帮助我找出问题所在?
因为您正在生成带有replace的随机整数,所以randvals
几乎可以肯定会包含重复索引。
使用重复索引的索引将多次返回同一行,因此matrix[randvals, :]
可以确保为您提供正好有50行的输出,而不管其中是否有一些重复。
相反,np.delete(matrix, randvals, 0)
只会删除唯一行索引,因此只会减少中的唯一值数量,从而减少行数randvals
。
尝试比较:
print(np.unique(randvals).shape[0] == matrix_rows - test.shape[0])
# True
要生成的向量独特随机指标介于0和1 - matrix_rows
,你可以使用np.random.choice
同replace=False
:
uidx = np.random.choice(matrix_rows, size=50, replace=False)
然后matrix[uidx].shape[0] + np.delete(matrix, uidx, 0).shape[0] == matrix_rows
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句