机器学习作业 | 泰坦尼克号生存的预测任务

泰坦尼克号生存的预测任务

学校作业,我来水一水

环境:pycharm+anaconda虚拟环境

文章目录

  • 泰坦尼克号生存的预测任务
    • 0.环境搭建参考:
    • 1 目的与要求
    • 2 任务背景
    • 3 任务简介
    • 4 模型介绍
      • 1.决策树(Decision Tree)
      • 2.朴素贝叶斯(Naive Bayes)
      • 3.支持向量机(Support Vector Machine, SVM)
    • 5 结论
    • 6.训练集测试集代码链接

0.环境搭建参考:

学校机器学习_为了前进而后退,为了走直路而走弯路的博客-CSDN博客

1 目的与要求

(1)目的: 本任务旨在使用机器学习算法预测泰坦尼克号乘客的生存情况。根据乘客的个人信息(如年龄、性别、船舱等级等),使用合适的模型来判断该乘客是否在事故中幸存。模型将对给定的测试集进行预测,并生成预测结果。
(2)采用不同的机器学习算法进行建模(如:决策树、朴素贝叶斯、支持向量机)。
对模型的性能进行评估,计算准确率。
对比不同模型的准确率,通过可视化手段展示结果(如准确率折线图、混淆矩阵等)。
输出每个模型的可视化结果并保存(如决策树的图示、特征重要性等)。

2 任务背景

泰坦尼克号(RMS Titanic)是世界历史上最著名的沉船之一,1912年4月15日沉没。在事故中,约有1500多人失去了生命。根据该事件的相关数据集(包含乘客的个人信息及生死状态),我们可以构建模型预测乘客的生存概率。数据集包含的特征有:乘客的年龄、性别、船舱等级、票价、家庭成员数量等。

3 任务简介

数据集介绍:
训练集(mytrain.csv):包含泰坦尼克号乘客的个人信息及其是否生还的标签(Survived)。这个数据集将用于训练模型。
测试集(mytest.csv):包含泰坦尼克号乘客的个人信息。这个数据集将用于模型预测,预测结果与 mygender.csv 中的标签进行比较。

**目标:**构建机器学习模型,预测乘客在事故中是否生还(分类任务)。
数据预处理:

**处理缺失值:**填充年龄的缺失值为平均值,填充 Embarked 的缺失值为众数,填充 Fare 的缺失值为均值。

特征工程:将性别特征(Sex)从字符型转化为数值型(男为0,女为1)。

任务目标:通过不同的机器学习算法(如决策树、朴素贝叶斯、支持向量机),对乘客生还与否进行预测,并比较其准确率。

可视化图表

准确率对比折线图:
比较三种模型(决策树、朴素贝叶斯、SVM)的准确率。
保存为 model_comparison_accuracy.png。
决策树的图示:
生成决策树的结构图,并保存为 decision_tree.png。
混淆矩阵图:
为每个模型生成并保存混淆矩阵图,分别为
decision_tree_confusion_matrix.png,naive_bayes_confusion_matrix.png, svm_confusion_matrix.png。

4 模型介绍

image-20241230195502739

1.决策树(Decision Tree)

简介:决策树是一种树形结构的模型,适用于分类和回归任务。它通过一系列的决策规则将数据划分为不同的类别,直到满足某种停止条件。决策树模型易于理解和解释。

关键代码:
from sklearn.tree import DecisionTreeClassifier, plot_tree决策树模型训练dt_model = DecisionTreeClassifier(random_state=42)
dt_model.fit(X_train, y_train)预测dt_y_pred = dt_model.predict(X_test)绘制决策树图plt.figure(figsize=(12, 8))
plot_tree(dt_model, feature_names=features, class_names=['Not Survived', 'Survived'], filled=True, rounded=True)
plt.title("Decision Tree Visualization")
plt.savefig('decision_tree.png')

**模型评估:**通过 accuracy_score 计算准确率,比较实际与预测结果。

结果:
准确率:0.8014
Decision Tree_confusion_matrix.png

img

decision_tree.pngimg

feature_importance.png

img

2.朴素贝叶斯(Naive Bayes)

简介:朴素贝叶斯是一种基于贝叶斯定理的分类算法,适用于特征之间独立性假设成立的场景。它通过计算各类别的条件概率,选择概率最大的类别作为预测结果。

关键代码:
from sklearn.naive_bayes import GaussianNB朴素贝叶斯模型训练nb_model = GaussianNB()
nb_model.fit(X_train, y_train)预测nb_y_pred = nb_model.predict(X_test)
模型评估:同样使用 accuracy_score 来评估朴素贝叶斯模型的准确率。

结果:
准确率:0.9306
Naïve Bayes_confusion_matrix.png

