博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lightGBM dump_model 错误解决
阅读量:2158 次
发布时间:2019-05-01

本文共 2380 字,大约阅读时间需要 7 分钟。

lightGBM dump_model的功能是吧模型转变为json字典,然后就可以对其进行方便的操作,然后有时候会报

JSONDecodeError: Expecting ',' delimiter: line 7 column 95 (char 209)

以下示例本错误并且提出解决办法

from tsfresh import extract_featuresfrom tsfresh.feature_extraction import ComprehensiveFCParametersimport lightgbm as lgbimport pandas as pdimport numpy as np
samples_timeserires = np.random.random((50,500))y = np.random.randint(2,size=500)ts_fc_comprehensive_settings = ComprehensiveFCParameters()df = pd.DataFrame(samples_timeserires)df.loc[:,'col_id'] = 0X = pd.DataFrame()for i in range(500):    timeseries_container = df.loc[:,[i,'col_id']]    timeseries_container.columns = [0,'col_id']    statics_feats_position = extract_features(timeseries_container=timeseries_container,                                                      column_id='col_id',                                                      column_value=0,                                                      default_fc_parameters=ts_fc_comprehensive_settings,                                                      n_jobs=1,                                                      disable_progressbar=True                                                )        X = pd.concat([X,statics_feats_position],axis=0)X.sample()

此时进行模型训练并且尝试dump_model

dtrain = lgb.Dataset(X,y,free_raw_data=False,feature_name='auto',                         categorical_feature='auto')gbm = lgb.train(params={},num_boost_round=5,train_set=dtrain)gbm.dump_model()

则出现错误如下:

经过测试,造成此错误的原因是因为X这个DataFrame的列名中含有双引号(")引起的,对列名进行重名了

X_rename = X.copy()X_rename.columns = ['col_%03d'%i for i in range(len(X_rename.columns))]dtrain = lgb.Dataset(X_rename,y,free_raw_data=False,feature_name='auto',                         categorical_feature='auto')gbm = lgb.train(params={},num_boost_round=5,train_set=dtrain)gbm.dump_model()

结果正常了

对产生异常的列名进行打印已验证原因

normal_name = []anomaly_name = []for column in X.columns:    feats = X.loc[:,column]    if len(feats.unique())<4:         continue    dtrain = lgb.Dataset(pd.DataFrame(feats),                          y,free_raw_data=False,feature_name='auto',                         categorical_feature='auto')    gbm = lgb.train(params={},num_boost_round=5,train_set=dtrain)    try:        gbm.dump_model()        normal_name.append(column)    except:        anomaly_name.append(column)print('normal:')     print(normal_name)print('\nanomaly:')     print(anomaly_name)

你可能感兴趣的文章
浅谈 GBDT
查看>>
如何选择优化器 optimizer
查看>>
一文了解强化学习
查看>>
CART 分类与回归树
查看>>
seq2seq 的 keras 实现
查看>>
seq2seq 入门
查看>>
什么是 Dropout
查看>>
用 LSTM 做时间序列预测的一个小例子
查看>>
用 LSTM 来做一个分类小问题
查看>>
详解 LSTM
查看>>
按时间轴简述九大卷积神经网络
查看>>
详解循环神经网络(Recurrent Neural Network)
查看>>
为什么要用交叉验证
查看>>
用学习曲线 learning curve 来判别过拟合问题
查看>>
用验证曲线 validation curve 选择超参数
查看>>
用 Grid Search 对 SVM 进行调参
查看>>
用 Pipeline 将训练集参数重复应用到测试集
查看>>
PCA 的数学原理和可视化效果
查看>>
机器学习中常用评估指标汇总
查看>>
什么是 ROC AUC
查看>>