Вопрос или проблема
Я построил модель на наборе данных Титаник с помощью логистической регрессии, и она хорошо предсказывает на обучающем наборе, но, к сожалению, я не могу применить это на тестовом наборе данных.
Вот код для справки:
training = training[['PassengerId','Sex','Embarked','Pclass','Age','SibSp','Survived']] # 0.78
X = training.iloc[:, :-1]
y = training.iloc[:, -1]
from sklearn.compose import make_column_transformer
from sklearn.preprocessing import OneHotEncoder
ct = make_column_transformer((OneHotEncoder(), ['Sex', 'Embarked']), remainder="passthrough")
X = ct.fit_transform(X)
from sklearn.preprocessing import StandardScaler
sc =StandardScaler()
X=sc.fit_transform(X)
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(solver="lbfgs")
from sklearn.model_selection import cross_val_score
cross_val_score(logreg, X,y, cv=5, scoring ='accuracy').mean()
В тестовом наборе данных у меня нет y данных, то есть предсказательной колонки, поэтому я заполнил ее нулевыми значениями.
Но не могу продвинуться дальше, не могли бы вы подсказать, как я могу запустить модель логистической регрессии на тестовом наборе данных Титаник.
Спасибо большое.
Почему бы вам не использовать функцию predict из модели LogisticRegression, обученной на обучающих данных?
Например:
y_pred = logreg.predict(X_test)
Ответ или решение
На основе предоставленного вами кода и описания проблемы, вы уже создали модель логистической регрессии и обучили ее на учебном наборе данных Титаника. Теперь, чтобы сделать предсказания для тестового набора данных, вам необходимо выполнить несколько дополнительных шагов. Давайте разберем процесс пошагово.
Подготовка тестового набора данных
Прежде чем вы сможете выполнить предсказания на тестовом наборе, вам нужно убедиться, что он подготовлен аналогично учебному набору. Это включает в себя преобразование категориальных переменных (в данном случае «Sex» и «Embarked»), а также нормализацию числовых переменных (например, «Age», «SibSp», «Pclass» и т. д.).
Приведем пример того, как это сделать:
-
Загрузите тестовый набор данных. Убедитесь, что он содержит аналогичные столбцы.
-
Предобработка данных. Примените те же трансформации, которые вы использовали для учебного набора. Это важно, чтобы структура данных была одинаковой. Примерный код может выглядеть так:
import pandas as pd
from sklearn.compose import make_column_transformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
# Загрузка тестового набора данных
test_data = pd.read_csv('test.csv')
# Предобработка тестового набора данных
test_data = test_data[['PassengerId', 'Sex', 'Embarked', 'Pclass', 'Age', 'SibSp']]
test_data['Age'].fillna(test_data['Age'].median(), inplace=True) # Заполнение пропусков, например, медианой
# Создание колонок-функционалов
X_test = test_data
# Создание трансформатора и модели
ct = make_column_transformer((OneHotEncoder(), ['Sex', 'Embarked']), remainder="passthrough")
sc = StandardScaler()
# Полный пайплайн
pipeline = Pipeline(steps=[
('column_transformer', ct),
('scaler', sc),
('logistic_regression', LogisticRegression(solver='lbfgs'))
])
# Обучение модели
pipeline.fit(X, y)
# Прогнозирование на тестовом наборе
y_pred = pipeline.predict(X_test)
Примечания
- Замените имена файлов и столбцов. Убедитесь, что название вашего тестового файла и названия столбцов совпадают с теми, что вы указали в коде.
- Обработка пропусков. Мы заполнили значения
Age
медианой, но вы можете использовать другие способы обработки пропущенных данных, если это необходимо. - Проверьте модель. После выполнения предсказаний вы можете сохранить результаты в CSV-файл для дальнейшего анализа:
submission = pd.DataFrame({'PassengerId': test_data['PassengerId'], 'Survived': y_pred})
submission.to_csv('submission.csv', index=False)
Заключение
Теперь вы должны быть в состоянии предсказать результаты для тестового набора данных Титаника, используя вашу модель логистической регрессии. Убедитесь, что вы следовали тем же шагам предобработки, что и для учебного набора. Если у вас возникнут какие-либо проблемы или вопросы, не стесняйтесь обращаться.