Как лучше всего связать предсказания с исходными наблюдениями тестового набора, используя Pandas и sklearn?

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

У меня есть данные в следующем формате:

цель признак 1 признак 2 признак 3 поле 1 поле 2 поле 3

Я моделирую, используя регрессию лассо в sklearn.linear_model. Поля 1, 2 и 3 исключаются перед моделированием, так как они не являются ни признаками, ни целевыми переменными. Тем не менее, эти поля имеют важное значение для идентификации исходных наблюдений, чтобы связать предсказания с ними. Как лучше всего обучить/протестировать на полных данных, а затем связать предсказания обратно с исходными наблюдениями в тестовом наборе, где поля 1, 2 и 3 все еще присутствуют? Стоит ли устанавливать индекс, предполагая, что порядок наблюдений на входе такой же, как и порядок предсказаний? У меня возникают трудности с нахождением хорошего примера кода для этого.

Chat GPT предоставляет этот пример. Это лучший способ справиться с этой задачей?

import pandas as pd
from sklearn.linear_model import Lasso

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

# Установите столбец с уникальным идентификатором в качестве индекса
test_data.set_index('unique_id', inplace=True)

# Удалите поля, которые не являются ни признаками, ни целевой переменной
test_data.drop(['field1', 'field2', 'field3'], axis=1, inplace=True)

# Загрузите обученную модель регрессии лассо
lasso_model = Lasso(alpha=0.1)

# Обучите модель на данных для обучения

# Сделайте предсказания на тестовых данных
predictions = lasso_model.predict(test_data)

# Объедините предсказания с исходными тестовыми данными, используя столбец с уникальным идентификатором
predictions_df = pd.DataFrame(predictions, index=test_data.index, columns=['predicted_target'])
joined_data = test_data.join(predictions_df)

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

Для эффективного связывания предсказаний с оригинальными наблюдениями в тестовом наборе данных, используя библиотеки Pandas и Scikit-learn, необходимо следовать определённым шагам. Давайте рассмотрим последовательный подход.

Шаг 1: Подготовка данных

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

import pandas as pd
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split

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

# Устанавливаем уникальный идентификатор (например, 'unique_id')
data.set_index('unique_id', inplace=True)

# Отделяем целевую переменную и признаки
X = data.drop(['target', 'field1', 'field2', 'field3'], axis=1)
y = data['target']

# Разделяем данные на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Шаг 2: Обучение модели

На этом этапе мы будем использовать Lasso регрессию для обучения модели на обучающем наборе данных, а затем сделаем предсказания на тестовом наборе.

# Создание и обучение модели Lasso
lasso_model = Lasso(alpha=0.1)
lasso_model.fit(X_train, y_train)

# Сделать предсказания на тестовом наборе
predictions = lasso_model.predict(X_test)

Шаг 3: Связывание предсказаний с оригинальными наблюдениями

Чтобы объединить предсказания с оригинальными данными тестового набора, мы можем создать DataFrame для предсказаний, указав индекс исходного тестового набора.

# Создание DataFrame для предсказаний
predictions_df = pd.DataFrame(predictions, index=X_test.index, columns=['predicted_target'])

# Присоединение предсказаний к оригинальному тестовому набору данных, включая 'field1', 'field2', 'field3'
result_df = X_test.join(predictions_df)

# Добавление полей 'field1', 'field2', 'field3' (при условии, что они были в тестовом наборе)
result_df = pd.concat([result_df, data.loc[result_df.index, ['field1', 'field2', 'field3']]], axis=1)

# Выводим результат
print(result_df)

Заключение

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

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

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