Вопрос или проблема
У меня есть данные в следующем формате:
цель | признак 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)
Заключение
С помощью вышеуказанного кода вы сможете безопасно связывать предсказания вашей модели с оригинальными наблюдениями в тестовом наборе данных. Обращение с уникальным идентификатором используется для повышения надежности при связывании данных. Это позволит вам не только выполнять предсказания, но и сохранять контекст оригинальных данных, что важно для дальнейшего анализа или отчетности.