我正在使用 XGBoost 的 python 接口(interface)来构建模型。我正在使用 xgb.DMatrix(data_path) 读取一个数据集。我需要将这些数据分为训练和测试(以及验证,如果需要)。但我见过的大多数实现都是这种形式
dtrain = xgb.DMatrix('')
dtest = xgb.DMatrix('')
我找不到一种方法来读取数据集,然后将它们分成训练集、测试集(和验证集)。
此外,是否可以在分为训练和测试的同时进行分层采样?
我需要知道这一点,因为我有稍大的数据集,目前我正在使用 Spark 读取它,将它们拆分,存储在磁盘上,然后从那里读取。有没有办法可以做到这一点,而无需通过 Pyspark 并从 hdfs 读取?
最佳答案
我会使用sklearn的train_test_split
,它也有一个分层参数,然后将结果放入dtrain
和dtest
。
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
import xgboost as xgb
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
关于python - XGBoost:在训练和测试中分割数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50564167/