簡體   English   中英

如何在不耗盡 RAM 的情況下創建額外的列,然后將其用於 ML 算法?

[英]How can I create extra columns without going out of RAM, and then use it for ML algorithms?

我有一個包含 3m+(有序)行和 100 列的數據集,我可以使用 Pandas 將其加載到我的筆記本中。 我想 append 大約 900 列是使用 100 個現有列計算的。 最終目標是訓練幾個機器學習模型(NN,隨機森林)。

當我嘗試使用 append 列使用 Pandas 時,我的機器由於 RAM 不足(我有 25GB)而崩潰。 因此,我嘗試使用 Dask,它允許我毫無問題地計算 900 列。 但是,Dask 數據幀不能用作隨機森林(Sklearn)和 Keras 模型的輸入,所以我想在某些時候你必須將它轉換回 pandas Z6A8064B5DF479455500553C47DCZ5。

在這一點上我很困惑。 速度非常重要,因為我需要經常改裝模型。 有沒有人有一些好的建議?

如果可能,您應該嘗試“縮小” pandas 中的數據類型,例如,如果列包含小於 255 的 integer 等,則使用 uint8。

You can find the max value of a datatype suing numpy: numpy.finfo() for float datatypes (float16/32/64) and numpy.iinfo() for integer datatypes ([u]int8/16/32/64)

pandas read_csv

您還可以使用 pandas read_csv 塊大小選項,如果您可以將數據保存為 csv,然后迭代您的 csv 文件

你也可以結合這兩種方法!

如果您想在大於 RAM 的數據集上進行 ML,那么 Dask-ML https://ml.dask.org/可能會滿足您的需求。 它還集成了許多常見的 3rd 方工具。

請注意,許多適用於 RAM 內數據的庫不能很好地適用於 RAM 外數據,通常您只能獲得適用於 RAM 外數據的 ML 庫的子集。 另一種方法是構建許多模型,每個模型都基於數據的子樣本(例如,將數據拆分為 N 個 DataFrame,每個 DataFrame 都適合 RAM,然后一次在每個模型上構建 model,然后將每個 model 的預測組合為后面的步驟)。

您真的需要全部 900 列嗎? 一個測試可能是對具有 900 列的一組行(例如 100k)進行子采樣並構建一個 RF sklearn model,然后詢問 model“哪些列最有用?”。 也許您只需要所有列的子集,就可以丟棄 rest? Dask 可以將行和/或列的子樣本提取到 CSV 或 Parquet 文件中,Pandas 可以讀回該文件。

也許您不需要像 RF 或 ANN 這樣強大的 model? 如果線性 model 可以,那么 Dask 的 ML 或https://vowpalwabbit.org/之類的工具可能會完成這項工作。

還要考慮升級您的 RAM - 開發人員花在學習新工具(如 Dask ML)上的時間可能比租用具有足夠 RAM 用於實驗的臨時 Amazon big-box 貴得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM