从一个随机列表中创建两个列表

4
我正在使用pandas从CSV文件中导入大量数据,读取后我会将其格式化为仅包含数字数据。这将返回一个列表内嵌列表的格式。每个列表大约包含14万个数据位。numericalData[][]
在此列表中,我希望创建测试数据训练数据。对于我的测试数据,我希望有30%的读取数据numericalData,因此我使用以下代码;

testingAmount = len(numericalData0[0]) * trainingDataPercentage / 100

非常有效。然后,我使用numpy从导入的numericalData中选择每列数据的数量;

testingData.append(np.random.choice(numericalData[x], testingAmount)  )      

然后,这会在一个循环中返回具有38列的样本,其中每列大约有49k个数据元素,这些数据是从我导入的 numericalData 中随机选择的。

问题是,我的 trainingData 需要保存其余70%的数据,但我不确定如何做到这一点。我尝试比较 testingData 中的每个元素,如果两个元素不相等,则将其添加到 trainingData 中。这导致了一个错误,并且没有起作用。接下来,我尝试从导入的数据中删除所选的 testingData ,然后将该新列保存到 trainingData 中,但这也没有起作用。

我只是过去一周才开始使用Python,所以现在有点迷失在尝试什么上。


1
你正在使用numpy和pandas吗?你说你有一个列表的列表。 - juanpa.arrivillaga
我的术语可能有点不准确。我有一个 Pandas DataFrame pd.read_csv('kddcup-10-nonDuplicate.txt', sep='\t', header=None) - Johnathan Brown
1
如果你想要执行类似分层、洗牌等操作(例如在数据不平衡的情况下),你应该使用sklearn或其他库来完成。请参见这里 - juanpa.arrivillaga
太棒了,谢谢你提供这个。看起来正是我需要的。 - Johnathan Brown
1个回答

5
你可以使用random.shuffle来打乱列表,然后进行分割。以玩具示例为例:
import random
data = range(1, 11)

random.shuffle(data)

training = data[:5]
testing = data[5:]

如需更多信息,请阅读文档


这些 :5 是什么东西? - Johnathan Brown
1
@JohnathanBrown 这是一个“切片”。例如,a = [1,2,3],a[:2] 返回 [1, 2] - Dmitry
1
这基本上就是 sklearn 为其交叉验证迭代器所做的事情,只不过它在底层使用的是 numpy.random.permutation 而不是 random.shuffle - juanpa.arrivillaga
好的,我可以使用这个,但是我需要重新排列原始数据,以确保我的“切片”在比较测试和训练时具有统一的选择。谢谢。 - Johnathan Brown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接