Индекс 38 выходит за пределы оси 1 с размером 38 - Sklearn

Я столкнулся с этой ошибкой с алгоритмом Naive Bayes's CategoricalNB

Это дает указанную выше ошибку после второй попытки запуска ячеек. Это означает, что в первый раз он работает без каких-либо ошибок, и когда я пытаюсь что-то изменить (например, комментарий) и снова запустить ноутбук, он выдает ошибку:

IndexError: индекс 38 выходит за пределы оси 1 с размером 38

Я не знаю, что не так и как исправить. Когда я перезапускаю ядро ​​и пытаюсь снова, оно работает, и каждая попытка после 1-й попытки терпит неудачу и дает указанную выше ошибку.

%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd

dataframe = pd.read_csv("hr_dataset.csv")
# dataframe = pd.read_csv("WA_Fn-UseC_-HR-Employee-Attrition.csv")

dataframe.head(2)
from sklearn.naive_bayes import CategoricalNB
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
# inputs = scaled_df
X_train, X_test, y_train, y_test = train_test_split(inputs, target, test_size=0.2)

categoricalNB_ = CategoricalNB()


categoricalNB_.fit(X_train, y_train)
X_train.shape, X_test.shape, y_train.shape, y_test.shape

pred = categoricalNB_.predict(X_test) # --------------> gives the error for every attempt after the 1st attempt. weird
categoricalNB_.score(X_test, y_test)
# accuracy_score(y_test,pred)

person Escort Personal Adz    schedule 25.05.2020    source источник
comment
Индексы массива начинаются с 0, так что, если он имеет n элементов, действительные (положительные) индексы составляют от 0 до n - 1 (включительно).   -  person norok2    schedule 26.05.2020
comment
Итак, каковы ваши предложения @ norok2? Как я могу решить эту ошибку?   -  person Escort Personal Adz    schedule 26.05.2020
comment
И почему работает с первой попытки, а не после?   -  person Escort Personal Adz    schedule 26.05.2020
comment
Убедитесь, что ваши массивы действительно имеют правильную форму.   -  person norok2    schedule 26.05.2020
comment
Да, они имеют правильную форму, и X_train, и X_test имеют одинаковые строки, а также X_test и y_test   -  person Escort Personal Adz    schedule 26.05.2020
comment
Боюсь, что больше не смогу вам помочь, если вы не предоставите достаточно информации для воспроизведения вашей проблемы (т. Е. Либо копию "hr_dataset.csv", либо минимальный набор данных, показывающий проблему). См. Также здесь.   -  person norok2    schedule 26.05.2020
comment
@ norok2 вот мой набор данных: вы можете найти его здесь. https://drive.google.com/open?id=19gWVwuXS3my9C77D9unG53tuivPzZdqJ   -  person Escort Personal Adz    schedule 26.05.2020
comment
возможно, у вас есть другой код, который меняет X_test после строки, что создает проблему, и когда вы снова запустите его, он будет использовать другой X_test. Вы должны проверить, что у вас есть в X_test перед строкой, которая создает проблему. По крайней мере, проверьте shape. Но если вы проверите значения в X_test, то, возможно, вы поймете, почему они разные.   -  person furas    schedule 26.05.2020


Ответы (1)


Я считаю, что ваша проблема связана с наличием другого набора значений для функции в поезде и набора функций.

Я просмотрел вашу базу данных и обнаружил, что у вас есть только одна запись, в которой общее количество рабочих лет составляет 38. Если эта запись доступна только в тестовом наборе, то ваш подбор из обучающего набора не будет содержать вероятность для значения 38. таким образом выкидывая ошибку за пределами допустимого диапазона.

Вы можете решить эту проблему с помощью параметра class_prior (подробнее см. В документации), или вы можете убедиться, что у вас есть для каждой функции каждой категории по крайней мере определенное количество записей.

person Daniel Reiser    schedule 02.12.2020