Bootstrap

【机器学习实战入门】泰坦尼克号生存预测

在这里插入图片描述

泰坦尼克号生存预测项目教程

1. 项目概述

在这个项目中,我们将使用泰坦尼克号乘客数据集,预测乘客是否能够生还。这是一个经典的机器学习分类问题,适合初学者练习。

2. 数据集介绍

数据集包含泰坦尼克号乘客的各种信息,如性别、年龄、船舱等级等,以及是否生还的标签。

链接: 泰坦尼克号生存预测 数据集 titanic

3. 开始项目
3.1 导入必要的库
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report, roc_curve, roc_auc_score
3.2 加载数据集
# 加载数据集
df = pd.read_csv('titanic.csv')
3.3 数据探索
# 查看前几行数据
print(df.head())

# 检查缺失值
print(df.isnull().sum())

# 查看数据统计信息
print(df.describe())

# 查看数据信息
print(df.info())
3.4 数据可视化
# 生存情况可视化
sns.countplot(x='Survived', data=df)
plt.show()

# 性别与生存情况
sns.countplot(x='Sex', hue='Survived', data=df)
plt.show()

# 船舱等级与生存情况
sns.countplot(x='Pclass', hue='Survived', data=df)
plt.show()

# 年龄分布
sns.histplot(df['Age'], kde=True)
plt.show()
3.5 数据预处理

处理缺失值

# 用中位数填充年龄缺失值
df['Age'].fillna(df['Age'].median(), inplace=True)

# 删除Cabin列,因为缺失值太多
df.drop('Cabin', axis=1, inplace=True)

# 删除Embarked缺失值的行(缺失值较少)
df.dropna(subset=['Embarked'], inplace=True)

编码分类变量

# 将Sex和Embarked转换为数值型
le = LabelEncoder()

df['Sex'] = le.fit_transform(df['Sex'])
df['Embarked'] = le.fit_transform(df['Embarked'])

删除不必要的列

# 删除不需要的列
df.drop(['PassengerId', 'Name', 'Ticket'], axis=1, inplace=True)
3.6 划分训练集和测试集
X = df.drop('Survived', axis=1)
y = df['Survived']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
3.7 构建模型

逻辑回归模型

model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)

预测

y_pred = model.predict(X_test)
3.8 模型评估
# 准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy:.2f}')

# 混淆矩阵
cm = confusion_matrix(y_test, y_pred)
print('混淆矩阵:')
print(cm)

# 分类报告
print('分类报告:')
print(classification_report(y_test, y_pred))

# ROC曲线
y_prob = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, y_prob)
plt.plot(fpr, tpr)
plt.xlabel('假正率')
plt.ylabel('真正率')
plt.title('ROC曲线')
plt.show()

# AUC分数
auc = roc_auc_score(y_test, y_prob)
print(f'AUC: {auc:.2f}')
3.9 结论
  • 结果解释: 模型的准确率为X%,表明其在预测生存方面表现良好。
  • 改进方向: 可以尝试其他模型如决策树、随机森林等,或进行超参数调优、特征工程等。
4. 额外提示
  • 尝试其他模型: 如 RandomForestClassifier, SVC, 或 GradientBoostingClassifier。
  • 交叉验证: 使用交叉验证获得更 robust 的性能评估。
  • 处理类别不平衡: 如使用 SMOTE 等技术。
  • 特征重要性分析: 研究哪些特征对预测贡献最大。
5. 参考资料
数据集介绍

好的,我明白了您的需求。以下是一个关于泰坦尼克号生存预测项目的详细中文指南,涵盖了数据理解、预处理、特征工程、模型选择、评估和预测等各个环节。


泰坦尼克号生存预测项目指南

1. 数据理解
  • 数据集构成

    • 训练集(train.csv):包含乘客的特征和生存情况。
    • 测试集(test.csv):包含乘客的特征,但没有生存情况,需要预测。
    • 示例提交文件(gender_submission.csv):假设所有女性都存活的预测结果。
  • 变量定义

    • survival:生存情况,0表示未生存,1表示生存。
    • pclass:票类,1表示上等,2表示中等,3表示下等。
    • sex:性别。
    • age:年龄,小于1岁的小数表示。
    • sibsp:船上兄弟姐妹/配偶数量。
    • parch:船上父母/子女数量。
    • ticket:票号。
    • fare:票价。
    • cabin:舱位号。
    • embarked:登船港口,C表示瑟堡,Q表示皇后镇,S表示南安普顿。
2. 数据预处理
  • 探索性数据分析(EDA)

    • 使用Pandas和Matplotlib库加载数据,检查数据结构和缺失值。
    • 分析各特征与生存率之间的关系,例如性别、年龄、舱位对生存的影响。
  • 缺失值处理

    • age列的缺失值,可以使用均值或中位数填充。
    • cabin列缺失值较多,可以考虑创建一个新的二元特征表示是否有舱位。
3. 特征工程
  • 特征创建

    • 创建family_size特征,结合sibspparch
    • name列中提取尊称(如Mr., Mrs., Miss.)作为新特征。
  • 类别特征处理

    • sexembarked进行独热编码(one-hot encoding)。
  • 无用特征去除

    • 考虑删除ticketcabin等可能无用的特征。
4. 模型选择与训练
  • 算法选择

    • 逻辑回归:简单且解释性强。
    • 决策树:处理非线性关系能力强。
    • 随机森林:集成学习,性能较好。
    • 神经网络:适用于复杂关系。
  • 模型评估

    • 使用交叉验证评估模型性能,防止过拟合。
    • 关注准确率、精确率、召回率和F1分数。
5. 模型调优
  • 超参数调优
    • 使用网格搜索或随机搜索优化模型参数。
6. 预测与提交
  • 预测

    • 在测试集上应用训练好的模型进行预测。
  • 结果提交

    • 确保预测结果格式正确,符合提交要求,生成提交文件。

;