👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
【Python】python泰坦尼克号生存预测 (源码+数据集+PPT+论文)
目录
- 【Python】python泰坦尼克号生存预测 (源码+数据集+PPT+论文)
- 一、设计要求
- 背景描述
- 数据说明
- 二、设计思路
- 1. 数据预处理
- 2. 训练集与验证集的分割
- 3. 模型训练
- 4. 模型预测与评估
- 5. 特征重要性分析
- 三、可视化分析
- 生存状态与客舱等级的关系
- 生存比例
- 年龄与生存状态的关系
- 票价与年龄的关系
- 相关性热图
- 不同客舱等级下乘客的年龄与票价的分布
一、设计要求
背景描述
Titanic数据集在数据分析领域是十分经典的数据集,非常适合刚入门的小伙伴进行学习!
泰坦尼克号轮船的沉没是历史上最为人熟知的海难事件之一。1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在船上的 2224 名乘客和机组人员中,共造成 1502 人死亡。这场耸人听闻的悲剧震惊了国际社会,从而促进了船舶安全规定的完善。造成海难失事的原因之一是乘客和机组人员没有足够的救生艇。尽管在沉船事件中幸存者有一些运气因素,但有些人比其他人更容易存活下来,究竟有哪些因素影响着最终乘客的生存与否呢?
数据说明
在该数据集中,共包括三个文件,分别代表训练集、测试集以及测试集的答案;
数据描述:
变量名称 | 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
缺失值使用众数进行填补,因为这是一种分类变量,众数是最常见的值。
类别变量编码:Sex
和Embarked
是类别变量,在机器学习模型中需要将其转化为数值形式。代码中使用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和生存状态下年龄的中位数、四分位范围以及异常值的分布情况;小提琴图则结合了箱线图和密度图的优点,可以更清晰地看出票价分布的形态和生存状态的关系。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 代码 ” 获取,拿来即用。👈👈👈