在ngyost中将numpy数组转换为DMatrix

时间:2016-12-12 10:11:21

标签: pandas scikit-learn xgboost

我想将我的数组训练集和标签转换为DMatrix进行训练。

dtrain = xgb.DMatrix(x_train, label=y_train)

此处x_train.shape = (13619575, 45)

但是当我运行这段代码时,jupyter笔记本内核崩溃了,而我的内存仍有8GB。

我试图将其减少到70%的记录。但它仍然崩溃了。 有什么办法可以解决吗?

感谢。

1 个答案:

答案 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数据集,转储非常慢,但必须存在一种更快的方法。