處理大型 ml 資料檔案的七種思路
1. 分配更多記憶體
有的機器學習工具/庫有預設記憶體設定,比如 weka。這便是乙個限制因素。你需要檢查一下:是否能重新設定該工具/庫,分配更多記憶體。對於 weka,你可以在開啟應用時,把記憶體當作乙個引數進行調整。
2. 用更小的樣本
你真的需要用到全部資料嗎?可以採集乙個資料的隨機樣本,比如前 1,000 或 100,000 行。在全部資料上訓練最終模型之前(使用漸進式的資料載入技巧),先試著用這個小樣本解決問題。總的來說,對演算法做快速地抽查、看到結果在前後的變化,在機器學習領域是乙個很好的習慣。
你還可以考慮:相對於模型技巧,做乙個資料大小的敏感性分析。或許,對於你的隨機小樣本,有乙個天然的邊際效應遞減分水嶺。越過這個關口,繼續增加的資料規模帶來的好處微乎其微。
3. 更多記憶體
你必須要用 pc 嗎?
你可以考慮記憶體、效能高乙個量級的計算裝置。比如,租用 aws 這樣的雲服務。租用雲端有數十 gb 記憶體的機器,最低**每小時不到一美元。我個人覺得這是非常實際的選擇。在此我向大家推薦乙個大資料技術交流圈: 658558542 突破技術瓶頸,提公升思維能力 。
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 庫。我認為,這是用盡上述辦法仍無法解決的情況下,才需要採用的最後手段。單純是這為你的機器學習專案所帶來的額外硬體、軟體複雜情況,就會消耗許多精力。即便如此,有的任務確實資料太過龐大,前面的選項都無法奏效。
MongoDB日誌太大怎麼辦?
mongodb的日誌增長的很快,var所在的空間馬上就佔滿了,即便換到另乙個磁碟分割槽儲存日誌,日誌還是增長的很快,磁碟眼看要告磬。有乙個好辦法,就是使用旋轉日誌。mongodb的旋轉日誌有點怪,linux下mongd服務接受乙個kill sgiusr1命令後就立刻將當前日誌檔案重新命名為帶日期的檔...
Visio檔案太大了, 怎麼辦
visio檔案隨著不斷的編輯修改會變的越來越臃腫,因為有越來越多的再也不需要在圖中出現的masters,styles,layers,fonts,colors.一般來說,這些元素對檔案尺寸的影響有限,但有時確不是這樣.從visio2007開始,就有了個新feature,叫做 remove hidden...
docker占用磁碟太大 怎麼辦
問題 docker容器日誌導致主機磁碟空間滿了。docker logs f container name噼里啪啦一大堆,很占用空間,不用的日誌可以清理掉了。解決方法 2.1 找出docker容器日誌 在linux上,容器日誌一般存放在 var lib docker containers contai...