несоответствие между числами y и x в разделе на обучающую и тестовую выборки

Вопрос или проблема

Я нов в области науки о данных и нуждаюсь в помощи по следующему вопросу:
Я работаю с набором данных, который состоит как из категориальных, так и из числовых значений. Сначала я объединил два файла (обучающий и тестовый), чтобы применить шаги EDA к нему, затем я выполнил шаги EDA над полученным набором данных, применил кодирование с одним горячим значением и разделил данные. Я получаю следующее сообщение, похоже, что есть несоответствие между записями y и полным набором данных, и это логично, но как мне справиться с этой проблемой.

y_train
y

target
0   1
1   1
2   1
3   0
4   1
... ...
17252   0
17253   0
17254   0
17255   0
17256   1
17257 строк × 1 столбец

ohe_data=ohe_data.drop(['ind'],axis="columns")
ohe_data.columns

Index(['experience', 'last_new_job', 'training_hours',
       'relevent_experience_Has relevent experience',
       'relevent_experience_No relevent experience',
       'enrolled_university_Full time course',
       'enrolled_university_Part time course',
       'enrolled_university_no_enrollment', 'education_level_Graduate',
       'education_level_High School', 'education_level_Masters',
       'education_level_Phd', 'education_level_Primary School',
       'major_discipline_Arts', 'major_discipline_Business Degree',
       'major_discipline_Humanities', 'major_discipline_No Major',
       'major_discipline_Other', 'major_discipline_STEM'],
      dtype="object")

ohe_data.shape
(28762, 19)

y = y_train
x = ohe_data

# Разделение на обучающую и тестовую выборки
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(x, y, 
                                                    test_size=0.33, 
                                                    random_state=1)
---------------------------------------------------------------------------
ValueError                                Traceback (последний вызов был самым последним)
<ipython-input-167-aa834d5164c8> в <module>()
      4 X_train, X_test, y_train, y_test = train_test_split(x, y, 
      5                                                     test_size=0.33,
----> 6                                                     random_state=1)

2 кадра
/usr/local/lib/python3.7/dist-packages/sklearn/utils/validation.py в check_consistent_length(*arrays)
    210     если len(uniques) > 1:
    211         поднять ValueError("Обнаружены входные переменные с несовместимым количеством"
--> 212                          " образцов: %r" % [int(l) для l в lengths])
    213 
    214 

ValueError: Обнаружены входные переменные с несовместимым количеством образцов: [28762, 17257]

Эта проблема вызвана тем, что количество наблюдений в ваших переменных x и y не совпадает. Как вы можете видеть, в вашей переменной x (которая такая же, как ohe_data) у вас 28762 наблюдения, в то время как ваша переменная y имеет только 17257 наблюдений. Поскольку мы не видим код до этого, мы не можем сказать, что вызывает эту разницу.

Функция train_test_split из Sklearn разрешает только совпадающее количество строк для X и Y.

В вашем случае форма Y равна (17257 , 1 ), а форма X равна (28762, 19)

Вам нужно просто изменить форму X и Y так, чтобы у обоих было одинаковое количество строк (наблюдений)

  • Измените форму X на (17257,19)

    (ИЛИ)

  • Измените форму Y на (28762,1)

Ответ или решение

Проблема с несовпадением размерностей y и x в процессе деления на обучающие и тестовые наборы данных

В вашем проекте возникает ошибка, связанная с несовпадением количества наблюдений в переменных x и y при использованием функции train_test_split из библиотеки sklearn. Давайте рассмотрим, как исправить эту ситуацию.

Основная проблема

Согласно вашему описанию, вы столкнулись со следующими размерами данных:

  • x (или ohe_data) имеет форму (28762, 19)
  • y (или y_train) имеет форму (17257, 1)

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

Возможные причины несовпадения

Несоответствие в количестве наблюдений может произойти по нескольким причинам:

  1. Неаккуратное объединение данных: Если вы конкатенировали два файла, могли случайно добавить лишние строки или не учесть, что некоторые из них являются пропущенными.
  2. Отбор данных: Возможно, в процессе очистки данных (например, при удалении выбросов или строк с отсутствующими значениями) вы пропустили некоторые строки только в одном из наборов, тем самым нарушив согласованность размеров.
  3. Разные источники данных: Если y и x формировались из разных источников, это может также привести к несоответствию.

Решение проблемы

  1. Проверка и пересчет данных: Начните с того, чтобы проверить количество строк в каждом из наборов данных. Это можно сделать с помощью:

    print("Размер x:", x.shape)
    print("Размер y:", y.shape)
  2. Выравнивание данных: Для того чтобы исправить несовпадение, вы можете либо изменить размер x, чтобы он стал равным по количеству строк y, либо наоборот. Например, если вы хотите оставить y в его текущем состоянии, вам нужно будет отфильтровать ваши данные в x, чтобы их количество совпало. Вот пример, как вы можете этого добиться:

    # Если y_train является Series и вам нужно оставить размер y
    x_aligned = x.iloc[:len(y_train), :]

    Либо, если вам нужно сохранить полный набор x и расширить y:

    # Если необходимо продублировать y
    y_aligned = pd.concat([y_train]* (len(x) // len(y_train) + 1))[:len(x)]
  3. Запуск train_test_split: После приведённых выше преобразований, у вас должны совпадать размеры. Теперь вы можете снова запустить train_test_split:

    from sklearn.model_selection import train_test_split
    
    X_train, X_test, y_train, y_test = train_test_split(x_aligned, y_train, 
                                                       test_size=0.33, 
                                                       random_state=1)

Заключение

Ошибки, подобные вашей, являются распространенной проблемой в области обработки данных. Важно следить за тем, чтобы размеры ваших входных массивов всегда совпадали, особенно при выполнении таких операций как разделение на обучающие и тестовые выборки. Проведя тщательную проверку и выравнивание данных, вы сможете успешно устранить возникшую проблему и продолжить свою работу в области анализа данных.

Оцените материал
Добавить комментарий

Капча загружается...