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

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

学校作业,我来水一水

环境: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.mzph.cn/pingmian/65662.shtml

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

相关文章

leetcode 面试经典 150 题:矩阵置零

链接矩阵置零题序号73题型二维数组解题方法标记数组法难度中等熟练度✅✅✅✅ 题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1]…

【MySQL】搞懂mvcc、read view:MySQL事务原理深度剖析

前言:本节内容是事务里面最难的一部分, 就是理解mvcc快照读和read view。这两个部分需要了解隔离性里面的四种隔离级别。 博主之前讲过,但是担心友友们不了解, 所以这里开头进行了复习。 下面开始我们的学习吧! ps&…

GXUOJ-算法-第四次作业(圆排列、连续邮资、n皇后、符号三角形)

1.圆排列 问题描述 GXUOJ | 圆排列 代码解答 #include<bits/stdc.h> using namespace std;int n; int r[1000]; double calculate(int r[],int n,double minL){double x,y;double sum0;for(int i0;i<n;i){int x,y;xr[i];yr[i1];//sumsqrt((xy)*(xy)-(x-y)*(x-y));s…

c++最大公约数和最小公倍数的深入剖析

目录 一、概念基础 二、常见算法及深度解析 1. 辗转相除法&#xff08;欧几里得算法&#xff09; 2. 更相减损术 3. 结合辗转相除法和更相减损术&#xff08;优化算法&#xff09; 三、应用场景全面举例 1. 化简分数 2. 判断互质关系 一、什么是最小公倍数 二、求最小…

【PCIe 总线及设备入门学习专栏 4.5 -- PCIe Message and PCIe MSI】

文章目录 PCIe Message 与 MSIPCIe Message 和 MSI 的作用与关系MSI 的配置与寄存器MSI 和 ARM GIC 的关系示例&#xff1a;MSI 在 ARM GIC 的实际应用总结 PCIe Message 与 MSI 本文将介绍 PCIe message 的作用以及message 与 MSI 的关系&#xff0c;再介绍 MSI 如何配置以及…

每天40分玩转Django:Django类视图

Django类视图 一、知识要点概览表 类别知识点掌握程度要求基础视图View、TemplateView、RedirectView深入理解通用显示视图ListView、DetailView熟练应用通用编辑视图CreateView、UpdateView、DeleteView熟练应用Mixin机制ContextMixin、LoginRequiredMixin理解原理视图配置U…

IndexOf Apache Web For Liunx索引服务器部署及应用

Apache HTTP Server 是一款广泛使用的开源网页服务器软件,它支持多种协议,包括 HTTP、HTTPS、FTP 等 IndexOf 功能通常指的是在一个目录中自动生成一个索引页面的能力,这个页面会列出该目录下所有的文件和子目录。比如网上经常看到的下图展现的效果,那么接下来我们就讲一下…

C++的第一个程序

前言 在学习c之前&#xff0c;你一定还记得c语言的第一个程序 当时刚刚开始进行语言学习 因此告诉到&#xff0c;仅仅需要记住就可以 #include <stdio.h>int main(){printf("Hello World");return 0; }而对于c中的第一个程序&#xff0c;似乎有所变化 C的…

ipad如何直连主机(Moonlight Sunshine)

Windows 被连接主机&#xff08;Windows&#xff09; 要使用的话需要固定ip&#xff0c;不然ip会换来换去&#xff0c;固定ip方法本人博客有记载Github下载Sunshine Sunshine下载地址除了安装路径需要改一下&#xff0c;其他一路点安装完成后会打开Sunshine的Web UI&#xff…

mac docker部署jar包流程

mac docker部署jar包流程 默认服务器已经准备好了相关的准备工作&#xff0c;如&#xff1a;docker&#xff0c;docker内安装所需软件数据库&#xff0c;jdk等&#xff0c;将要部署等jar包。 1:将jar 包上传到服务器目录下&#xff1a;/usr/local/service (没有目录可以自己创建…

Qt -初识

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【暂无】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 文章目录 &#x1f4da; 前言&#x1f6e0;️ 搭建环境&#x1f4c2; 新建项目&#x1f4dd; 初始代码理解main.cppwidget.hwidget.cppwidget.uiHelloWorld.pro&#x1f6e…

2024.12.30(多点通信)

作业&#xff1a; 1、将广播发送和接收端实现一遍&#xff0c;完成一个发送端发送信息&#xff0c;对应多个接收端接收信息实验。 发送端 #include <myhead.h>#define PORT 8888 #define IP "192.168.124.255"int main(int argc, const char *argv[]) {//1、…

点进CSS选择器

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

UE5材质节点BumpOffset

BumpOffset 凹凸偏移&#xff0c;可以让材质显示视差偏移的效果 Coordinate是UV&#xff0c;Height是凹凸偏移高度&#xff0c;HeightRatioInput用来控制高度比

仙盟系统开发——启动app失败

var 返回 仙盟使者.Cyber_CallApp(VOAPP, 命令, 携带);

LabVIEW声波谐振管自动化测量系统

开发了一种基于LabVIEW的声波谐振管自动化测量系统。该系统利用LabVIEW的强大功能&#xff0c;实现了对声波谐振频率的精确测量&#xff0c;提高了实验数据的采集效率和准确性。系统主要应用于物理教学和科研中&#xff0c;用于研究声波在谐振管中的传播特性。 项目背景 传统的…

学习笔记:使用 pandas 和 Seaborn 绘制柱状图

学习笔记&#xff1a;使用 pandas 和 Seaborn 绘制柱状图 前言 今天在使用 pandas 对数据进行处理并在 Python 中绘制可视化图表时&#xff0c;遇到了一些关于字体设置和 Seaborn 主题覆盖的小问题。这里将学习到的方法和注意事项做个总结&#xff0c;以便之后的项目中可以快…

【Linux】进程间通信-> 共享内存

共享内存原理 在C语言/C中&#xff0c;malloc也可以在物理内存申请空间&#xff0c;将申请的物理内存空间通过页表映射到进程地址空间&#xff0c;将内存空间的起始地址&#xff08;虚拟地址&#xff09;返回&#xff0c;进而进程可以使用虚拟地址通过页表映射到物理内存的方式…

【yolov5】实现FPS游戏人物检测,并定位到矩形框上中部分,实现自瞄

介绍 本人机器学习小白&#xff0c;通过语言大模型百度进行搜索&#xff0c;磕磕绊绊的实现了初步效果&#xff0c;能有一些锁头效果&#xff0c;但识别速度不是非常快&#xff0c;且没有做敌友区分&#xff0c;效果不是非常的理想&#xff0c;但在4399小游戏中爽一下还是可以…

【Maven】Maven打包机制详解

Maven打包的类型&#xff1f; 以下是几种常见的打包形式&#xff1a; 1、jar (Java Archive) 用途&#xff1a;用于包含 Java 类文件和其他资源&#xff08;如属性文件、配置文件等&#xff09;的库项目。特点&#xff1a; 可以被其他项目作为依赖引用。适合创建独立的应用程…