#python #python-3.x #numpy #scikit-learn
#python #python-3.x #numpy #scikit-learn
Вопрос:
Я создаю экспорт для модели классификатора и некоторых значений масштабирования. Под руководством аспиранта, изучающего эту область, он предоставил мне код, который создает словарь масштабирования для нашего использования. Соответствующий код:
PROBA_RESCALING_N_SAMPLES = 100
PROBA_RESCALING_WINDOW_RADIUS = 0.05
y_proba = classifier.predict_proba(x)
y_proba_rescaling = {proba: y[np.abs(y_proba - proba) <= PROBA_RESCALING_WINDOW_RADIUS].mean() for proba in np.linspace(0, 1, PROBA_RESCALING_N_SAMPLES)}
Ошибка возникает в последней строке, и в ней говорится:
Ошибка IndexError: слишком много индексов для массива
Я просмотрел форумы здесь, чтобы найти ответы на некоторые вопросы, и сидел с другом более часа, и все же я не мог понять, почему была вызвана эта ошибка. Вчера код казался нормальным, и вдруг сегодня он прослушивается.
РЕДАКТИРОВАТЬ: я пропустил пару важных деталей, о которых забыл упомянуть:
1. переменная Y — это массив, содержащий нули и единицы, он представляет ось Y в моем наборе данных для обучения ML.
2. Я сузил проблему до y[np.abs(y_proba - proba) <= PROBA_RESCALING_WINDOW_RADIUS]
части. Запуск его сам по себе приводит к ошибке.
Комментарии:
1. Единственная индексация в этой строке
y[...]
. Почему вы ничего не рассказали нам об этом массиве? Информация о других массивах / переменных в выражении может помочь. А еще лучше, предоставьте минимальный пример, который генерирует ошибку.2. Спасибо за комментарий! Я исправил свои ошибки и надеюсь, что это будет более понятно.
3. Что такое
shape
ofy
? Чтоnp.abs(y_proba - proba) <= PROBA_RESCALING_WINDOW_RADIUS
производит? (форма, dtype)?
Ответ №1:
y[np.abs(y_proba - proba) <= PROBA_RESCALING_WINDOW_RADIUS]
Вы имеете в виду:
y[np.abs(y_proba - proba)] <= PROBA_RESCALING_WINDOW_RADIUS
Где изменилось место скобки? Вы индексируете сравнение в списке Y. Это не совсем имеет смысл.
Комментарии:
1. Нет, я индексирую логическое значение. Сравнение возвращает значение — True или False.
2. Вы должны попытаться распечатать каждую из частей сравнения и посмотреть, что они вам дают. Они не могут быть просто числом… Попробуйте выполнить : print(np.abs(y_proba — proba)) и print(PROBA_RESCALING_WINDOW_RADIUS) и вернитесь с результатом.