我想将我的数组训练集和标签转换为DMatrix进行训练。
dtrain = xgb.DMatrix(x_train, label=y_train)
此处x_train.shape = (13619575, 45)
。
但是当我运行这段代码时,jupyter笔记本内核崩溃了,而我的内存仍有8GB。
我试图将其减少到70%的记录。但它仍然崩溃了。 有什么办法可以解决吗?
感谢。
答案 0 :(得分:0)
这与以下问题有关: https://github.com/dmlc/xgboost/issues/163
在numpy和xgb.DMatrix之间将有重复的内存副本, 如果要节省内存,请尝试将数据转换为LibSVM格式 和xgb.DMatrix支持直接从textformat加载而无需 涉及numpy。或者只是使用具有更多RAM的计算机。
您可以使用dump_svmlight_file转储为SVM文件格式
此处给出示例: https://www.kaggle.com/c/telstra-recruiting-network/discussion/18223
import pandas as pd
import numpy as np
from sklearn.datasets import dump_svmlight_file
df = pd.DataFrame()
df['Id'] = np.arange(10)
df['F1'] = np.random.rand(10,)
df['F2'] = np.random.rand(10,)
df['Target'] = map(lambda x: -1 if x < 0.5 else 1, np.random.rand(10,))
X = df[np.setdiff1d(df.columns,['Id','Target'])]
y = df.Target
print df
dump_svmlight_file(X,y,'smvlight.dat',zero_based=True,multilabel=False)
虽然我现在有一个问题:对于4Gb数据集,转储非常慢,但必须存在一种更快的方法。