![](/img/trans.png)
[英]How do I post non-ASCII characters using httplib when content-type is “application/xml”
[英]How to deal with "Do not support non-ASCII characters in feature name" error when I use lightGBM?
我想用 python 中的 lightGBM 进行机器学习。
我正在使用带有日语列名的 pandas.DataFrame 作为学习输入。
直到有一天,我能够毫无错误地学习。
但是,我有机会重新安装anaconda
,并在同一时间,安装lightGBM
使用conda
。
从那以后,出现了以下错误。
LightGBMError:不支持功能名称中的非 ASCII 字符。
当我将列名从 0 更改为自然数时,我像往常一样学习。
这可能是因为列名是日语,如错误所示。
(使用 train() 进行训练和使用 fit() 进行学习都会发生此错误。)
我想让你知道以下两点。
为什么我不能像以前一样使用日文列名?
有没有办法像以前一样使用日文列名?
我使用的环境如下。
OS: Windows 10 home
Coding environment: Jupyter notebook
python version: 3.7.6
lightGBM version: 2.3.1
如果你知道我的问题的答案,请告诉我。
对不起,我的英语不好。
最近,之前的代码无法运行。 我觉得好像是我中间升级了lgb的版本然后报错了。 现在我回滚2.2.3并恢复正常。
您可以使用简单的指令清理列名:
import re
df = df.rename(columns = lambda x:re.sub('[^A-Za-z0-9_]+', '', x))
lightgbm
3.0.0(2020 年 8 月)向lightgbm
添加了对非 ASCII 功能名称的支持。
至少升级到lightgbm
3.0.0(最新版本是 3.1.0)。
pip install --upgrade 'lightgbm>=3.0.0'
您可以使用我在下面提供的示例代码进行测试,该代码最初在microsoft/LightGBM#2976 中提供。 将来,如果可能,请在您的问题中提供一个小的、可重现的代码示例。
import lightgbm
import numpy
from matplotlib import pyplot
numpy.random.seed(42)
X = numpy.random.normal(size=(1000, 3))
y = numpy.random.random(1000)
train_lgb = lightgbm.Dataset(X, y)
feature_names = ['F_零', 'F_一', 'F_二']
params = {
'boosting_type': 'gbdt',
'objective': 'regression',
'metric': 'l2',
'num_leaves': 31,
'verbose': 0,
}
print('Starting training...')
gbm = lightgbm.train(
params,
train_lgb,
num_boost_round=10,
feature_name=feature_names,
)
print('Plotting feature importances...')
ax = lightgbm.plot_importance(gbm, ignore_zero=False)
pyplot.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.