7.1 数据接口
7.1.1 数据格式
xgboost
的数据存储在DMatrix
对象中xgboost
支持直接从下列格式的文件中加载数据:libsvm
文本格式的文件。其格式为:[label] [index1]:[value1] [index2]:[value2] ...
[label] [index1]:[value1] [index2]:[value2] ...
...
xgboost binary buffer
文件
dtrain = xgb.DMatrix('train.svm.txt') #libsvm 格式
dtest = xgb.DMatrix('test.svm.buffer') # xgboost binary buffer 文件
xgboost
也支持从二维的numpy array
中加载数据data = np.random.rand(5, 10)
label = np.random.randint(2, size=5)
dtrain = xgb.DMatrix(data, label=label)#从 numpy array 中加载
你也可以从
scipy.sparse array
中加载数据csr = scipy.sparse.csr_matrix((dat, (row, col)))
dtrain = xgb.DMatrix(csr)
7.1.2 DMatrix
DMatrix
: 由xgboost
内部使用的数据结构,它存储了数据集,并且针对了内存消耗和训练速度进行了优化。xgboost.DMatrix(data, label=None, missing=None, weight=None, silent=False,
feature_names=None, feature_types=None, nthread=None)
参数:
data
:表示数据集。可以为:- 一个字符串,表示文件名。数据从该文件中加载
- 一个二维的
numpy array
, 表示数据集。
label
:一个序列,表示样本标记。missing
: 一个值,它是缺失值的默认值。weight
:一个序列,给出了数据集中每个样本的权重。silent
: 一个布尔值。如果为True
,则不输出中间信息。feature_names
: 一个字符串序列,给出了每一个特征的名字feature_types
: 一个字符串序列,给出了每个特征的数据类型nthread
:
属性:
feature_names
: 返回每个特征的名字feature_types
: 返回每个特征的数据类型
方法:
.get_base_margin()
: 返回一个浮点数,表示DMatrix
的base margin
。.set_base_margin(margin)
: 设置DMatrix
的base margin
- 参数:
margin
: t一个序列,给出了每个样本的prediction margin
- 参数:
.get_float_info(field)
: 返回一个numpy array
, 表示DMatrix
的float property
。.set_float_info(field,data)
: 设置DMatrix
的float property
。.set_float_info_npy2d(field,data)
: 设置DMatrix
的float property
。这里的data
是二维的numpy array
参数:
field
: 一个字符串,给出了information
的字段名。注:意义未知。data
: 一个numpy array
,给出了数据集每一个点的float information
.get_uint_info(field)
: 返回DMatrix
的unsigned integer property
。.set_unit_info(field,data)
: 设置DMatrix
的unsigned integer property
。参数:
field
: 一个字符串,给出了information
的字段名。注:意义未知。data
: 一个numpy array
, 给出了数据集每个点的uint information
- 返回值:一个
numpy array
,表示数据集的unsigned integer information
.get_label()
: 返回一个numpy array
,表示DMatrix
的label
。.set_label(label)
: 设置样本标记。.set_label_npy2d(label)
: 设置样本标记。这里的label
为二维的numpy array
- 参数:
label
: 一个序列,表示样本标记
- 参数:
.get_weight()
: 一个numpy array
,返回DMatrix
的样本权重。.set_weight(weight)
: 设置样本权重。.set_weight_npy2d(weight)
: 设置样本权重。这里的weight
为二维的numpy array
- 参数:
weight
:一个序列,表示样本权重
- 参数:
.num_col()
: 返回DMatrix
的列数- 返回值:一个整数,表示特征的数量
.num_row()
: 返回DMatrix
的行数- 返回值:一个整数,表示样本的数量
save_binary(fname,silent=True)
: 保存DMatrix
到一个xgboost buffer
文件中参数:
fname
: 一个字符串,表示输出的文件名silent
: 一个布尔值。如果为True
,则不输出中间信息。
.set_group(group)
: 设置DMatrix
每个组的大小(用于排序任务)- 参数:
group
: 一个序列,给出了每个组的大小
- 参数:
slice(rindex)
: 切分DMaxtrix
,返回一个新的DMatrix
。 该新的DMatrix
仅仅包含rindex
- 参数:
rindex
: 一个列表,给出了要保留的index
- 返回值:一个新的
DMatrix
对象
- 参数:
示例:
data/train.svm.txt
的内容:1 1:1 2:2
1 1:2 2:3
1 1:3 2:4
1 1:4 2:5
0 1:5 2:6
0 1:6 2:7
0 1:7 2:8
0 1:8 2:9
测试代码:
x
import xgboost as xgt
import numpy as np
class MatrixTest:
'''
测试 DMatrix
'''
def __init__(self):
self._matrix1 = xgt.DMatrix('data/train.svm.txt')
self._matrix2 = xgt.DMatrix(data=np.arange(0, 12).reshape((4, 3)),
label=[1, 2, 3, 4], weight=[0.5, 0.4, 0.3, 0.2],
silent=False, feature_names=['a', 'b', 'c'],
feature_types=['int','int','float'], nthread=2)
def print(self,matrix):
print('feature_names:%s'%matrix.feature_names)
print('feature_types:%s' % matrix.feature_types)
def run_get(self,matrix):
print('get_base_margin():', matrix.get_base_margin())
print('get_label():', matrix.get_label())
print('get_weight():', matrix.get_weight())
print('num_col():', matrix.num_col())
print('num_row():', matrix.num_row())
def test(self):
print('查看 matrix1 :')
self.print(self._matrix1)
# feature_names:['f0', 'f1', 'f2']
# feature_types:None
print('\n查看 matrix2 :')
self.print(self._matrix2)
# feature_names:['a', 'b', 'c']
# feature_types:['int', 'int', 'float']
print('\n查看 matrix1 get:')
self.run_get(self._matrix1)
# get_base_margin(): []
# get_label(): [1. 1. 1. 1. 0. 0. 0. 0.]
# get_weight(): []
# num_col(): 3
# num_row(): 8
print('\n查看 matrix2 get:')
self.run_get(self._matrix2)
# get_base_margin(): []
# get_label(): [1. 2. 3. 4.]
# get_weight(): [0.5 0.4 0.3 0.2]
# num_col(): 3
# num_row(): 4
print(self._matrix2.slice([0,1]).get_label())
# [1. 2.]