搜尋
首頁科技週邊人工智慧在 Python中處理大型機器學習資料集的簡單方法

在 Python中處理大型機器學習資料集的簡單方法

Apr 09, 2023 pm 07:51 PM
python機器學習數據集

本文的目標受眾:

  1. 想要對大量資料集執行 Pandas/NumPy 操作的人。
  2. 希望使用Python在大數據上執行機器學習任務的人。

在 Python中處理大型機器學習資料集的簡單方法

本文將使用 .csv 格式的檔案來示範 python 的各種操作,其他格式如陣列、文字檔案等也是如此。

為什麼我們不能將 pandas 用於大型機器學習資料集呢?

我們知道Pandas 使用電腦記憶體(RAM) 來載入您的機器學習資料集,但是,如果您的電腦有8 GB 的記憶體(RAM),那麼為什麼pandas 仍然無法載入2 GB 的資料集呢?原因是使用 Pandas 加載 2 GB 檔案不僅需要 2 GB RAM,還需要更多內存,因為總內存需求取決於資料集的大小以及您將在該資料集上執行的操作。

以下是載入到電腦記憶體中的不同大小的資料集的快速比較:

在 Python中處理大型機器學習資料集的簡單方法

#此外,Pandas只使用作業系統的一個內核,這使得處理速度很慢。換句話說,我們可以說pandas不支持並行(將一個問題分解成更小的任務)。

假設電腦有4 個內核,下圖是載入CSV 檔案的時候pandas 使用的內核數:

在 Python中處理大型機器學習資料集的簡單方法

普遍不使用pandas 處理大型機器學習資料集的主要原因有以下兩點,一是電腦記憶體使用量,二是缺乏並行性。在 NumPy 和 Scikit-learn中,對於大數據集也面臨相同的問題。

為了解決這兩個問題,可以使用名為Dask的python函式庫,它能夠使我們在大型資料集上執行pandas、NumPy和ML等各種操作。

Dask是如何運作的?

Dask是在分區中載入你的資料集,而pandas通常是將整個機器學習資料集作為一個dataframe。在Dask中,資料集的每個分區都被認為是一個pandas dataframe。

在 Python中處理大型機器學習資料集的簡單方法

Dask 一次載入一個分割區,因此您不必擔心出現記憶體分配錯誤問題。

以下是使用dask 在電腦記憶體中載入不同大小的機器學習資料集的比較:

在 Python中處理大型機器學習資料集的簡單方法

Dask 解決了平行性問題,因為它將資料拆分為多個分區,每個分區使用一個單獨的內核,這使得資料集上的計算更快。

假設電腦有4 個內核,以下是dask 在載入5 GB csv 檔案時的方式:

在 Python中處理大型機器學習資料集的簡單方法

要使用dask 函式庫,您可以使用下列指令進行安裝:

<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pip</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">install</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dask</span>

Dask 有幾個模組,如dask.array、dask.dataframe 和dask.distributed,只有在您分別安裝了對應的函式庫(如NumPy、pandas 和Tornado)後才能運作。

如何使用 dask 處理大型 CSV 檔案?

dask.dataframe 用於處理大型 csv 文件,首先我嘗試使用 pandas 導入大小為 8 GB 的資料集。

<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pandas</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">as</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pd</span><br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">df</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pd</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">read_csv</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">“data</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">csv”</span>)

它在我的 16 GB 記憶體筆記型電腦中引發了記憶體分配錯誤。

現在,嘗試使用dask.dataframe 導入相同的8 GB 資料

在 Python中處理大型機器學習資料集的簡單方法

#dask 只花了一秒鐘就將整個8 GB 檔案載入到ddf變數中。

讓我們看看 ddf 變數的輸出。

在 Python中處理大型機器學習資料集的簡單方法

如您所見,執行時間為 0.5 秒,這裡顯示已分割為 119 個分割區。

您還可以使用以下方法檢查資料幀的分區數:

在 Python中處理大型機器學習資料集的簡單方法

#預設情況下,dask 將我的8 GB CSV 檔案載入到119 個分區(每個分區大小為64MB),這是根據可用的實體記憶體和電腦的核心數來完成的。

也可以在載入 CSV 檔案時使用 blocksize 參數指定我自己的分割區數。

在 Python中處理大型機器學習資料集的簡單方法

現在指定了字串值為400MB 的blocksize 參數,這使得每個分割區大小為400 MB,讓我們看看有多少個分割區

在 Python中處理大型機器學習資料集的簡單方法

關鍵點:使用Dask DataFrames 時,一個好的經驗法則是將分割區保持在100MB 以下。

使用下列方法可呼叫dataframe的特定分割區:

