Разделение CSV-данных с отсутствующей целевой переменной с помощью train_test_split в Python

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

У меня есть набор данных в формате CSV, который состоит из обучающего набора с около 300 экземплярами и тестового набора с около 100 экземплярами. Проблема в том, что целевая переменная (столбец, который мы хотим предсказать) полностью отсутствует в тестовом наборе, кроме этого столбца оба набора данных имеют одинаковые общие столбцы. Я хочу разбить данные на “X_train, X_test, y_train, y_test”, используя функцию train_test_split из библиотеки scikit-learn в Python. Однако, когда я комбинирую два файла и заполняю отсутствующие значения целевой переменной с помощью fillna, я беспокоюсь, что это может изменить реальные результаты. Какой будет лучший подход для решения этой ситуации и корректного разделения данных, сохраняя целостность результатов?

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

Вот как вы можете разбить свои данные:

import pandas as pd
from sklearn.model_selection import train_test_split

# Загрузите свои наборы данных
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')

# Разделите свои обучающие данные на X_train и y_train
X_train = train_data.drop('target_column', axis=1)
y_train = train_data['target_column']

# Ваши тестовые данные уже являются X_test
X_test = test_data

# У вас нет y_test, потому что это то, что вы хотите предсказать

После обучения вашей модели на X_train и y_train вы можете предсказать целевую переменную для тестовых данных:

# Предположим, у вас есть модель с именем 'model'
y_test_pred = model.predict(X_test)

y_test_pred — это предсказанная целевая переменная для ваших тестовых данных. У вас нет реальных значений (y_test), чтобы сравнить с предсказанными значениями, потому что целевая переменная — это то, что вы хотите предсказать в реальных условиях.

Но если вы хотите данные для валидации, чтобы протестировать вашу модель, то используйте следующее:

X_train, X_valid, y_train, y_valid = train_test_split(train_data.drop('target_column', axis=1), train_data['target_column'], test_size = 0.2, random_state = 2023)

.

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

Работа с отсутствующей целевой переменной в наборах данных CSV: Разделение на обучающую и тестовую выборки с использованием train_test_split в Python

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

Шаг 1: Загрузка данных

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

import pandas as pd

# Загрузка данных
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')

Шаг 2: Разделение обучающей выборки

После загрузки данных нам необходимо разделить обучающий набор на признаки (X) и целевую переменную (y). Это можно легко сделать с помощью метода drop().

# Определение X_train и y_train
X_train = train_data.drop('target_column', axis=1)  # Уберите целевую переменную
y_train = train_data['target_column']  # Определите целевую переменную

Шаг 3: Подготовка тестовой выборки

Как уже упоминалось, тестовая выборка не должна содержать целевой переменной. Она будет использоваться для проверки качества обученной модели.

# Обратите внимание, что в тестовом наборе нет y_test
X_test = test_data  # Признаки тестового набора

Шаг 4: Обучение модели и предсказание

Теперь, когда у нас есть X_train и y_train, мы можем обучить модель. После этого мы можем использовать модель для предсказания значений на тестовой выборке.

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier  # Пример модели

# Разделим обучающую выборку на обучение и валидацию для проверки качества
X_train, X_valid, y_train, y_valid = train_test_split(X_train, y_train, test_size=0.2, random_state=2023)

# Создание и обучение модели
model = RandomForestClassifier()
model.fit(X_train, y_train)

# Предсказание на тестовом наборе
y_test_pred = model.predict(X_test)

Объяснение и выводы

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

Заключение

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

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

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