У меня возникла та же проблема, которую я только что решил.
Это происходит только потому, что для «усиления» или «покрытия» числа содержат слишком много плавающих чисел, противоположных опции «вес». К сожалению, насколько я знаю, нет возможности указать количество цифр. Таким образом, я изменил функции самостоятельно, чтобы указать максимально допустимое количество цифр. Вот изменения, которые нужно выполнить в файле plotting.py пакета xgboost. Если вы работаете с консолью паука, вы можете найти и открыть файл, просто указав неправильную опцию (я ленивый парень), например:
xgb.plot_importance(xg_reg, potato=False)
А затем нажмите на файл с ошибкой в консоли. Следующим шагом является изменение самой функции, как показано ниже:
def plot_importance(booster, ax=None, height=0.2,
xlim=None, ylim=None, title='Feature importance',
xlabel='F score', ylabel='Features',
importance_type='weight', max_num_features=None,
grid=True, show_values=True, max_digits=3, **kwargs):
и затем вы должны также добавить перед условиями show_values:
if max_digits is not None:
t = values
lst = list(t)
if len(str(lst[0]).split('.')[-1])>max_digits:
values_displayed = tuple([('{:.'+str(max_digits)+'f}').format(x) for x in lst])
else:
values_displayed = values
if show_values is True:
for x, x2, y in zip(values, values_displayed, ylocs):
ax.text(x + 1, y, x2, va='center')
Я выполнил условие, чтобы форматировать только число, если оно больше указанного числа цифр. Это позволяет избежать, например, опции priority_type = 'weight' для создания нежелательных цифр.
Обратите внимание, что для 'cover' и 'gain' текст также плохо позиционируется для меня, поэтому я также изменил сдвиг и заменил 1 здесь:
if show_values is True:
for x, x2, y in zip(values, values_displayed, ylocs):
dx = np.max(values)/100
ax.text(x + dx, y, x2, va='center')
Надеюсь, это поможет вам!