首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >大数组和MemoryError:无法分配内存(在Python中)

大数组和MemoryError:无法分配内存(在Python中)
EN

Data Science用户
提问于 2021-05-17 13:35:47
回答 2查看 19.8K关注 0票数 1

我试图创建一个使用线性回归的预测模型,数据集有157,673个条目。

数据(在csv文件中)采用以下格式:

代码语言:javascript
运行
复制
Timestamp,Signal_1,Signal_2,Signal_3,Signal_4,Signal_5
2021-04-13 11:03:13+02:00,3,3,3,12,12

我现在的代码是:

代码语言:javascript
运行
复制
    filename = 'test.csv'
    df = pd.read_csv(filename , parse_dates=['Timestamp'], header=0)
    df['Timestamp'] = pd.to_numeric(pd.to_datetime(df['Timestamp']))
    u, v, w, x, y, z = df.values.T
    
    X = np.asarray([v, w, x, y, z])
    Y = np.asarray([u, u, u, u, u])
    X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, shuffle= True)
    
    lineReg = LinearRegression()
    lineReg.fit(X_train, y_train)
    print('Score: ', lineReg.score(X_test, y_test))
    print('Weights: ', lineReg.coef_)

当打印出X和Y的形状时,它是(5, 157673) (在Y数组中放置u 4次之后,否则会产生错误ValueError: Found input variables with inconsistent numbers of samples: [5, 1])。

但是,现在我遇到了错误MemoryError: Unable to allocate 185. GiB for an array with shape (157673, 157673) and data type float64

为什么会这样呢?在某个地方一定有一个错误,如果不是,为什么它突然变成了(157673, 157673)而不是(6, 157673)

EN

回答 2

Data Science用户

发布于 2021-05-20 09:05:25

快速修正就是改变数据格式--我看不出你的数据是什么样子的,所以我的建议在没有例子的情况下仍然停留在理论上

  1. float64是最贵的。使用float32或float16 -取决于您需要多少精度点。如果它们只是整数,取决于范围,您甚至可以使用int8 (如果小于255) --在pd.read_csv函数中使用dtypes参数。或者在稍后使用astype时转换它们。
  2. 时间戳--决定所需时间的精确性--如果你对日子没问题--不要存储时间、分钟和其他
  3. 或者,usse DataTable https://github.com/h2oai/datatable - Pandas不是处理大数据时效率最高的库。不过,我认为前两点会解决你的问题。因为(157673,157673)不是太大,而是185个。GiB听起来太过分了!
票数 0
EN

Data Science用户

发布于 2022-02-19 18:57:15

您正在使用的科学工具包-学习的LinearRegression,优化与OLS (普通最小二乘)。OLS需要大量的内存。

您应该切换到scikit学习的SGDRegressor,它使用随机梯度下降(SGD)来优化。SGD使用的内存比OLS少得多。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/94556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档