您好,登錄后才能下訂單哦!
數據庫數據太大爆內存該怎么辦,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
在研究、應用機器學習算法的經歷中,相信大伙兒經常遇到數據集太大、內存不夠用的情況。
這引出一系列問題:
怎么加載十幾、幾十 GB 的數據文件?
運行數據集的時候算法崩潰了,怎么辦?
怎么處理內存不足導致的錯誤?
處理大型 ML 數據文件的七種思路
1. 分配更多內存
有的機器學習工具/庫有默認內存設置,比如 Weka。這便是一個限制因素。
你需要檢查一下:是否能重新設置該工具/庫,分配更多內存。
對于 Weka,你可以在打開應用時,把內存當作一個參數進行調整。
2. 用更小的樣本
你真的需要用到全部數據嗎?
可以采集一個數據的隨機樣本,比如前 1,000 或 100,000 行。在全部數據上訓練最終模型之前(使用漸進式的數據加載技巧),先試著用這個小樣本解決問題。
總的來說,對算法做快速地抽查、看到結果在前后的變化,在機器學習領域是一個很好的習慣。
你還可以考慮:相對于模型技巧,做一個數據大小的敏感性分析。或許,對于你的隨機小樣本,有一個天然的邊際效應遞減分水嶺。越過這個關口,繼續增加的數據規模帶來的好處微乎其微。
3. 更多內存
你必須要用 PC 嗎?
你可以考慮內存、性能高一個量級的計算設備。比如,租用 AWS 這樣的云服務。租用云端有數十 GB 內存的機器,***價格每小時不到一美元。我個人覺得這是非常實際的選擇。
4. 轉換數據格式
你是否把數據存為原始的 ASCII 文本,比如 CSV 文件?
或許,使用其它格式能加速數據載入并且降低內存占用。好的選擇包括像 GRIB、NetCDF、HDF 這樣的二進制格式。
有很多命令行工具能幫你轉換數據格式,而且不需要把整個數據集載入內存里。
換一種格式,可能幫助你以更緊湊的形式存儲數據,節省內存空間;比如 2-byte 整數,或者 4-byte 浮點。
5. 流式處理數據,或漸進式的數據加載
你的所有數據,需要同時出現在內存里嗎?
或許,你可以用代碼或庫,隨時把需要的數據做流式處理或漸進式加載,導入內存里訓練模型。
這可能需要算法使用優化技術迭代學習,比如使用隨機梯度下降。那些需要內存里有所有數據、以進行矩陣運算的算法,比如某些對線性回歸和邏輯回歸的實現,就不適用了。
比如,Keras 深度學習 API 就提供了漸進式加載圖像文件的功能,名為 flow_from_directory
另一個例子式 Pandas 庫,可批量載入大型 CSV 文件。
6. 使用關系數據庫(Relational database)
關系數據庫為存儲、訪問大型數據集提供了標準化的方法。
在內部,數據存在硬盤中,能漸進式地 in batch 批量加載,并使用標準檢索語言 SQL 檢索。
像 MySQL、Postgres 這樣的開源數據庫工具,支持絕大多數的(全部?)編程語言。許多機器學習工具,都能直接與關系數據庫連通。你也可以用 SQLite 這樣更輕量的方法。
我發現,這種方法對大型表格式數據集非常有效率。
雷鋒網提醒,你需要用能迭代學習的算法。
7. 使用大數據平臺
有的情況下,你可能必須要使用大數據平臺,即為處理超大型數據集而開發的平臺。它們能讓你進行數據轉換,并在其上開發機器學習算法。
兩個很好的例子是 Hadoop 與機器學習庫 Mahout,以及 Spark 與 MLLib 庫。
我認為,這是用盡上述辦法仍無法解決的情況下,才需要采用的***手段。單純是這為你的機器學習項目所帶來的額外硬件、軟件復雜情況,就會消耗許多精力。
即便如此,有的任務確實數據太過龐大,前面的選項都無法奏效。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。