Kaggle學(xué)術(shù)活動中American Express風(fēng)控賽需要預(yù)測客戶未來是否會違約,賽題原始數(shù)據(jù)為50GB大小,那么如何減少內(nèi)存的使用呢?
方法1:使用parquetApache Parquet是面向分析型業(yè)務(wù)的列式存儲格式。Parquet是一種與語言無關(guān)的列式存儲文件類型,可以適配多種計算框架。
Parquet是一種二進(jìn)制文件,其中包含了各種針對其內(nèi)容的元數(shù)據(jù)。在無需讀取與解析文件內(nèi)容的情況下,可以僅依靠元數(shù)據(jù)來確定文件中的列名稱、壓縮/編碼方式、數(shù)據(jù)類型、乃至一些基本的統(tǒng)計類信息。
現(xiàn)在論壇已經(jīng)有轉(zhuǎn)換后的數(shù)據(jù),壓縮之后文件大小11GB左右,https://www.kaggle.com/datasets/odins0n/amex-parquet
方法2:選擇小數(shù)位數(shù)原始數(shù)據(jù)集浮點字段包含了較多小數(shù)位,使用float32格式進(jìn)行存儲,比如:
0.5870422600496985
0.609056086399499
0.6149111732046417
通過信息熵可以確定的保留的位數(shù),或者使用float16格式。
方法3:類別轉(zhuǎn)化為categoryPandas中數(shù)據(jù)類型Category,Categories是沒有大小順序的。Categorical Data類型存儲的不是數(shù)據(jù)本身,而是該數(shù)據(jù)對應(yīng)的編碼。這里使用Category,本質(zhì)和Label encode的操作一致。
方法4:使用矩陣存儲數(shù)據(jù)將數(shù)據(jù)從Dataframe轉(zhuǎn)換為矩陣,這里可以選擇Numpy或者稀疏矩陣存儲,對內(nèi)存也比較友好。
方法5:XGBoost DMatrixXGBoost在訓(xùn)練中可以傳入DMatrix或者Dataframe,前者在內(nèi)存上更加友好。
dtrain?=?xgb.DMatrix(X_train,?y_train)
可以將數(shù)據(jù)集存儲為libsvm格式,使用External Memory Version完成訓(xùn)練,或者從命令行訓(xùn)練。
https://xgboost.readthedocs.io/en/latest/tutorials/external_memory.html
使用LightGBM的自帶的Dataset讀取文件進(jìn)行訓(xùn)練,比使用Numpy和Pandas數(shù)據(jù)更好。當(dāng)然把內(nèi)存數(shù)據(jù)轉(zhuǎn)換為Dataset也有一定的效果。
https://lightgbm.readthedocs.io/en/latest/Python-Intro.html
設(shè)置histogram_pool_size參數(shù)控制內(nèi)存使用,也可以減少num_leaves和max_bin的取值。
方法6:樹模型微調(diào)XGBoost和LightGBM在API使用上,支持繼續(xù)訓(xùn)練。因此可以將數(shù)據(jù)集拆分為多個文件,然后依次進(jìn)行訓(xùn)練。
#?save?model?to?file
gbm.save_model('model.txt')
print('Dumping?model?to?JSON...')
model_json?=?gbm.dump_model()
with?open('model.json',?'w+')?as?f:
json.dump(model_json, f, indent=4)
# continue training
#?init_model?accepts:
gbm?=?lgb.train(params,
lgb_train,
num_boost_round=10,
init_model='model.txt',
valid_sets=lgb_eval)
print('Finished?10?-?20?rounds?with?model?file...')
方法7:深度學(xué)習(xí)與TFRecord為了高效地讀取數(shù)據(jù),比較有幫助的一種做法是對數(shù)據(jù)進(jìn)行序列化并將其存儲在一組可線性讀取的文件(每個文件 100-200MB)中。這尤其適用于通過網(wǎng)絡(luò)進(jìn)行流式傳輸?shù)臄?shù)據(jù)。這種做法對緩沖任何數(shù)據(jù)預(yù)處理也十分有用。
TFRecord格式是一種用于存儲二進(jìn)制記錄序列的簡單格式。協(xié)議緩沖區(qū)是一個跨平臺、跨語言的庫,用于高效地序列化結(jié)構(gòu)化數(shù)據(jù)。協(xié)議消息由.proto文件定義,這通常是了解消息類型最簡單的方法。
配合深度學(xué)習(xí)Batch批量訓(xùn)練的過程,可以大幅度節(jié)約內(nèi)存使用。
【掃碼聯(lián)系老師領(lǐng)取報名表】
獲取備賽計劃,考前查缺補漏、重點沖刺
免費領(lǐng)取相關(guān)真題及解析,還有一對一學(xué)術(shù)活動規(guī)劃!


? 2025. All Rights Reserved. 滬ICP備2023009024號-1