【问题标题】:Creating two lists from one randomly从一个随机创建两个列表
【发布时间】:2017-03-09 09:56:14
【问题描述】:

我正在使用 pandas 从 CSV 文件中导入大量数据,一旦读取,我将其格式化为仅包含数字数据。然后返回列表中的列表。然后每个列表包含大约 140k 位数据。 numericalData[][].

从这个列表中,我希望创建TestingTraining Data。对于我的测试数据,我想要读取数据的 30% numericalData,所以我使用下面这段代码;

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

工作是一种享受。然后,我使用 numpy 从我导入的numericalData 的每一列中选择该数量的数据;

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

然后返回一个包含 38 列的样本(循环运行),其中每列包含从我导入的 numericalData 中随机选择的大约 49k 个数据元素。

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

过去一周我只在使用 python,所以我有点不知道现在该尝试什么。

【问题讨论】:

  • 你在使用 numpy 和 pandas 吗?你说你有一个列表列表。
  • 我的术语可能有点不对劲。我有一个 Pandas DataFrame pd.read_csv('kddcup-10-nonDuplicate.txt', sep='\t', header=None)
  • 如果您想做分层、随机拆分之类的事情(例如,当您有不平衡的数据时),您应该只使用sklearn 或其他一些库来执行此操作。见here
  • 太棒了,谢谢你。看起来正是我所追求的。

标签: python pandas numpy


【解决方案1】:

之后您可以使用random.shuffle 和拆分列表。以玩具为例:

import random
data = range(1, 11)

random.shuffle(data)

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

如需了解更多信息,请阅读docs

【讨论】:

  • 这些:5是什么东西?
  • @JohnathanBrown 它是slice。例如,a = [1,2,3], a[:2] 给出[1, 2]
  • 这基本上是 sklearn 为它的交叉验证迭代器所做的,除了它在底层使用 numpy.random.permutation 而不是 random.shuffle
  • 啊,好吧。我可以使用它,但我必须对原始数据进行洗牌,以确保我的slice 在比较测试和训练时具有统一的选择。谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-06-29
  • 2018-07-15
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
相关资源
最近更新 更多