在 Python中處理大型機器學習資料集的簡單方法

也可透過使用負索引來呼叫最後一個分割區,就像我們在呼叫清單的最後一個元素時所做的那樣。

讓我們看看資料集的形狀:

在 Python中處理大型機器學習資料集的簡單方法

您可以使用len() 檢查資料集的行數:

在 Python中處理大型機器學習資料集的簡單方法

#Dask 已經包含了範例資料集。我將使用時間序列資料向您展示 dask 如何對資料集執行數學運算。

在 Python中處理大型機器學習資料集的簡單方法

導入dask.datasets後,ddf_20y 載入了從 2000 年 1 月 1 日到 2021 年 12 月 31 日的時間序列資料。

讓我們看看我們的時間序列資料的分區數。

在 Python中處理大型機器學習資料集的簡單方法

20 年的時間序列資料分佈在 8035 個分割區。

在 pandas 中,我們使用 head 列印資料集的前幾行,dask 也是這樣。

在 Python中處理大型機器學習資料集的簡單方法

讓我們計算 id 列的平均值。

在 Python中處理大型機器學習資料集的簡單方法

dask不會列印dataframe的總行數,因為它使用惰性計算(直到需要時才顯示輸出)。為了顯示輸出,我們可以使用compute方法。

在 Python中處理大型機器學習資料集的簡單方法

假設我想將資料集的每一列進行歸一化(將值轉換為0到1之間),Python程式碼如下:

在 Python中處理大型機器學習資料集的簡單方法

循環遍歷列,找到每列的最小值和最大值,並使用簡單的數學公式對這些列進行歸一化。

關鍵點:在我們的歸一化範例中,不要認為會發生實際的數值計算,它只是惰性求值(在需要之前永遠不會向您顯示輸出)。

為什麼要使用 Dask 陣列?

Dask 將陣列分成小塊,其中每個區塊都是一個 NumPy 陣列。

在 Python中處理大型機器學習資料集的簡單方法

dask.arrays 用於處理大數組,以下Python程式碼使用 dask 建立了一個 10000 x 10000 的數組並將其儲存在 x 變數中。

在 Python中處理大型機器學習資料集的簡單方法

呼叫該 x 變數會產生有關陣列的各種資訊。

查看陣列的特定元素

在 Python中處理大型機器學習資料集的簡單方法

對dask 陣列進行數學運算的Python範例:

在 Python中處理大型機器學習資料集的簡單方法

正如您所看到的,由于延迟执行,它不会向您显示输出。我们可以使用compute来显示输出:

在 Python中處理大型機器學習資料集的簡單方法

dask 数组支持大多数 NumPy 接口,如下所示:

  • 数学运算:+, *, exp, log, ...
  • sum(), mean(), std(), sum(axis=0), ...
  • 张量/点积/矩阵乘法:tensordot
  • 重新排序/转置:transpose
  • 切片:x[:100, 500:100:-2]
  • 使用列表或 NumPy 数组进行索引:x[:, [10, 1, 5]]
  • 线性代数:svd、qr、solve、solve_triangular、lstsq

但是,Dask Array 并没有实现完整 NumPy 接口。

你可以从他们的官方文档中了解更多关于 dask.arrays 的信息。

什么是Dask Persist?

假设您想对机器学习数据集执行一些耗时的操作,您可以将数据集持久化到内存中,从而使数学运算运行得更快。

从 dask.datasets 导入了时间序列数据

在 Python中處理大型機器學習資料集的簡單方法

让我们取数据集的一个子集并计算该子集的总行数。

在 Python中處理大型機器學習資料集的簡單方法

计算总行数需要 27 秒。

我们现在使用 persist 方法:

在 Python中處理大型機器學習資料集的簡單方法

持久化我们的子集总共花了 2 分钟,现在让我们计算总行数。

在 Python中處理大型機器學習資料集的簡單方法

同样,我们可以对持久化数据集执行其他操作以减少计算时间。

在 Python中處理大型機器學習資料集的簡單方法

persist应用场景:

  • 数据量大
  • 获取数据的一个子集
  • 对子集应用不同的操作

为什么选择 Dask ML?

Dask ML有助于在大型数据集上使用流行的Python机器学习库(如Scikit learn等)来应用ML(机器学习)算法。

什么时候应该使用 dask ML?

  • 数据不大(或适合 RAM),但训练的机器学习模型需要大量超参数,并且调优或集成技术需要大量时间。
  • 数据量很大。

在 Python中處理大型機器學習資料集的簡單方法

正如你所看到的,随着模型大小的增加,例如,制作一个具有大量超参数的复杂模型,它会引起计算边界的问题,而如果数据大小增加,它会引起内存分配错误。因此,在这两种情况下(红色阴影区域)我们都使用 Dask 来解决这些问题。

