![](/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.