OneHotEncoder ValueError: Найдены неизвестные категории - PullRequest
0 голосов
/ 12 февраля 2020

Я создаю OneHotEncoder, используя полный файл.

def buildOneHotEncoder(training_file_name, categoricalCols):
    one_hot_encoder = OneHotEncoder(sparse=False)

    df = pd.read_csv(training_file_name, skiprows=0, header=0)
    df = df[categoricalCols]
    df = removeNaN(df, categoricalCols)
    logging.info(str(df.columns))
    one_hot_encoder.fit(df)
    return one_hot_encoder
def removeNaN(df, categoricalCols):
    # Replace any NaN values
    for col in categoricalCols:
        df[[col]] = df[[col]].fillna(value=CONSTANT_FILLER)
    return df

Теперь я использую этот же кодер при обработке одного и того же файла кусками

for chunk in pd.read_csv(training_file_name, chunksize=CHUNKSIZE):
....
  INPUT = chunk[categoricalCols]
  INPUT = removeNaN(INPUT, categoricalCols)
  one_hot_encoded = one_hot_encoder.transform(INPUT)
....

Это выдает ошибку 'ValueError: Найдено неизвестные категории [' отсутствует '' ] в столбце 2 во время преобразования '

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

1 Ответ

0 голосов
/ 17 февраля 2020

Проблема заключалась в том, что при применении условия

df_merged_set_test = chunk.where (chunk ['weblab'] == "missing")

Я фильтровал набор данных на основе поля, поэтому для всех строк, которые это заполнить NaN. Позже я заменил их отсутствующим флагом.

Правильный путь

  1. Очистите набор данных, т.е. заполните все значения na для всех столбцов
  2. Затем отфильтруйте и отбросьте NaN строки, т.е. все значения NaN строки .where (chunk ['weblab'] == "отсутствует"). dropna ()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...