img

3.支持向量机(Support Vector Machine, SVM)

简介:支持向量机是一种基于最大间隔原则的分类模型,主要用于二分类问题。SVM通过构造一个超平面来实现分类,使得不同类别的数据点距离超平面尽可能远。

关键代码:
from sklearn.svm import SVC支持向量机模型训练svm_model = SVC(random_state=42)
svm_model.fit(X_train, y_train)预测svm_y_pred = svm_model.predict(X_test)

模型评估:使用 accuracy_score 来评估SVM模型的准确率。
混淆矩阵: 对于每个模型,生成混淆矩阵,评估模型的精确度、召回率等。
准确率对比折线图: 通过 seaborn 和 matplotlib 绘制不同模型的准确率对比折线图,方便比较各算法的性能。

代码示例:

绘制模型准确率折线图

accuracies = [dt_accuracy, nb_accuracy, svm_accuracy]
models = ['Decision Tree', 'Naive Bayes', 'SVM']
sns.lineplot(x=models, y=accuracies, marker='o')
plt.title('Model Comparison: Accuracy of Decision Tree, Naive Bayes, and SVM')
plt.ylabel('Accuracy')
plt.savefig('model_comparison_accuracy.png')
plt.show()

结果:
准确率:0.6531
SVM_confusion_matrix.png

img

完整代码:

#导入需要的库import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.preprocessing import LabelEncoder#加载数据train_df = pd.read_csv('mytrain.csv')
test_df = pd.read_csv('mytest.csv')
gender_df = pd.read_csv('mygender.csv')#数据预处理#填充缺失值,删除无关列train_df.fillna({'Age': train_df['Age'].mean(), 'Embarked': train_df['Embarked'].mode()[0]}, inplace=True)
test_df.fillna({'Age': test_df['Age'].mean(), 'Fare': test_df['Fare'].mean()}, inplace=True)#转换性别列为数字(男=0,女=1)label_encoder = LabelEncoder()
train_df['Sex'] = label_encoder.fit_transform(train_df['Sex'])
test_df['Sex'] = label_encoder.transform(test_df['Sex'])#特征选择 - 这里只选择了一些简单的特征features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare']
X_train = train_df[features]
y_train = train_df['Survived']
X_test = test_df[features]#创建保存结果的文件夹def create_folder(folder_name):if not os.path.exists(folder_name):os.makedirs(folder_name)#初始化准确率对比列表accuracies = []#决策树模型dt_model = DecisionTreeClassifier(random_state=42)
dt_model.fit(X_train, y_train)
dt_y_pred = dt_model.predict(X_test)
dt_accuracy = accuracy_score(gender_df['Survived'], dt_y_pred)
accuracies.append(dt_accuracy)#朴素贝叶斯模型nb_model = GaussianNB()
nb_model.fit(X_train, y_train)
nb_y_pred = nb_model.predict(X_test)
nb_accuracy = accuracy_score(gender_df['Survived'], nb_y_pred)
accuracies.append(nb_accuracy)#支持向量机模型svm_model = SVC(random_state=42)
svm_model.fit(X_train, y_train)
svm_y_pred = svm_model.predict(X_test)
svm_accuracy = accuracy_score(gender_df['Survived'], svm_y_pred)
accuracies.append(svm_accuracy)#可视化决策树def visualize_decision_tree(model, folder_name):plt.figure(figsize=(12, 8))plot_tree(model, feature_names=features, class_names=['Not Survived', 'Survived'], filled=True, rounded=True)plt.title("Decision Tree Visualization")plt.savefig(os.path.join(folder_name, "decision_tree.png"))plt.close()#可视化混淆矩阵def visualize_confusion_matrix(y_true, y_pred, folder_name, model_name):conf_matrix = confusion_matrix(y_true, y_pred)plt.figure(figsize=(6, 4))sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=['Not Survived', 'Survived'], yticklabels=['Not Survived', 'Survived'])plt.title(f'{model_name} Confusion Matrix')plt.ylabel('Actual')plt.xlabel('Predicted')plt.savefig(os.path.join(folder_name, f"{model_name}_confusion_matrix.png"))plt.close()#可视化特征重要性(仅限决策树)def visualize_feature_importance(model, folder_name):feature_importances = model.feature_importances_sns.barplot(x=features, y=feature_importances)plt.title('Feature Importances - Decision Tree')plt.ylabel('Importance')plt.savefig(os.path.join(folder_name, "feature_importance.png"))plt.close()#保存决策树结果dt_folder = 'decision_tree_results'
create_folder(dt_folder)
visualize_decision_tree(dt_model, dt_folder)
visualize_confusion_matrix(gender_df['Survived'], dt_y_pred, dt_folder, 'Decision Tree')
visualize_feature_importance(dt_model, dt_folder)#保存朴素贝叶斯结果nb_folder = 'naive_bayes_results'
create_folder(nb_folder)
visualize_confusion_matrix(gender_df['Survived'], nb_y_pred, nb_folder, 'Naive Bayes')#保存支持向量机结果svm_folder = 'svm_results'
create_folder(svm_folder)
visualize_confusion_matrix(gender_df['Survived'], svm_y_pred, svm_folder, 'SVM')#绘制三种模型准确率的折线图plt.figure(figsize=(8, 6))
models = ['Decision Tree', 'Naive Bayes', 'SVM']
sns.lineplot(x=models, y=accuracies, marker='o')
plt.title('Model Comparison: Accuracy of Decision Tree, Naive Bayes, and SVM')
plt.ylabel('Accuracy')
plt.savefig('model_comparison_accuracy.png')
plt.show()#输出各模型准确率print(f"Decision Tree Accuracy: {dt_accuracy:.4f}")
print(f"Naive Bayes Accuracy: {nb_accuracy:.4f}")
print(f"SVM Accuracy: {svm_accuracy:.4f}")

