极简sklearn-使用决策树预测泰坦尼克号幸存者

news2025/1/31 11:13:05

泰坦尼克号幸存者数据集是kaggle竞赛中入门级的数据集,今天我们就来用决策树来预测下哪些人会成为幸存者。

数据集下载地址: https://download.csdn.net/download/ting4937/87630361

 数据集中包含两个csv文件,data为训练用数据,test为测试集。

探索数据

首先我们通过pandas来读取并查看数据

import pandas as pd
data = pd.read_csv(r"data.csv") #读取数据

data.head() #显示头5条数据

数据如下:里面包含了特征和标签

特征描述
survival该乘客是否获救,1是获救
pclass乘客船票等级,1/2/3等舱位,一等票/二等票/三等票
sex乘客性别
Age乘客年龄,以年为单位
sibsp乘客,在泰坦尼克号上的堂兄妹/配偶的个数
parch乘客,在泰坦尼克号上的父母/孩子个数
ticket乘客船票信息
fare乘客船票价格
cabin乘客船舱信息
embarked

乘客登船港口
S = Southampton,

C = Cherbourg,
Q = Queenstown

再通过info方法来查看数据有多少条,空值情况

data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB

处理数据

通过分析数据可以看出name和ticket与是否存活没多少关系,而cabin缺失值太多,这三列需要删掉

#删除指定列, inplace=True表示覆盖原数据,axis=0表示删除行,1表示删除列
data.drop(["Cabin","Name","Ticket", "PassengerId"],inplace=True,axis=1)

age有一百多条数据是空的,需要填上缺失值,我们使用均值来填充,Embarked缺失值不多,直接删掉缺失值

#处理缺失值,填上均值
data["Age"] = data["Age"].fillna(data["Age"].mean())
#删除缺失值
data = data.dropna()

由于决策树只能处理数值型数据,所以需要把性别转成0和1

#将二分类变量转换为数值型变量
data["Sex"] = (data["Sex"]== "male").astype("int")

embarked是三分类的,需要先拿到所有分类,再通过分类的index方法获取索引转成数字

#将三分类变量转换为数值型变量
labels = data["Embarked"].unique().tolist()
data["Embarked"] = data["Embarked"].apply(lambda x: labels.index(x))

数据处理完毕,我们要提取特征和标签,pandas的iloc可以通过索引来分割行列,比如data.iloc[0:5,0:2]表示取5行数据,包含前两列,要取出所有特征可以这么写data.iloc[:,data.columns != "Survived"],data.columns != "Survived"返回一个list当列不等于Survived返回True,这样iloc就会返回True的列,这样就能取出特征了

#取出所有不是Survived的列,即特征
X = data.iloc[:,data.columns != "Survived"]
#取出是Survived的列
y = data.iloc[:,data.columns == "Survived"]

我们来看下数据处理的最终结果,最终留下7个特征,889条数据,全是数值型的

 0   Pclass    889 non-null    int64  
 1   Sex       889 non-null    int32  
 2   Age       889 non-null    float64
 3   SibSp     889 non-null    int64  
 4   Parch     889 non-null    int64  
 5   Fare      889 non-null    float64
 6   Embarked  889 non-null    int64  

训练模型

接下去分隔测试集和训练集来进行模型的训练,由于分隔方法是随机挑选,会把DataFrame的索引打乱,所以需要修正下索引

#分隔测试集,训练集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,y,test_size=0.3)
#修正测试集和训练集的索引
for i in [Xtrain, Xtest, Ytrain, Ytest]:
    i.index = range(i.shape[0])

训练模型,测试模型

clf = DecisionTreeClassifier(random_state=25)
clf = clf.fit(Xtrain, Ytrain)
score_ = clf.score(Xtest, Ytest)

得分

0.7378277153558053

网格搜索调参

import numpy as np

parameters = {'splitter':('best','random')
              ,'criterion':("gini","entropy")
              ,"max_depth":[*range(1,10)]
              ,'min_samples_leaf':[*range(1,50,5)]
              ,'min_impurity_decrease':[*np.linspace(0,0.5,20)]
             }

clf = DecisionTreeClassifier(random_state=25)
GS = GridSearchCV(clf, parameters, cv=10)
GS.fit(X,y)

查看网格搜索推荐参数

