- Вопрос или проблема
- Ответ или решение
- Работа с отсутствующей целевой переменной в наборах данных CSV: Разделение на обучающую и тестовую выборки с использованием train_test_split в Python
- Шаг 1: Загрузка данных
- Шаг 2: Разделение обучающей выборки
- Шаг 3: Подготовка тестовой выборки
- Шаг 4: Обучение модели и предсказание
- Объяснение и выводы
- Заключение
Вопрос или проблема
У меня есть набор данных в формате 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)
Объяснение и выводы
В итоге у нас есть предсказанные значения целевой переменной для тестового набора данных. Важно отметить, что предсказанное значение — это итог работы модели, и настоящие значения целевой переменной в тестовом наборе в вашем случае отсутствуют, что является нормальным явлением. Эта стратегий позволит избежать смешивания данных и сохранит их целостность, что в свою очередь обеспечит более точные и надежные результаты.
Заключение
Работа с отсутствующими значениями целевой переменной в тестовых наборах данных может быть сложной, но следуя приведенным выше шагам, вы сможете эффективно организовать свои данные и создать предсказательную модель без искажения результатов. Помните, что важность корректного разделения данных и сохранения их первоначального контекста не следует недооценивать.