三种算法对比折线图:
Model_comparison_accuract.png

img

5 结论

总结: 通过本次任务,我使用了三种不同的机器学习算法:决策树、朴素贝叶斯和支持向量机,来预测泰坦尼克号乘客的生还与否。每个算法都进行了训练并生成了相应的预测结果。通过对比准确率,我发现不同模型在本任务中的表现有所不同。
收获:
学会了如何进行数据预处理,如处理缺失值、转换类别特征等。
掌握了多种常用分类算法的使用,包括决策树、朴素贝叶斯和支持向量机,并能够对其进行评估。
学会了如何使用混淆矩阵和准确率等评估指标来评价模型的表现。
通过可视化,能够更清晰地理解模型的预测结果以及不同模型之间的差异。

6.训练集测试集代码链接

我就直接把整个项目的都放在这了

通过网盘分享的文件:PythonProject
链接: https://pan.baidu.com/s/1VXbp32N29owHKvdf7F0eoA 提取码: zp5u

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/498282.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【pytorch】conda安装pytorch

Step 1 打开官网: https://pytorch.org/get-started/locally/ 进行选择对应版本: 复制图中命令执行。 Step 2 验证是否安装成功。 执行: import torch print(torch.cuda.is_available()) print(torch.cuda.device_count()) print(torch.…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(四)

文章目录 一、管理员角色功能实现1、添加教师功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、教师管理功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询接口实现2.3.2 后端编辑接口实现2.3.3 后端删除接口实现2.4 效果展示二、代码下…

基于16QAM的载波同步和定时同步性能仿真,采用四倍采样,包括Costas环和gardner环

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…

新服务器ubuntu系统相关操作

1、查看驱动:驱动版本535.216.01能够支持cuda12.2,下面直接使用默认安装的cuda。 2、赋予用户管理员权限。 首先有超级用户(root)权限来编辑 /etc/sudoers 文件,visudo 是一个命令,用于安全地编辑 /etc/sudoers 文件。运行: sudo visudo 在 visudo 编辑器中,找到类似…

2、Bert论文笔记

Bert论文 1、解决的问题2、预训练微调2.1预训练微调概念2.2深度双向2.3基于特征和微调(预训练下游策略) 3、模型架构4、输入/输出1.输入:2.输出:3.Learned Embeddings(学习嵌入)1. **Token Embedding**2. **Position Embedding**3…

python 渗透开发工具之SQLMapApi Server不同IP服务启动方式处理 解决方案SqlMapApiServer外网不能访问的情况

目录 说在前面 什么是 SQLMapAPI 说明 sqlmapApi能干什么 sqlmapApi 服务安装相关 kali-sqlmap存放位置 正常启动sqlmap-api server SqlMapApi-Server 解决外网不能访问情况 说在前面 什么是sqlmap 这个在前面已经说过了,如果这个不知道,就可以…

操作系统论文导读(八):Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个

Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个关键性规范的零星任务的可调度性分析 目录 一、论文核心思想 二、基本定义 2.1 关键性指标 2.2 任务及相关参数定义 2.3 几个基础定义 三、可调度性分析 3.1 调度算法分…

技术速递|调用异步功能 - WinForms 在 .NET 9 中的未来发展

作者: Klaus Loeffelmann 排版:Alan Wang 随着 .NET 的不断发展,WinForms 开发者可用的工具也在不断进步,这使得开发更加高效且应用响应更迅速。在 .NET 9 中,我们很高兴引入了一系列新的异步 API,这些 API…

Docker-构建自己的Web-Linux系统-镜像webtop:ubuntu-kde

