【Python】python泰坦尼克号生存预测 (源码+数据集+PPT+论文)【独一无二】

=========👉 源码【传送】👈 =========

一、设计要求

背景描述

Titanic数据集在数据分析领域是十分经典的数据集,非常适合刚入门的小伙伴进行学习!

数据说明

在该数据集中,共包括三个文件,分别代表训练集测试集以及测试集的答案

数据描述:

变量名称 PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
变量解释 乘客编号 是否存活 船舱等级 姓名 性别 年龄 兄弟姐妹和配偶数量 父母与子女数量 票的编号 票价 座位号 登船码头
数据类型 numeric categorical categorical String categorical categorical numeric numeric string numeric string categorical

:以上数据类型均为经过预处理后的数据类型!


二、设计思路

1. 数据预处理

实现思路:
在机器学习模型的训练和预测之前,数据预处理是一个关键步骤。其目的是将原始数据转化为适合模型输入的形式,同时尽量减少数据中的噪声和异常值对模型性能的影响。
缺失值填补:代码中使用了SimpleImputer将缺失的年龄和票价数据用中位数填补,因为中位数对异常值的鲁棒性较好。另外,Embarked缺失值使用众数进行填补,因为这是一种分类变量,众数是最常见的值。
类别变量编码:SexEmbarked是类别变量,在机器学习模型中需要将其转化为数值形式。代码中使用LabelEncoder对这些变量进行编码,转化为整数值,以便模型能够处理。
特征选择与删除:代码删除了诸如PassengerId, Name, Ticket, Cabin等对生存预测无显著作用的特征。这些特征可能与目标变量Survived的关系不大,或者是因为它们具有高基数(如名字、票号),无法为模型提供有用的模式识别信息。

# 数据预处理
def preprocess_data(df):
    # 缺失值填补
    imputer = SimpleImputer(strategy='median')
    df['Age'] = imputer.fit_transform(df[['Age']])
    df['Fare'] = imputer.fit_transform(df[['Fare']])
    df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)

    # 类别变量编码
    
    # 此处 略至少10行代码...
    # 此处 略至少10行代码...
    # 此处 略至少10行代码...
    
    return df

# 预处理训练数据和测试数据
train_data = preprocess_data(train_data)
test_data = preprocess_data(test_data)

2. 训练集与验证集的分割

实现思路:
为了评估模型的性能,数据被分割为训练集和验证集。train_test_split函数用于将数据集分为训练集(80%)和验证集(20%)。训练集用于训练模型,验证集用于在训练过程中监控模型性能,以防止过拟合。
标准化:使用StandardScaler将特征标准化,使其均值为0,标准差为1。这对于一些基于距离的算法(如SVM)非常重要,同时对随机森林等其他算法也有助于提高模型的训练效果。

# 分割训练集和验证集
X = train_data.drop('Survived', axis=1)
y = train_data['Survived']


# 此处 略至少10行代码...
# 此处 略至少10行代码...
# 此处 略至少10行代码...

X_val = scaler.transform(X_val)
test_data = scaler.transform(test_data)

3. 模型训练

实现思路:
代码选择了RandomForestClassifier作为模型。随机森林是一种集成学习方法,它通过构建多个决策树,并将其预测结果进行平均来减少单个决策树的过拟合问题,从而提高模型的泛化能力。
在训练过程中,模型使用训练集数据进行拟合,构建了一组决策树,并在这些树的基础上形成了一个随机森林。

# 训练随机森林模型
# 此处 略至少10行代码...
model.fit(X_train, y_train)

4. 模型预测与评估

实现思路:
预测:在验证集上,使用训练好的随机森林模型进行预测,得到预测的生存情况(Survived)。
评估:模型性能通过计算准确率和生成分类报告来评估。准确率衡量了模型预测正确的比例,而分类报告提供了更加详细的性能指标,如精确度、召回率和F1-score。这些指标有助于更全面地了解模型在不同类别上的表现。
测试集预测:最终,模型对测试集数据进行预测,并生成预测结果文件submission.csv,用于提交。

# 预测
y_pred = model.predict(X_val)

# 评估模型
accuracy = accuracy_score(y_val, y_pred)
print(f'Validation Accuracy: {accuracy}')
print('Classification Report:')
print(classification_report(y_val, y_pred))

# 在测试集上进行预测
test_pred = model.predict(test_data)

# 保存预测结果
# 此处 略至少10行代码...
# 此处 略至少10行代码...
print('Predictions saved to submission.csv')

5. 特征重要性分析

实现思路:
代码计算了每个特征在随机森林模型中的重要性。特征重要性反映了每个特征对模型决策过程的贡献,通过绘制柱状图,可以直观地看到哪些特征对预测生存情况具有较大的影响。这对于特征工程和模型优化具有重要意义。

# 绘制特征重要性图
feature_importances = pd.Series(model.feature_importances_, index=X.columns)
# 此处 略至少10行代码...
# 此处 略至少10行代码...
plt.title('Top 10 Feature Importances')
plt.show()

通过这些代码块,可以将每个模块的实现思路具体化,帮助你更好地理解整个数据处理、模型训练、预测及评估过程。


三、可视化分析

生存状态与客舱等级的关系

图形内容:这个柱状图展示了在不同的船舱等级(Pclass)下,乘客的生存与否(Survived)的分布情况。
含义:通过比较不同Pclass的乘客生存和未生存的数量,可以看出在不同船舱等级中生存率的差异。较高的Pclass(如Pclass 1)的乘客可能生存率更高。

生存比例

图形内容:这个饼状图展示了整个数据集中乘客生存和未生存的比例。
含义:通过查看生存与未生存的比例,可以直观地理解数据集中生存率的整体情况。

年龄与生存状态的关系

图形内容:这个折线图展示了不同年龄段乘客的生存状态分布情况。
含义:折线图帮助分析不同年龄的乘客的生存概率。例如,某些特定年龄段的乘客可能生存概率较高或较低。

票价与年龄的关系

图形内容:这个散点图展示了乘客的票价(Fare)与年龄(Age)之间的关系,并根据生存状态(Survived)进行区分。
含义:通过这个图表,可以看到票价和年龄如何相互关系,并且生存和未生存的乘客在这些变量上的分布是否有明显的不同。

相关性热图

图形内容:热力图展示了数值特征之间的相关性矩阵。
含义:热力图用于识别不同变量之间的相关性。颜色越深表示相关性越强,正相关和负相关均可通过颜色深浅识别。这个图表有助于找到哪些特征之间存在显著的线性关系。

不同客舱等级下乘客的年龄与票价的分布

图形内容:左侧的箱线图展示了不同Pclass中乘客年龄(Age)在生存与否(Survived)下的分布情况;右侧的小提琴图展示了不同Pclass中乘客票价(Fare)在生存与否下的分布情况。
含义:箱线图帮助理解在不同Pclass和生存状态下年龄的中位数、四分位范围以及异常值的分布情况;小提琴图则结合了箱线图和密度图的优点,可以更清晰地看出票价分布的形态和生存状态的关系。


作者:不争不抢不显不露

物联沃分享整理
物联沃-IOTWORD物联网 » 【Python】python泰坦尼克号生存预测 (源码+数据集+PPT+论文)【独一无二】

发表回复