天天看點

如何在機器學習中處理大型資料集

雲栖号資訊:【 點選檢視更多行業資訊

在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

如何在機器學習中處理大型資料集

不是大資料…

如何在機器學習中處理大型資料集

資料集是所有共享一個公共屬性的執行個體的集合。 機器學習模型通常将包含一些不同的資料集,每個資料集用于履行系統中的各種角色。

當任何經驗豐富的資料科學家處理與ML相關的項目時,将完成60%的工作來分析資料集,我們稱之為探索性資料分析(EDA)。 這意味着資料在機器學習中起着重要作用。 在現實世界中,我們需要處理大量資料,這使得使用普通大熊貓進行計算和讀取資料似乎不可行,這似乎需要花費更多時間,并且我們的工作資源通常有限。 為了使其可行,許多AI研究人員提出了一種解決方案,以識别處理大型資料集的不同技術和方式。

現在,我将通過一些示例來分享以下技術。 在這裡為實際實施,我使用的是google Colab,它的RAM容量為12.72 GB。

讓我們考慮使用随機數從0(含)到10(不含)建立的資料集,該資料集具有1000000行和400列。

執行上述代碼的CPU時間和挂牆時間如下:

如何在機器學習中處理大型資料集

現在,讓我們将此資料幀轉換為CSV檔案。

如何在機器學習中處理大型資料集

現在,使用熊貓加載現在生成的資料集(将近763 MB),然後看看會發生什麼。

當您執行上述代碼時,由于RAM的不可用,筆記本電腦将崩潰。 在這裡,我采用了一個相對較小的資料集,大小約為763MB,然後考慮需要處理大量資料的情況。 解決該問題的下一個計劃是什麼?

處理大型資料集的技術:

1.以塊大小讀取CSV檔案:

如何在機器學習中處理大型資料集

當我們通過指定chunk_size讀取大型CSV檔案時,原始資料幀将被分解成塊并存儲在pandas解析器對象中。 我們以這種方式疊代對象,并連接配接起來以形成花費較少時間的原始資料幀。

在上面生成的CSV檔案中,此檔案包含1000000行和400列,是以,如果我們讀取100000行中的CSV檔案作為塊大小,則

如何在機器學習中處理大型資料集

現在我們需要疊代清單中的塊,然後需要将它們存儲在清單中并連接配接起來以形成完整的資料集。

如何在機器學習中處理大型資料集

我們可以觀察到閱讀時間的大幅改善。 這樣,我們可以讀取大型資料集并減少讀取時間,有時還可以避免系統崩潰。

2.更改資料類型的大小:

如果要在對大型資料集執行任何操作時提高性能,則需要花費更多時間來避免此原因,我們可以更改某些列的資料類型的大小,例如(int64→int32),(float64→float32)以減少空間 它存儲并儲存在CSV檔案中,以供進一步實施。

例如,如果我們在分塊後将其應用于資料幀,并比較檔案大小減少到一半之前和之後的記憶體使用情況,并且記憶體使用減少到一半,這最終導緻CPU時間減少

資料類型轉換前後的記憶體使用情況如下:

如何在機器學習中處理大型資料集
如何在機器學習中處理大型資料集

在這裡,我們可以清楚地觀察到3 GB是資料類型轉換之前的記憶體使用量,而1.5 GB是資料類型轉換之後的記憶體使用量。 如果我們通過計算資料幀前後的平均值來計算性能,那麼CPU時間将減少,我們的目标就可以實作。

3.從資料框中删除不需要的列:

我們可以從資料集中删除不需要的列,以便減少加載的資料幀的記憶體使用量,這可以提高我們在資料集中執行不同操作時的CPU性能。

4.更改資料格式:

您的資料是否以CSV檔案之類的原始ASCII文本存儲?

也許您可以通過使用另一種資料格式來加快資料加載速度并使用更少的記憶體。 一個很好的例子是二進制格式,例如GRIB,NetCDF或HDF。 您可以使用許多指令行工具将一種資料格式轉換為另一種格式,而無需将整個資料集都加載到記憶體中。 使用另一種格式可以使您以更緊湊的形式存儲資料,以節省記憶體,例如2位元組整數或4位元組浮點數。

5.使用正确的資料類型減少對象大小:

通常,可以通過将資料幀轉換為正确的資料類型來減少資料幀的記憶體使用量。 幾乎所有資料集都包含對象資料類型,該對象資料類型通常為字元串格式,這對記憶體效率不高。 當您考慮日期,類别特征(如區域,城市,地名)時,它們會占用更多的記憶體,是以,如果将它們轉換為相應的資料類型(如DateTime),則類别将使記憶體使用量比以前減少10倍以上 。

6.使用像Vaex這樣的快速加載庫:

Vaex是一個高性能Python庫,用于懶惰的Out-of-Core DataFrame(類似于Pandas),以可視化方式浏覽大型表格資料集。 它以每秒超過十億(10 ^ 9)個樣本/行的速度在N維網格上計算統計資訊,例如平均值,總和,計數,标準差等。 可視化使用直方圖,密度圖和3d體積渲染完成,進而允許互動式探索大資料。 Vaex使用記憶體映射,零記憶體複制政策和惰性計算來獲得優質性能(不浪費記憶體)。

現在,讓我們在上面随機生成的資料集中實作vaex庫,以觀察性能。

1.首先,我們需要根據您使用的作業系統,使用指令提示符/ shell安裝vaex庫。

2.然後,我們需要使用vaex庫将CSV檔案轉換為hdf5檔案。

執行上述代碼後,将在您的工作目錄中生成一個dataset.csv.hdf5檔案。 資料類型轉換前後的記憶體使用情況如下:

如何在機器學習中處理大型資料集

可以看出,将CSV轉換為hdf5檔案花費了将近39秒,相對于檔案大小而言,時間要短一些。

3.使用vaex讀取hdf5檔案:-

現在我們需要通過vaex庫中的open函數打開hdf5檔案。

觀察完上面的代碼後,如果我們看到輸出,則看似花了697毫秒來讀取hdf5檔案,由此我們可以了解讀取3GB hdf5檔案的執行速度。 這是vaex庫的實際優勢。

如何在機器學習中處理大型資料集

通過使用vaex,我們可以對大型資料幀執行不同的操作,例如

  • 表達系統
  • 超出核心資料幀
  • 快速分組/聚合
  • 快速高效的加入

如果您想探索有關vaex庫的更多資訊,請點選此處。

結論:

通過這種方式,我們可以在機器學習中處理大型資料集時遵循這些技術。

如果您喜歡這篇文章,請閱讀這篇文章。如果您想在linkedin上與我聯系,請點選下面的連結。

【雲栖号線上課堂】每天都有産品技術專家分享!

課程位址:

https://yqh.aliyun.com/live

立即加入社群,與專家面對面,及時了解課程最新動态!

【雲栖号線上課堂 社群】

https://c.tb.cn/F3.Z8gvnK

原文釋出時間:2020-06-24

本文作者:聞數起舞

本文來自:“

51CTO

”,了解相關資訊可以關注“