您好,登錄后才能下訂單哦!
在處理機器學習算法時,因為數據庫太大而無法放置進內存的情況很常見。
這就引出了如下的問題:
如何加載我的大容量數據文件?
當因我嘗試運行數據集算法而導致程序崩潰時,我該怎么辦?
你能幫我解決內存不足的問題嗎?
在這篇文章中, 我想找出一些你會考慮的一些建議。
分配更多內存
某些機器學習工具或數據庫可能受到默認內存配置的限制。檢查是否可以重新配置工具或數據庫來使其分配到更多內存。Weka 是一個很好的例子, 在該示例中, 您可以在啟動應用程序時將內存增加為參數。
使用較小的樣本
是否確實需要處理所有數據?隨機抽取數據的樣本, 例如前1000行或10萬列。在對所有數據 (使用漸進式數據加載技術) 擬合最終模型之前, 請使用這個較小的示例來解決問題。
我認為這是一個很好的做法, 在一般的機器學習中,這種方式可以讓你快速得到抽查的算法和周轉的結果。您還可以考慮,對用于匹配一個算法的數據量進行靈敏度分析, 而不是用模型技能。也許有一個遞減反饋的自然點, 讓你可以使用其作為你小樣本的一個合適的大小值。
使用具有更多內存的計算機
你必須在你的電腦上工作嗎?也許你可以訪問一臺更大的計算機, 是以你電腦的內存的數量級倍數存在的那種。例如,在云服務上租用大內存服務器就是一個好的選擇是;例如亞馬遜 Web 服務, 它提供的機器的 RAM 為每小時還不到一美元。我發現這種方法在過去非常有用。
更改數據格式
數據是否存儲在原始 ASCII 文本中, 如 CSV 文件?也許您可以通過使用其他數據格式,來加快數據加載并且降低內存的使用率。二進制格式就是一個很好的例子, 如 GRIB、NetCDF 或HDF等格式。有許多命令行工具可用于將一種數據格式轉換為另一種不要求將整個數據集加載到內存的格式的方法。使用另一種格式可以使您將數據存儲在更緊湊的窗體中, 借此節省內存, 如2字節的整數或4字節的浮動。
流數據或使用漸進加載
所有的數據都需要同時存儲在內存中嗎?也許您可以使用代碼或庫,將數據流逐步加載到內存中以進行使用。這可能需要使用優化技術 (如隨機梯度下降) 來迭代學習的算法, 而不是要求內存中所有數據都執行矩陣操作的算法, 如某些線性和邏輯回歸的實現。例如, Keras 深層學習庫提供此功能來逐步加載圖像文件, 并稱為flow_from_directory。另一個例子是可以在大塊中加載大的 CSV 文件的熊貓庫(Pandas)。
使用關聯數據庫
關系數據庫提供了一種存儲和訪問非常大的數據集的標準方法。從內部來看,存儲在磁盤上的數據可以逐步加載, 并可以使用標準查詢語言 (SQL) 來進行查詢。可以使用諸如MySQL或Postgres這樣的免費開源數據庫工具, 而且大多數 (也許是所有?) 編程語言和許多機器學習工具都可以直接連接到關聯數據庫。您還可以使用輕量級方法, 如SQLite。我在過去發現這種方法對于非常大的表格數據集非常有效。同樣, 您可能需要使用可以處理迭代學習的算法。
使用大型數據平臺
在某些情況下, 您可能需要求助于一個大的數據平臺。這是一個為了處理非常大的數據集而設計的平臺, 它允許您在上面使用數據轉換和機器學習算法。兩個好例子是用Mahout機器學習庫的Hadoop以及用MLLib庫的Spark。我相信當你已經用盡上述方法,這是會是解決這個問題的終極方法。然而, 在一些數據集非常非常大的情況下,之前的方法并不會是這些數據集縮短。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。