Как подготовить большие наборы данных с помощью API Patsy?

Я провожу логистическую регрессию и испытываю проблемы с использованием API Пэтси для подготовки данных, когда они больше, чем небольшая выборка.

С использованием dmatrices работать непосредственно на DataFrame, я остаюсь с этой внезапной ошибкой (обратите внимание, я столкнулся с EC2 с 300 ГБ ОЗУ после того, как столкнулся с этим на моем ноутбуке, и получил ту же ошибку):

Traceback (most recent call last):
File "My_File.py", line 22, in <module>
   df, return_type="dataframe")
File "/root/anaconda/lib/python2.7/site-packages/patsy/highlevel.py", line 297, in dmatrices
 NA_action, return_type)
File "/root/anaconda/lib/python2.7/site-packages/patsy/highlevel.py", line 156, in do_highlevel_design
return_type=return_type)
File "/root/anaconda/lib/python2.7/site-packages/patsy/build.py", line 989, in build_design_matrices
results.append(builder._build(evaluator_to_values, dtype))
File "/root/anaconda/lib/python2.7/site-packages/patsy/build.py", line 821, in _build
m = DesignMatrix(np.empty((num_rows, self.total_columns), dtype=dtype),
MemoryError

Итак, я просмотрел документы Пэтси и нашел этот драгоценный камень:

patsy.incr_dbuilder(formula_like, data_iter_maker, eval_env=0)
    Construct a design matrix builder incrementally from a large data set.

Однако метод редко документирован, а исходный код в основном не комментируется.

Я пришел к этому коду:

def iter_maker():
    with open("test.tsv", "r") as f:
        reader = csv.DictReader(f, delimiter="\t")
        for row in reader:
            yield(row)


y, dta = incr_dbuilders("s ~ C(x) + C(y):C(rgh) + \
C(z):C(f) + C(r):C(p) + C(q):C(w) + \
C(zr):C(rt) + C(ff):C(djjj) + C(hh):C(tt) + \
C(bb):lat + C(jj):lng + C(ee):C(bb) + C(qq):C(uu)",
        iter_maker)

df = dmatrix(dta, {}, 0, "drop", return_type="dataframe")

но я получаю PatsyError: Error evaluating factor: NameError: name 'ff' is not defined

Это происходит, потому что _try_incr_builders (вызывается из dmatrix) возвращает None в строке 151 файла highlevel.py

Как правильно использовать эти функции Patsy для подготовки моих данных? Любые примеры или рекомендации, которые вы можете иметь, будут полезны.

1 ответ

Решение

y а также dta являются DesignInfo объекты - они кодируют всю информацию, необходимую для извлечения строки кадра данных и преобразования ее в строку матрицы проекта. Тем не менее, они не содержат ваших фактических данных - чтобы получить часть вашей матрицы проектирования, вы должны предоставить им часть ваших данных. Чтобы их использовать, нужно сделать что-то вроде

for data_chunk in iter_maker():
  y_chunk, design_chunk = dmatrices((y, dta), data_chunk,
                                    NA_action="drop", return_type="dataframe")
  # do something with y_chunk and design_chunk
  # ...
Другие вопросы по тегам