我正在执行逻辑回归,并且在大于小样本时使用Patsy的API来准备数据时遇到了麻烦。
dmatrices
直接在DataFrame上使用该函数,我会遇到这个突然的错误(请注意,在笔记本电脑上遇到此错误后,我用300GB的内存启动了EC2,并得到了相同的错误):
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的文档,发现了这个瑰宝:
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调用)在highlevel.py的第151行返回None ,因此引发此错误
使用这些Patsy函数准备数据的正确方法是什么?您可能拥有的任何示例或指南都会有所帮助。
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
# ...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句