【发布时间】:2017-07-15 10:19:27
【问题描述】:
我正在使用 glmnet 获取网络数据。通常,数据是分类的(因子的高基数)并且具有数百万个样本。我正在处理“大数据”并希望内存效率。
因为它是分类的,所以可以通过分组和传递每组的成功和失败次数来更有效地表示数据:例如 'male','30-35' :30 次成功,50 次失败
我面临的问题是交叉验证...通过分组我不能只对我的数据集进行分区(称为 X 原始分组数据集)。我想要的是能够传入原始分组数据自变量,然后将“折叠的结果”分区:例如,30 个成功 50 个失败将被分成 10 个#success,#failure 对(复制什么会如果我对原始未分组的数据进行交叉验证,就会发生这种情况。有没有以这种方式运行 cv.glmnet?复制所有数据 k 次(具有不同的成功失败值)的替代方案显然内存效率较低。
假设我有 2 个组和 2 个折叠:
male','30-35' : 30 成功,50 失败
female','30-35' : 50 次成功,30 次失败
那么我想要的是
X =
[[male','30-35']
[female','30-35']]
y =
[[20,30], [10,20],
[[25,30], [25, 0] ]
所以 X 变量包含 n 个组。 y 因变量然后有 n 行,并且有 2 列(每列包含一个成功失败的元组) - 每列代表一个折叠。现在我并不是说我追求这个特定的数据结构,只是对于分组数据,我不想创建一个 kN 行 X_fold 矩阵和相应的具有 kN 行的 y_fold 矩阵。
即X_fold =
[['male','30-35',...]
['female','30-35',...]
['male','30-35',...]
['female','30-35',...]
]
和 y_fold =
[[20,30], ,
[25,30],
[10,20]
[25, 0] ]
关键是X有很多行和列,当独立数据相同时我不想复制它,只有成功和失败的数量会发生变化(允许折叠为0成功和0失败的某些行)
我假设如果不修改源代码就无法做到这一点,但我想再次检查没有其他人遇到过这个问题。
【问题讨论】:
-
您能否举例说明您想要的褶皱是什么样子的?
-
我已经澄清了。我想我建议对于分组数据,在折叠之间划分行的标准方法没有意义。相反,应该对结果计数进行分区(因此 y 数据变为 n 行(num_outcomes * num_folds),其中 num_outcomes 将是 2 用于逻辑回归。我假设这必须在代码中完成,但也许已经有一个分支代码?
-
X 和 Y 折叠是什么意思?
-
我认为如果您问自己假设数据已分组(因此结果变量是成功和失败的计数)并且它有数百万行,您将如何对数据集执行交叉验证会更容易和 10 的因素。