lightGBM的categorical_feature(类别特征)使用
http://www.luyixian.cn/news_show_253681.aspx
lightGBM比XGBoost的1个改进之处在于对类别特征的处理, 不再需要将类别特征转为one-hot形式, 具体可参考这里.
在使用python API时(参考官方文档)
1.可以使用pd.DataFrame存放特征X, 每一列表示1个特征, 将类别特征设置为X[cat_cols].astype('category'). 这样模型在fit时会自动识别类别特征.
2.在模型的fit方法中传入参数categorical_feature, 指明哪些列是类别特征.
3.类别特征的值必须是从0开始的连续整数, 比如0,1,2,..., 不能是负数.
import json
import os
import math
import pandas as pd
from sklearn.preprocessing import LabelEncoder
import safe_config
import numpy as np
df = pd.read_csv('safe-0817-0822.csv')
import safe_config
df[safe_config.TEXT_CATEGORICAL_COLS] = df[safe_config.TEXT_CATEGORICAL_COLS].fillna('unkown')
# 缺失值填充
missing_value_dict = {}
for col in safe_config.NUMERIC_CATEGORICAL_COLS + safe_config.NUMERIC_COLS:
fill_value = df[col].median()
df[col] = df[col].fillna(fill_value)
missing_value_dict[col] = fill_value
# 缺失值填充dict转json
with open("missing_value_fill.json", "w") as f:
json.dump(missing_value_dict, f)
print("缺失值填充json完成...")
def encodeColumns(sdf, colnames):
df = sdf # .copy()
labelEncoderDict = {}
for col in colnames:
print(col)
labelEncoderDict[col] = {}
le = LabelEncoder()
df[col] = le.f