我有两个大的功能表(training_df
和test_df
设置)。在训练数据中,已经将列标准化为具有单位方差的零均值,并且使用来自训练数据的缩放来缩放测试数据。
在缩放之前,原始特征非常稀疏,我想重建用于建模的稀疏结构。通过将列的训练列的模式添加到两个数据表中,可以恢复稀疏结构。我可以有效地为训练数据做到这一点,但我很难找到一种有效的方法来实现测试数据。我目前的尝试如下:
# Function to calculate mode
mode <- function(x) {
ux <- unique(x)
as.numeric(ux[which.max(tabulate(match(x, ux)))])
}
# VERY slow sparsification of columns in test set
for (cn in names(test_df)) { # feature names are identical in data frames
mode_tmp <- mode(training_df[, ..cn])
set(test_df, j = cn, value = test_df[, ..cn] - mode_tmp)
}
# Fast sparsification of training set
training_df[, colnames(training_df) := lapply(.SD, function(x) x - mode(x)), .SDcols = 1:ncol(training_df)]
答案 0 :(得分:0)
解决方案由docendo discimus在评论中给出。 test_df
的计算瓶颈是模式函数。通过简单地用[, ..cn]
替换[[cn]]
,数据表返回原子向量而不是data.table
,计算模式所花费的总时间从几小时减少到几秒。