介绍 安装自己的linux-server,可以作为学习使用,web方式访问,基于ubuntu构建开源项目 https://github.com/linuxserver/docker-webtop安装 docker run -d -p 1336:3000 -e PASSWORD123456 --name webtop lscr.io/linuxserver/webtop:ubuntu-kde登录 …

【每日学点鸿蒙知识】箭头函数、Watch状态变量、H5获取定位数据、前后台切换、长按事件

【每日学点鸿蒙知识】箭头函数、Watch状态变量、H5获取定位数据、前后台切换、长按事件 1、HarmonyOS confirm: () > void () > { }? confirm: () > void () > { }是什么格式。 是一个箭头函数,它的类型是 () > void,表示…

【人工智能机器学习基础篇】——深入详解监督学习之模型评估:掌握评估指标(准确率、精确率、召回率、F1分数等)和交叉验证技术

深入详解监督学习之模型评估 在监督学习中,模型评估是衡量模型性能的关键步骤。有效的模型评估不仅能帮助我们理解模型在训练数据上的表现,更重要的是评估其在未见数据上的泛化能力。本文将深入探讨监督学习中的模型评估方法,重点介绍评估指…

如何使用React,透传各类组件能力/属性?

在23年的时候,我主要使用的框架还是Vue,当时写了一篇“如何二次封装一个Vue3组件库?”的文章,里面涉及了一些如何使用Vue透传组件能力的方法。在我24年接触React之后,我发现这种扩展组件能力的方式有一个专门的术语&am…

点进CSS选择器

CSS 1.直接在标签的style属性进行设置(行内式) //写在数据单元格td标签内的stytle&#xff0c;设置color颜色和font-size字体大小&#xff1b; <td rowspan"3" style"color: red;font-size: 12px;">Web技术与应用</td> 2.写在head标签中的…

Python基于卷积神经网络的车牌识别系统开发与实现

1. 简介 车牌识别是人工智能在交通领域的重要应用&#xff0c;广泛用于高速违章检测、停车场管理和智能交通系统等场景。本系统通过基于卷积神经网络&#xff08;CNN&#xff09;的深度学习算法&#xff0c;结合 Python 和 MySQL 实现车牌的快速识别与管理。 系统特点&#x…

【PDF物流单据提取明细】批量PDF提取多个区域内容导出表格或用区域内容对文件改名,批量提取PDF物流单据单号及明细导出表格并改名的技术难点及小节

相关阅读及下载&#xff1a; PDF电子物流单据&#xff1a; 批量PDF提取多个区域局部内容重命名PDF或者将PDF多个局部内容导出表格&#xff0c;具体使用步骤教程和实际应用场景的说明演示https://mp.weixin.qq.com/s/uCvqHAzKglfr40YPO_SyNg?token720634989&langzh_CN扫描…

运行python程序报错 undefined symbol: ffi_type_uint32 的参考解决方法

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04 ROS-Noetic 一、问题描述 运行 python 程序出现如下问题&#xff1a; Traceback (most recent call last):File "<string>", line 1, in <module&…

鱼眼相机模型与去畸变实现

1.坐标系说明 鱼眼相机模型涉及到世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换关系。对于分析鱼眼相机模型&#xff0c;假定世界坐标系下的坐标点,经过外参矩阵的变换转到相机坐标系&#xff0c;相机坐标再经过内参转换到像素坐标&#xff0c;具体如下 进一步进…

ASP.NET Core Web API Hangfire

ASP.NET Core Web API Hangfire 前言一、安装二、相关代码1.代码片段2.代码片段3.运行效果 三、测试代码1.即发即弃作业2.延迟作业3.重复作业4.延续作业5.页面调度作业 前言 &#x1f468;‍&#x1f4bb;&#x1f468;‍&#x1f33e;&#x1f4dd;记录学习成果&#xff0c;以…

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1)

DevOps实战&#xff1a;用Kubernetes和Argo打造自动化CI/CD流程&#xff08;1&#xff09; 架构 架构图 本设计方案的目标是在一台阿里云ECS服务器上搭建一个轻量级的Kubernetes服务k3s节点&#xff0c;并基于Argo搭建一套完整的DevOps CI/CD服务平台&#xff0c;包括Argo CD…

【openGauss】正则表达式次数符号“{}“在ORACLE和openGauss中的差异

一、前言 正则作为一种常用的字符串处理方式&#xff0c;在各种开发语言&#xff0c;甚至数据库中&#xff0c;都有自带的正则函数。但是正则函数有很多标准&#xff0c;不同标准对正则表达式的解析方式不一样&#xff0c;本次在迁移一个ORACLE数据库到openGauss时发现了一个关…