三、进阶
3.1 缺失值处理
lightgbm
默认处理缺失值,你可以通过设置use_missing=False
使其无效。lightgbm
默认使用NaN
来表示缺失值。你可以设置zero_as_missing
参数来改变其行为:zero_as_missing=True
时:NaN
和0
(包括在稀疏矩阵里,没有显示的值) 都视作缺失值。zero_as_missing=False
时:只有NaN
才是缺失值(默认的行为)
3.2 分类特征支持
当使用
local categorical
特征(而不是one-hot
编码的特征)时,lightgbm
可以提供良好的精确度。要想使用
categorical
特征,则启用categorical_feature
参数(参数值为列名字符串或者列名字符串的列表)- 首先要将
categorical
特征的取值转换为非负整数,而且如果是连续的范围更好 - 然后使用
min_data_per_group
和cat_smooth
去处理过拟合(当样本数较小,或者category
取值范围较大时)
- 首先要将
3.3 LambdaRank
LambdaRank
中,标签应该是整数类型,较大的数字代表更高的相关性。如:
0
表示差、1
表示一般、2
表示好、3
表示完美使用
max_position
设置NDCG
优化的位置label_gain
设置增益的int
标签。
3.4 并行学习
lightgbm
已经提供了以下并行学习算法:并行算法 开启方式 数据并行 tree_learner=’data’ 特征并行 tree_learner=’feature’ 投票并行 tree_learner=’voting’ tree_learner
默认为'serial'
。 表示串行学习。这些并行算法适用于不同场景:
样本数量较小 样本数量巨大 特征数量较小 特征并行 数据并行 特征数量巨大 特征并行 投票并行 构建并行版本:
默认的并行版本基于
socket
的并行学习,如果需要基于MPI
的并行版本,则需要手动编译首先收集所有想要运行并行学习的机器的
IP
,并指定一个TCP
端口号(要求在这些机器上,这些端口没有被防火墙屏蔽掉)。然后将这些
IP
和端口写入到文件中(假设文件名为ip.txt
):ip1 port
ip2 port
其中要求:
- 数量必须和
num_machines
或者num_machine
参数相等 - 必须包含
127.0.0.1
(或者包含localhost
对应的其它ip
),它代表本地 port
必须和local_listen_port
或者local_port
参数相等
然后在配置文件中编译以下参数:
tree_learner= 你的并行算法
num_machines= 并行计算的机器的数量
machine_list_file=ip.txt #要求每个并行计算的机器占一行
local_listen_port=port
然后将数据文件、可执行文件、配置文件、以及
ip.txt
拷贝到所有并行学习的机器上。在所有机器上运行以下命令:
windows
:lightgbm.exe config=配置文件
Linux
:./lightgbm config=配置文件
并行学习的注意事项:
当前
Python
版本不支持并行,必须采用lightgbm
二进制的方式。在执行推断时,要求数据的特征与训练时的特征完全一致
- 必须都包含
label
列。推断时,该列的数值不起作用,仅仅是个占位符。 - 如果有
header
,则列的先后顺序不重要。如果没有header
,则必须顺序也要保持相同。
- 必须都包含