如官方文档中所述,dask ml 库用例:

  • 对于内存问题,只需使用 scikit-learn(或其他ML 库)。
  • 对于大型模型,使用 dask_ml.joblib 和scikit-learn estimators。
  • 对于大型数据集,使用 dask_ml estimators。

让我们看一下 Dask.distributed 的架构:

在 Python中處理大型機器學習資料集的簡單方法

Dask 让您能够在计算机集群上运行任务。在 dask.distributed 中,只要您分配任务,它就会立即开始执行。

简单地说,client就是提交任务的你,执行任务的是Worker,调度器则执行两者之间通信。

python -m <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pip</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">install</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dask</span> distributed –upgrade

如果您使用的是单台机器,那么就可以通过以下方式创建一个具有4个worker的dask集群

在 Python中處理大型機器學習資料集的簡單方法

如果需要dashboard,可以安装bokeh,安装bokeh的命令如下:

<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pip</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">install</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">bokeh</span>

就像我们从 dask.distributed 创建客户端一样,我们也可以从 dask.distributed 创建调度程序。

要使用 dask ML 库,您必须使用以下命令安装它:

<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pip</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">install</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dask</span>-ml

我们将使用 Scikit-learn 库来演示 dask-ml 。

假設我們使用Grid_Search 方法,我們通常使用以下Python程式碼

在 Python中處理大型機器學習資料集的簡單方法

#使用dask.distributed 建立一個叢集:

在 Python中處理大型機器學習資料集的簡單方法

要使用群集來擬合scikit-learn 模型,我們只需要使用joblib。

在 Python中處理大型機器學習資料集的簡單方法

以上是在 Python中處理大型機器學習資料集的簡單方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:51CTO.COM。如有侵權,請聯絡admin@php.cn刪除
及時工程中的思想圖是什麼及時工程中的思想圖是什麼Apr 13, 2025 am 11:53 AM

介紹 在迅速的工程中,“思想圖”是指使用圖理論來構建和指導AI的推理過程的新方法。與通常涉及線性S的傳統方法不同

優化您的組織與Genai代理商的電子郵件營銷優化您的組織與Genai代理商的電子郵件營銷Apr 13, 2025 am 11:44 AM

介紹 恭喜!您經營一家成功的業務。通過您的網頁,社交媒體活動,網絡研討會,會議,免費資源和其他來源,您每天收集5000個電子郵件ID。下一個明顯的步驟是

Apache Pinot實時應用程序性能監視Apache Pinot實時應用程序性能監視Apr 13, 2025 am 11:40 AM

介紹 在當今快節奏的軟件開發環境中,確保最佳應用程序性能至關重要。監視實時指標,例如響應時間,錯誤率和資源利用率可以幫助MAIN

Chatgpt擊中了10億用戶? Openai首席執行官說:'短短幾週內翻了一番Chatgpt擊中了10億用戶? Openai首席執行官說:'短短幾週內翻了一番Apr 13, 2025 am 11:23 AM

“您有幾個用戶?”他扮演。 阿爾特曼回答說:“我認為我們上次說的是每週5億個活躍者,而且它正在迅速增長。” “你告訴我,就像在短短幾週內翻了一番,”安德森繼續說道。 “我說那個私人

pixtral -12b:Mistral AI&#039;第一個多模型模型 - 分析Vidhyapixtral -12b:Mistral AI&#039;第一個多模型模型 - 分析VidhyaApr 13, 2025 am 11:20 AM

介紹 Mistral發布了其第一個多模式模型,即Pixtral-12b-2409。該模型建立在Mistral的120億參數Nemo 12B之上。是什麼設置了該模型?現在可以拍攝圖像和Tex

生成AI應用的代理框架 - 分析Vidhya生成AI應用的代理框架 - 分析VidhyaApr 13, 2025 am 11:13 AM

想像一下,擁有一個由AI驅動的助手,不僅可以響應您的查詢,還可以自主收集信息,執行任務甚至處理多種類型的數據(TEXT,圖像和代碼)。聽起來有未來派?在這個a

生成AI在金融部門的應用生成AI在金融部門的應用Apr 13, 2025 am 11:12 AM

介紹 金融業是任何國家發展的基石,因為它通過促進有效的交易和信貸可用性來推動經濟增長。交易的便利和信貸

在線學習和被動攻擊算法指南在線學習和被動攻擊算法指南Apr 13, 2025 am 11:09 AM

介紹 數據是從社交媒體,金融交易和電子商務平台等來源的前所未有的速度生成的。處理這種連續的信息流是一個挑戰,但它提供了

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具