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

news/2024/5/19 21:25:49/

泰坦尼克号幸存者数据集是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    float646   SibSp        891 non-null    int64  7   Parch        891 non-null    int64  8   Ticket       891 non-null    object 9   Fare         891 non-null    float6410  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    float643   SibSp     889 non-null    int64  4   Parch     889 non-null    int64  5   Fare      889 non-null    float646   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 npparameters = {'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.ppmy.cn/news/48449.html

相关文章

Go Etcd

基本操作 go get go.etcd.io/etcd/client/v3# 此处使用的 版本是&#xff1a; # go.etcd.io/etcd/client/v3 v3.5.8这里使用的是 "go.etcd.io/etcd/client/v3" 而不是 "go.etcd.io/etcd/clientv3" 我们不使用 etcd/clientv3&#xff0c;因为它与grpc 最新…

实战:快速实现iOS应用中集成即时通讯IM和UI

准备 熟练objective-c语言 有一台mac电脑,并安装了xcode 和 cocoapods 目标 手把手教大家在iOS应用中集成即时通讯IM 功能 内容篇幅较长,需要内心平和耐心看下去,务必戒躁.阅读本文并按照本文进行对接预计时长2小时 注册Appkey和username 本教程以集成环信IM为例 注册环信…

Rhodamine-PEG-NH2,罗丹明-聚乙二醇-氨基的结构式,一文了解RB-PEG-NH2的使用

RB-PEG-NH2,罗丹明-聚乙二醇-氨基 中文名称&#xff1a;罗丹明-聚乙二醇-氨基 英文名称&#xff1a;RB-PEG-NH2 性状&#xff1a;粉红色/红色固体或者粘稠液体&#xff0c;取决于分子量大小。 溶剂&#xff1a;溶于水和常规性有机溶剂 激发/发射波长&#xff1a;570nm/590…

NetSuite Sublist解释

今朝汇编一下Sublist主题的知识点以备忘。 2个数据源类型 Related Record - 以Saved Search建立的关联记录&#xff1b;Child Record - 父子表&#xff1b; 1. Related Record Saved Search关键点 这种形式的Sublist是利用Saved Search作为Sublist的数据源&#xff0c;将某…

10万字智慧政务大数据治理平台解决方案(word)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 1 项目整体建设规划方案 按照《省人民政府关于推进数字政府建设的指导意见》(鄂政发(2019) 4号&#xff09;的规则要求&#xff0c;结合XX市“互联网政府服务”建设现状&am…

SQL97 返回顾客名称和相关订单号以及每个订单的总价

描述 Customers 表有字段&#xff0c;顾客名称&#xff1a;cust_name、顾客id&#xff1a;cust_id cust_idcust_namecust10andycust1bencust2tonycust22tomcust221ancust2217hex Orders订单信息表&#xff0c;含有字段&#xff0c;订单号&#xff1a;order_num、顾客id&…

核心业务9:还款业务实现和首页信息展示的完善

核心业务9:还款业务实现 1.还款业务前端 2.还款业务流程图 3.汇付宝接口调用 4.尚融宝接口调用 5.首页信息展示的完善 6.资金记录展示 核心业务9:还款业务实现 1.还款业务前端 按钮 pages/lend/_id.vue

探索Qt图像处理的奥秘:从入门到精通

探索Qt图像处理的奥秘&#xff1a;从入门到精通&#xff08;Exploring the Secrets of Qt Image Processing: From Beginner to Expert&#xff09; 引言&#xff1a;Qt图像处理的概述和应用&#xff08;Introduction: Overview and Applications of Qt Image Processing&#…

C++游戏分析与破解方法介绍

1、C游戏简介 目前手机游戏直接用C开发的已经不多&#xff0c;使用C开发的多是早期的基于cocos2dx的游戏&#xff0c;因此我们这里就以cocos2d-x为例讲解C游戏的分析与破解方法。 Cocos2d-x是一个移动端游戏开发框架&#xff0c;可以使用C或者lua进行开发&#xff0c;也可以混…

机器学习 day06(向量化应用于多元线性回归的梯度下降算法,正规方程)

1. 向量化多元线性回归&#xff0c;及梯度下降算法 将W₁&#xff0c;…&#xff0c;Wn写成向量W&#xff0c;将X₁&#xff0c;…&#xff0c;Xn写成向量X&#xff0c;而b还是之前的b注意&#xff1a;在多元线性回归的梯度下降算法中&#xff0c;Wj是指从W₁到Wn中的某一项&…

通识哈夫曼树及其应用,一起来构造属于自己的哈夫曼树

1.哈夫曼树的背景 哈夫曼&#xff08;霍夫曼、赫夫曼&#xff09;David Albert Huffman(August9,1925-October7,1999)。计算机科学的先驱&#xff0c;以他的哈夫曼编码闻名&#xff0c;在他的一生中&#xff0c;对于有限状态自动机&#xff0c;开关电路&#xff0c;异步过程和信…

死磕“增长”:火山引擎的实用主义

作者 | 曾响铃 文 | 响铃说 在刘慈欣的科幻小说《三体》中&#xff0c;地外文明为了封锁地球科技&#xff0c;在天文台向地球科学家展现了「宇宙闪烁」这一奇观&#xff0c;试图颠覆人类的认知&#xff0c;从而影响科技进步&#xff0c;促使地球科技发展陷入停滞。 如今&…

playwright实战篇(tx、ali225)

人人都笑金角&#xff0c;人人都是金角推荐文章&#xff1a; 1、https://playwright.dev/python/docs/api/class-playwright //官方文档 2、https://cuiqingcai.com/36045.html //崔庆才教程 3、https://github.com/qqq732004709/ //实战参考 4、https://www.cnblogs.com/ca…

4.17~4.18学习总结

网络编程 概述 1.什么是网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输&#xff0c;计算机跟计算机之间可以通过网络进行数据传输。 2.常见的软件架构&#xff1a; B/S&#xff0c;C/S 3.通信的软件架构CS BS各有什么区别和优点…

java 快排算法详解,java 快排代码

快排是一种高效的数据结构&#xff0c;它使用一个关键字&#xff08;Key&#xff09;来表示数据元素的一个集合。也就是说&#xff0c;快排是一个有序数组&#xff0c;而这个有序数组由两个元素组成。 快排的基本思想是&#xff1a;如果数组元素的值比它前面的两个元素都大&…

一文搞懂Java中的异常问题

思考几个问题 1&#xff1a;JavaWeb系统中&#xff0c;我的代码未做任何处理&#xff0c;报错了还会往下执行吗&#xff1f; 2&#xff1a;JavaWeb系统中&#xff0c;我的代码做了 try catch finally, 报错了还会往下执行吗&#xff1f; 3&#xff1a;JavaWeb系统中&#xff0c…

制造业数字化转型评价指标体系构建与应用

数字化转型的过程不是机械简单性的线性组合&#xff0c;而是由一系列分叉、突变、自组织等复杂行为组成&#xff0c;是一个复杂性系统演变的过程。 本文从架构的理念出发&#xff0c;构建制造业数字化转型架构&#xff0c;并基于参考架构给出评估制造业数字化转型发展过程的评估…

mulesoft MCIA破釜沉舟备考 2023.04.19.19

mulesoft MCIA破釜沉舟备考 2023.04.19.19 1. A Kubernetes controller automatically adds another pod replica to the resource pool in response to increased application load.2. According to MuleSoft, what is a major distinguishing characteristic of an applicati…

Spring中最常用的11个扩展点

一说到spring&#xff0c;可能第一个想到的是 IOC&#xff08;控制反转&#xff09; 和 AOP&#xff08;面向切面编程&#xff09;。 它们是spring的基石&#xff0c;得益于它们的优秀设计&#xff0c;使得spring能够从众多优秀框架中脱颖而出。 除此之外&#xff0c;我们在使…

采用自底向上的方法构造大根堆

文章目录 采用自底向上的方法构造大根堆程序设计程序分析采用自底向上的方法构造大根堆 【问题描述】用自底向上算法为一组整数构造一个大根堆。 【输入形式】第一行输入一个不为0的整数n,第二行输入需要构造堆的n个整数; 【输出形式】创建好的大根堆; 【样例输入】 6 2 9 7…