Это не совсем ответ - скорее объяснение того, почему это так сложно - но определенно слишком долго для комментария.
Прежде всего, методы лассо / риджа / эластичной сети основаны на операциях над матрицей модели (т. Е. Матрица с одной строкой на наблюдение и одной на предиктор переменная, т.е. переменные, полученные из входных данных переменные), так что в какой-то момент нет никакого способа построить матрицу модели (хотя вы могли бы сделать это кусочно, см. ниже).
Разреженные модельные матричные модели помогут в построении матричных моделей, которые в основном включают факторы (которые преобразуются в индикаторные или фиктивные переменные), но я думаю, что это не слишком вам поможет.
Этот вопрос о математическом переполнении объясняет, что для полинома n
из k
переменных требуется choose(n+k,k)
производных переменных (в терминах R: это биномиальный коэффициент, дающий количество возможных выборок размера k
из n+k
объектов). Построение функции, которая сообщает количество столбцов матрицы модели, общее количество элементов при наличии r
строк и общий размер (в Мб) матрицы модели:
calc_size <- function(deg,nvars,r=9000) {
cc <- choose(deg+nvars,nvars)
return(c(cc,cc*r,cc*r*8/2^20))
}
calc_size(10,13,r=9000)
сообщает, что вам потребуется 1,14 миллион столбцов, 10,2 миллиардов записей и 77 ГБ места для хранения матрицы модели для этой проблемы. Это не беспокоясь о том, сколько еще места нужно для расширения категориальных переменных. Если вы действительно хотите обработать 53 полностью числовых столбца до 10-го порядка, вам потребуется 1,27 * 10 ^ 11 столбцов и петабайты дискового пространства. (Меньше для разреженных матриц моделей, но комбинирование разреженных (фиктивных переменных) и не разреженных столбцов может быть сложным ...)
Если вы действительно хотите это сделать, вы можете использовать пакет biglasso . Виньетка дает пример подгонки набора данных с n = 2898, p = 1,339,511 из набора данных 31 G на основе файла. Это меньше, чем планировалось, но, по крайней мере, оно того же порядка (подгонка занимает около 51 минуты на 4 ядрах ...). Если бы я это делал, я бы сначала построил матрицу модели (возможно, небольшими кусками скажем, 500 или 1000 строк за раз) и сохраните / объедините фрагменты в файле данных на диске, затем используйте biglasso
, чтобы соответствовать модели.
Однако, в зависимости от имеющегося у вас оборудования и уровня технических знаний, вам, возможно, придется свернуть свои цели (грубая сила в столбцах C (10,53) вряд ли сработает).