簡體   English   中英

使用lightGBM時如何處理“不支持功能名稱中的非ASCII字符”錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM