Как стать автором
Обновить

Базовое обучение машинному обучению на Titanic dataset

Уровень сложностиПростой

Импорт библиотек и данных

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, StandardScaler
import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка данных
from google.colab import files

uploaded = files.upload()

# Предполагаем, что файлы train.csv и test.csv были загружены
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')

Модуль A: Парсинг и предобработка данных

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

# Просмотр первых строк данных
train_data.head()

Шаг 2: Очистка данных. Обработка пропущенных значений и другие задачи очистки данных

# Проверка на наличие пропущенных значений
train_data.isnull().sum()

# Заполнение пропущенных значений
train_data['Age'].fillna(train_data['Age'].median(), inplace=True)
train_data['Embarked'].fillna(train_data['Embarked'].mode()[0], inplace=True)
train_data.drop(columns=['Cabin'], inplace=True)

# Для тестового набора данных
test_data['Age'].fillna(test_data['Age'].median(), inplace=True)
test_data['Fare'].fillna(test_data['Fare'].median(), inplace=True)
test_data.drop(columns=['Cabin'], inplace=True)

# Проверка изменений
train_data.isnull().sum()
test_data.isnull().sum()

Шаг 3: Кодирование категориальных признаков Преобразование текстовых данных в числовые

# Кодирование столбца 'Sex'
label_encoder = LabelEncoder()
train_data['Sex'] = label_encoder.fit_transform(train_data['Sex'])
test_data['Sex'] = label_encoder.transform(test_data['Sex'])

# Кодирование столбца 'Embarked'
train_data['Embarked'] = label_encoder.fit_transform(train_data['Embarked'])
test_data['Embarked'] = label_encoder.transform(test_data['Embarked'])

Шаг 4: Нормализация числовых признаков Масштабирование данных для улучшения работы модели

scaler = StandardScaler()

# Нормализация числовых признаков
train_data[['Age', 'Fare']] = scaler.fit_transform(train_data[['Age', 'Fare']])
test_data[['Age', 'Fare']] = scaler.transform(test_data[['Age', 'Fare']])

# Проверка изменений
train_data.head()
test_data.head()

# Удаление нечисловых столбцов
numeric_train_data = train_data.select_dtypes(include=[np.number])

# Проверка изменений
print(numeric_train_data.head())

Шаг 5: Сохранение обработанных данных

def save_processed_data(train_data: pd.DataFrame, test_data: pd.DataFrame, train_filename: str = 'processed_train.csv', test_filename: str = 'processed_test.csv'):
    """
    Сохраняет обработанные данные в CSV файлы и предлагает скачать их.

    Parameters:
    train_data (pd.DataFrame): Обработанный тренировочный набор данных.
    test_data (pd.DataFrame): Обработанный тестовый набор данных.
    train_filename (str): Имя файла для сохранения тренировочного набора данных.
    test_filename (str): Имя файла для сохранения тестового набора данных.
    """
    # Сохранение данных в CSV файлы
    train_data.to_csv(train_filename, index=False)
    test_data.to_csv(test_filename, index=False)
    
    # Загрузка файлов на локальный компьютер
    files.download(train_filename)
    files.download(test_filename)

# Пример использования функции
save_processed_data(train_data, test_data)

Модуль B: Разведочный анализ данных

Шаг 1: Визуализация данных: Создадим несколько графиков для визуализации распределения данных и выявления зависимостей

# Гистограмма возрастов
sns.histplot(train_data['Age'], kde=True, bins=30)
plt.title('Age Distribution')
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.show()

# Гистограмма тарифов
sns.histplot(train_data['Fare'], kde=True, bins=30)
plt.title('Fare Distribution')
plt.xlabel('Fare')
plt.ylabel('Frequency')
plt.show()

# Визуализация выживаемости по полу
sns.countplot(data=train_data, x='Sex', hue='Survived')
plt.title('Survival by Sex')
plt.xlabel('Sex')
plt.ylabel('Count')
plt.show()

# Визуализация выживаемости по классу
sns.countplot(data=train_data, x='Pclass', hue='Survived')
plt.title('Survival by Class')
plt.xlabel('Pclass')
plt.ylabel('Count')
plt.show()

Шаг 2: Корреляционный анализ: Построим корреляционную матрицу и визуализируем ее с помощью тепловой карты.

# Удаление нечисловых столбцов
numeric_train_data = train_data.select_dtypes(include=[np.number])

# Корреляционная матрица
correlation_matrix = numeric_train_data.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('Correlation Matrix')
plt.show()

Шаг 3: Описание основных статистик: Посмотрим на основные статистики данных, такие как среднее, медиана, минимальное и максимальное значения

# Основные статистики
train_data.describe()

Модуль C: Построение, обучение и оптимизация модели

Шаг 1: Загрузка и подготовка данных Загрузим наши обработанные данные

# Удаление нечисловых столбцов
train_data = train_data.select_dtypes(include=[np.number])
test_data = test_data.select_dtypes(include=[np.number])

# Выделение целевой переменной и признаков
X = train_data.drop(columns=['Survived'])
y = train_data['Survived']

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

# Разделение данных на обучающий и валидационный наборы
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

Шаг 3: Выбор и обучение модели Для начала используем логистическую регрессию

# Создание модели
model = LogisticRegression(max_iter=1000)  # Установка большего значения max_iter

# Обучение модели
model.fit(X_train, y_train)

Шаг 4: Оценка модели После обучения модели оценим ее производительность на валидационном наборе данных:

# Предсказания на валидационном наборе
y_pred = model.predict(X_val)

# Оценка точности
accuracy = accuracy_score(y_val, y_pred)
print(f'Accuracy: {accuracy}')

# Матрица ошибок
conf_matrix = confusion_matrix(y_val, y_pred)
print('Confusion Matrix:')
print(conf_matrix)

# Отчет о классификации
class_report = classification_report(y_val, y_pred)
print('Classification Report:')
print(class_report)

Шаг 5: Оптимизация модели Для оптимизации модели используем GridSearchCV, чтобы найти лучшие гиперпараметры для логистической регрессии:

# Подбор гиперпараметров для логистической регрессии с помощью GridSearchCV
param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100]}
grid_search = GridSearchCV(LogisticRegression(max_iter=1000), param_grid, cv=5)
grid_search.fit(X_train, y_train)

# Оценка лучших параметров
best_params = grid_search.best_params_
print("Best Parameters:", best_params)

# Оценка точности модели с лучшими параметрами
best_model = grid_search.best_estimator_
y_pred_best = best_model.predict(X_val)
accuracy_best = accuracy_score(y_val, y_pred_best)
print("Accuracy with best parameters:", accuracy_best)

Шаг 6: Предсказание переменной

# Загрузка тестовых данных без столбца 'Survived'
test_data = pd.read_csv('processed_test.csv')
X_test = test_data.select_dtypes(include=[np.number])

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

# Создание DataFrame для сохранения предсказаний
output = pd.DataFrame({'PassengerId': test_data['PassengerId'], 'Survived': y_test_pred})

# Сохранение предсказаний в фа
output.to_csv('submission.csv', index=False)

files.download('submission.csv')

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.