文章目錄
- 目錄
- 1.分配更多的內存
- 2.使用較小的樣本
- 3.將數據提交至服務器上
- 4.更改數據格式
- 5.使用數據流方式或者逐行讀入的方法
- 6.使用關系數據庫
- 7.使用大數據平臺
目錄
在實際的生產過程中,我們經常會遇到數據文件太大,而無法直接讀入到計算機中進行處理,或者因為數據量太大,讀入內存后運行出錯。因此,如何解決大數據的讀入問題是解決大數據機器學習的第一步。
1.分配更多的內存
如果硬件可以支持分配更多的內存或者使用虛擬內存的時候,可以采取擴充內存的方式
檢查是否可以重新配置工具或庫以分配更多的內存
比較好的例子是WEKA,他可以在運行的時候擴充內存
2.使用較小的樣本
采用某種下采樣的方法,從原始的海量數據中抽取部分具有代表性的樣本,然后使用這些抽樣的樣本訓練模型,并在實際的測試集上進行測試。
采用這種方法具有一定的風險,首先得保證降采樣的樣本能夠很好的代表全部樣本的一個分布,否則很容易導致模型學偏,無法很好的對新樣本泛化。
但是該方法可以迅速的查看算法和結果。
3.將數據提交至服務器上
由于本地的機器一般內存比較小,所以可以將數據提交至服務器上,利用服器強大的數據處理能力,解決大數據導入內存出錯的問題。
4.更改數據格式
您的數據是否存儲在原始ASCII文本中,如CSV文件?
也許您可以通過使用其他數據格式來加快數據加載并減少內存使用。一個很好的例子是像GRIB,NetCDF或HDF這樣的二進制格式。
有許多命令行工具可用于將一種數據格式轉換為另一種不需要將整個數據集加載到內存中的數據格式。
使用另一種格式可能允許您以更緊湊的形式存儲數據,從而節省內存,例如2字節整數或4字節浮點數。
5.使用數據流方式或者逐行讀入的方法
可以使用一個在線的增量式的學習方法,不是將數據一下子讀入到內存中,而是在模型訓練的過程中不斷的讀入到內存中,然后使用新讀入的數據對模型的參數進行更新。
例如,Keras深度學習庫提供了逐漸加載圖像文件的功能,稱為flow_from_directory。
另一個例子是pandas,可以加載大塊的大型CSV文件
6.使用關系數據庫
關系數據庫提供了存儲和訪問非常大的數據集的標準方法。
在內部,存儲在磁盤上的數據可以批量逐步加載,并且可以使用標準查詢語言(SQL)進行查詢。
可以使用免費的開源數據庫工具,如MySQL或Postgres,大多數(所有?)編程語言和許多機器學習工具可以直接連接到關系數據庫。您還可以使用輕量級的方法,如SQLite。
這種方法在過去對于非常大的表格數據集非常有效。
同樣,您可能需要使用可以處理重復學習的算法
7.使用大數據平臺
可以使用大數據平臺,使用分布式計算,解決單個電腦性能不足
設計用于處理非常大的數據集的平臺,允許您在其上使用數據轉換和機器學習算法。
兩個很好的例子是Hadoop的Mahout機器學習庫和Spark機智的MLLib庫。
我確實相信這是最后的手段,當您用盡了上述選項,只是為了機器學習項目帶來的額外的硬件和軟件復雜性。
參考博客