GS.best_params_
{'criterion': 'gini',
 'max_depth': 6,
 'min_impurity_decrease': 0.0,
 'min_samples_leaf': 6,
 'splitter': 'best'}

根据推荐参数来训练模型

clf = DecisionTreeClassifier(random_state=25
                            ,criterion = "gini"
                            ,max_depth = 9
                            ,min_impurity_decrease = 0
                            ,min_samples_leaf = 6
                            ,splitter = "best")
clf = clf.fit(Xtrain, Ytrain)
score_ = clf.score(Xtest, Ytest)
score_
0.7640449438202247

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

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

相关文章

通过HBuilderX运行uniapp到微信者开发工具

目录 一、安装开发工具 二、配置运行微信开发者工具 三、异常处理 1.[微信小程序开发者工具] ? Enable IDE Service (y/N) [27D[27C 2. [error] Error: Fail to open IDE 3.[app.json 文件内容错误] app.json: 在项目根目录未找到 app.json 一、安装开发工具 安装HBuil…

如今的就业环境下,怎样才能跻身于高收入的IC行业?

看到不少人失业找工作&#xff0c;其实现在不光是大学生难找工作&#xff0c;在职的人工作也不怎么开心。 要么累&#xff0c;要么没前途。 要么又累又没前途。 总的占个啥吧&#xff0c;现在大家面临的问题就是工作时间越来越久&#xff0c;人际关系也搞得很压抑&#xff0…

初识linux之线程同步与生产者消费者模型

目录 一、线程同步的概念 1. 饥饿状态 2. 同步的概念 二、生产者消费者模型 1. 生产者消费者模型基本概念 2. 生产者、消费者之间的关系 2.1 消费者与消费者的关系 2.2 生产者和生产者的关系 2.3 生产者和消费者的关系 3. “321”原则 4. 消费者与生产者模型的特点 …

C++数据结构:STL

数据结构和算法简介 数据结构 数据结构是相互间存在特定关系的数据的集合&#xff0c;分为逻辑结构和物理结构。 逻辑结构 反映数据元素之间的逻辑关系的数据结构&#xff0c;其中的逻辑关系是指数据元素之间的前后件关系&#xff0c;而与他们在计算机中的存储位置无关 集…

类加载器详解(重点)之双亲委派

回顾一下类加载过程 开始介绍类加载器和双亲委派模型之前&#xff0c;简单回顾一下类加载过程。 类加载过程&#xff1a;加载->连接->初始化。连接过程又可分为三步&#xff1a;验证->准备->解析。 加载是类加载过程的第一步&#xff0c;主要完成下面 3 件事情…

多线程基础

1.多线程基础概念 多线程&#xff1a;让程序同时做多件事情 多线程作用&#xff1a;提高效率 并发&#xff1a;在同一时间&#xff0c;有多个指令在单个cpu上交替执行 并行&#xff1a;在同一时刻&#xff0c;有多个指令在多个cpu上同时执行 2.多线程的实现 (1)继承Thread类…

计算机网络问题

1.网络分层结构及其必要性 五层体系结构&#xff1a; 七层结构&#xff1a; 应用层&#xff1a;网络服务与最终用户的一个接口&#xff0c;常见的协议有&#xff1a;HTTP FTP SMTP SNMP DNS.表示层&#xff1a;数据的表示、安全、压缩。&#xff0c;确保一个系统的应用层所发…

『Linux笔记』Linux设置SSH远程连接Docker容器

Linux设置SSH远程连接Docker容器 文章目录 一. 创建容器二. 进入容器/设置密码三. 安装ssh及修改配置四. 重启ssh服务五. 远程连接六. 提交运行中的容器docker commit参考文章 一. 创建容器 在ubuntu镜像中创建容器&#xff0c;并将docker服务器的60222端口映射到容器的22端口…

如何将Tomcat集成到IDEA中并启动项目?

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 服务器软件&#xff1a;apache-tomcat-8.5.27 目录一、为什么要将Tomcat集成到IDEA里&#xff1f;二、集成步骤2.1 在IDEA中创建Tomcat2.2 创建java的企业级模块&#xff08;动态的we…

同为科技(TOWE)8路RS485通讯智能机柜PDU时序电源管理器

智能PDU电源时序管理器的出现是为了更好地管理数据中心和服务器机房的电源&#xff0c;以提高其可靠性和效率。在传统的机房电力管理中&#xff0c;运维人员需要手动控制每个设备的电源开关和电力分配&#xff0c;这种方式不仅效率低下&#xff0c;而且容易出现操作失误和电源供…

记一次mysql cpu 异常升高100%问题排查

此服务器为一个从库&#xff0c;用于数据的导出业务&#xff0c;服务器配置较低&#xff0c;日常的慢sql也比较多。 上午11点左右cpu异常告警&#xff0c;如下图所示&#xff0c; cpu使用率突增到50%&#xff0c;下午2点左右突增到100% &#xff0c;登录服务器top命令查看cpu升…

基于脚手架@vue/cli 5.0.8搭建vue3项目教程

基于脚手架vue/cli 5.0.8搭建vue3项目教程 前言 前言 脚手架可以快速的帮我们搭建一个项目&#xff0c;而不需要我们从头开始去配置和引入插件&#xff0c;使用脚手架5.0.8版本创建的项目&#xff0c;局部webpack是5.x版本的&#xff0c;因此所有的配置均需要使用支持5.x版本的…

Shader Graph11-Detail Normal Map(法线贴图叠加)

本次我们希望通过叠加两个法线贴图来增加细节。 一、准备资源 我们需要一个模型&#xff0c;1张纹理贴图&#xff0c;2张法线贴图 我们可以在商店下载&#xff0c;这个mesh资源来做这个例子 打开OldWest->VOL3->Meshes&#xff0c;找到SM_Blankets_01c这个布的模型&am…

QoS技术原理

QoS技术的产生 随着网络的不断发展&#xff0c;网络规模及流量类型的不断增加&#xff0c;使得互联网流量激增&#xff0c;产生网络拥塞&#xff0c;增加转发时延&#xff0c;严重时还会产生丢包&#xff0c;导致业务质量下降甚至不可用。所以&#xff0c;要在IP网络上开展这些…

Abaqus 2022最新版下载软件安装包 永久安装包详细安装流程

Abaqus 2022是一套功能强大的工程模拟的有限元软件&#xff0c;其解决问题的范围从相对简单的线性分析到许多复杂的非线性问题。Abaqus包括一个丰富的、可模拟任意几何形状的单元库。并拥有各种类型的材料模型库&#xff0c;可以模拟典型工程材料的性能&#xff0c;其中包括金属…

浏览器网络之TCP与UDP

文章目录 网络模型TCP协议建立连接——三次握手断开连接——四次挥手为什么要三次握手与四次挥手 不常使用的协议——UDPTCP与UDP的区别UDP的使用场景 总结 网络模型 在理解TCP与UDP 之前&#xff0c;首先需要对网络结构有一些基本的认识&#xff0c;在互联网发展的初期&#…

【golang学习笔记】——(二)配置golang vscode开发环境

本次学习采用vscode进行开发&#xff0c;vscode有比较成熟的插件&#xff0c;使用起来比较方便。 一、插件下载 搜索“Go”&#xff0c;第一个插件即为go的开发插件&#xff0c;进行安装即可。 二、go辅助插件下载 使用快捷键&#xff1a;CtrlShiftP 输入Go:Install/Update T…

SpringCloud之组件Hystrix简介

服务雪崩介绍 服务提供者不可用导致服务调用者也跟着不可用&#xff0c;以此类推引起整个链路中的所有微服务都不可用&#xff0c; 服务提供者A因为某种原因出现故障&#xff0c;那么服务调用者服务B依赖于服务A的请求便无法成功调用其提供的接口&#xff0c;假以时日依赖于服务…

电子表格软件能解决什么问题?

在当下的时代&#xff0c;全球经济非常活跃&#xff0c;对于企业来说&#xff0c;经营的成果需要“用数字说话”——以数字来反映经营管理的的状况&#xff0c;这些都离不开报表&#xff0c;可以说报表的需求是无处不在的。 在企业所有的科技类项目中报表是最基本的功能。作为…

第二章:uniapp整合axios之真机测试两问题

第二章&#xff1a;uniapp整合axios之真机测试两问题 上一章节&#xff0c;笔者编写了uniapp整合axios并实现前后端跨域请求的方案&#xff0c;完成了这些基本配置后&#xff0c;在浏览器端的测试基本是可以完成了&#xff0c;但是当笔者将程序运行到手机时&#xff0c;却出现…