【1 - 决策树 - 案例部分:泰坦尼克号幸存者预测】菜菜sklearn机器学习

news2024/10/6 1:41:35

课程地址:《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili

  • 第一期:sklearn入门 & 决策树在sklearn中的实现
  • 第二期:随机森林在sklearn中的实现
  • 第三期:sklearn中的数据预处理和特征工程
  • 第四期:sklearn中的降维算法PCA和SVD
  • 第五期:sklearn中的逻辑回归
  • 第六期:sklearn中的聚类算法K-Means
  • 第七期:sklearn中的支持向量机SVM(上)
  • 第八期:sklearn中的支持向量机SVM(下)
  • 第九期:sklearn中的线性回归大家族
  • 第十期:sklearn中的朴素贝叶斯
  • 第十一期:sklearn与XGBoost
  • 第十二期:sklearn中的神经网络

目录

问题描述

数据集 

代码

(一)导入数据集,探索数据 

(二)对数据集进行预处理 

(三)提取标签和特征矩阵,分测试集和训练集 

(四)导入模型 

(五)在不同max_depth下观察模型的拟合状况 

(六)用网格搜索调整参数

测试并提交Kaggle


问题描述 

Titanic - Machine Learning from Disaster | Kaggle

通过分类树模型来预测一下哪些人可能成为幸存者(二分类问题,Survived为1即为幸存者,为0则不是幸存者) 


数据集 

数据集包含两个csv格式文件,data为我们要使用的数据(既有特征又有标签,可以来训练和测试),test为kaggle提供的测试集(无标签)

data.csv(11个特征列,1个标签列)


代码

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt

(一)导入数据集,探索数据 

data = pd.read_csv(r"D:\Jupyter Notebook\菜菜sklearn\1 决策树\Taitanic\data.csv")  # 891行,12列(11列特征,1列标签)
data.head()   # 显示前n行,不写n的话默认为5

data.info()   # 观察特征的类型、是否有缺失值

  • Cabin列缺失过多,Name列、Ticket列、PassengerId列和预测的y没有关系,删
  • Age列有小部分缺失,采用平均值填充
  • Embarked列有2行缺失,删

(二)对数据集进行预处理 

#删除缺失值过多的列,和观察判断来说和预测的y没有关系的列
data.drop(["Cabin","Name","Ticket","PassengerId"],inplace=True,axis=1)   # inplace=True意味着用删除列后的表覆盖原表,默认为False。axis=1意味着对列进行操作
# 或写成:data = data.drop(["Cabin","Name","Ticket"],inplace=False,axis=1)

#处理缺失值,对缺失值较多的列进行填补,有一些特征只确实一两个值,可以采取直接删除记录的方法
data["Age"] = data["Age"].fillna(data["Age"].mean())  # .fillna(0)表示用0填补
data = data.dropna()   # 删掉所有有缺失值的行(默认axis=0)

#将分类变量转换为数值型变量

#将二分类变量转换为数值型变量
#astype能够将一个pandas对象转换为某种类型,和apply(int(x))不同,astype可以将文本类转换为数字,用这个方式可以很便捷地将二分类特征转换为0~1
data["Sex"] = (data["Sex"]== "male").astype("int")   # 返回True为1,False为0

#将三分类变量转换为数值型变量
labels = data["Embarked"].unique().tolist()   # .unique()删掉重复值,查看特征里有多少唯一值
data["Embarked"] = data["Embarked"].apply(lambda x: labels.index(x))   # 匿名函数,S—>0,C—>1,Q—>2

(三)提取标签和特征矩阵,分测试集和训练集 

X = data.iloc[:,data.columns != "Survived"]
y = data.iloc[:,data.columns == "Survived"]

# data.loc[:,'sex']  所有行,sex列
# data.iloc[:,3]  所有行,sex列(索引为3)
# 布尔索引用loc和iloc都行

from sklearn.model_selection import train_test_split
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])  # range(622),即0-621
调整索引

(四)导入模型 

clf = DecisionTreeClassifier(random_state=25)
clf = clf.fit(Xtrain, Ytrain)

score_ = clf.score(Xtest, Ytest)
score_   # 0.8127340823970037

score = cross_val_score(clf,X,y,cv=10).mean()
score  # 0.7739274770173645

(五)在不同max_depth下观察模型的拟合状况 

tr = []
te = []
for i in range(10):
    clf = DecisionTreeClassifier(random_state=25
                                 ,max_depth=i+1
                               # ,criterion="entropy"  # 当模型欠拟合时用
                                )
    clf = clf.fit(Xtrain, Ytrain)
    score_tr = clf.score(Xtrain,Ytrain)
    score_te = cross_val_score(clf,X,y,cv=10).mean()
    tr.append(score_tr)
    te.append(score_te)
print(max(te))

# 若train曲线在test上,说明模型过拟合,需要剪枝
# 若test曲线在train上,说明模型欠拟合
plt.plot(range(1,11),tr,color="red",label="train")
plt.plot(range(1,11),te,color="blue",label="test")
plt.xticks(range(1,11))  # 显示横坐标的标尺(1-10的整数)
plt.legend()
plt.show()

clf模型里一开始criterion参数默认为gini时,结果如下:

改为entropy时,结果如下:

(六)用网格搜索调整参数

网格搜索是能够帮助我们同时调整多个参数的技术,本质为枚举 —— 给网格搜索提供一个字典,字典中是一组一组的参数,对应参数的取值范围;调整参数在这些取值范围里的取值,最终返回能让模型达到最好的取值范围的组合。

缺点:多个参数交叉进行,计算量大,耗时,且无法舍弃你设定的参数 

import numpy as np

# gini系数取值范围为0-0.5,entropy取值范围为0-1
gini_thresholds = np.linspace(0,0.5,20)  # 在0-0.5之间取20个有顺序的随机数,但不一定等间距
# np.arange(0,0.5,0.01) 等间距

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)  # 同时满足fit、score和交叉验证三种功能
GS.fit(Xtrain,Ytrain)

GS.best_params_  # 从我们输入的参数和参数取值的列表中返回最佳组合

GS.best_score_    # 网格搜索后模型的评判标准


测试并提交Kaggle

test = pd.read_csv(r"D:\Jupyter Notebook\菜菜sklearn\1 决策树\Taitanic\test.csv")

test.info()

test.drop(["Cabin","Name","Ticket","PassengerId"],inplace=True,axis=1)   
test["Age"] = test["Age"].fillna(data["Age"].mean()) 
test = test.dropna()   # 删掉了Fare缺失的那一行

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

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

result = GS.predict(test)   # nd.array()
df = pd.DataFrame(result)
df.to_csv("result.csv")

Score有点低

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

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

相关文章

Spring RCE漏洞CVE-2022-22965复现与JavaFx GUI图形化漏洞利用工具开发

文章目录前言一、漏洞描述二、影响范围三、漏洞复现3.1 漏洞poc四、修复建议五、图形化工具开发-Rexbb简介与使用5.1 工具使用总结前言 换了新工作,年底了比较多自学的时间,所以把今年比较经典的漏洞给复现一下,之前因为没空,只复…

python--PyCHarm里代码整体向左/右缩进

1、PyCharm 里代码整体向左缩进 鼠标选中多行代码,同时按住 Shift Tab 键,实现一次向左缩进4个字符。 2、PyCharm 里代码整体向右缩进 鼠标选中多行代码,按下 Tab 键,实现一次向右缩进4个字符。 3、PyCharm 里光标变粗 光标…

信创大提速,企业如何在高速行驶中更换“发动机”?

导读:信创替代如何平滑迁移不“翻车”? 经过多年发展,中国信创产业迎来全面提速。 2022年国家下发的79号文中,全面给出了国资信创产业发展与进度的指导,要求到2027年央企国企100%完成信创替代,替换范围涵盖…

SprintBoot实战(十一)集成 xxl-job

目录1.简介2.Maven依赖3.初始化数据库4.调度中心配置5.执行器配置6.项目结构7.访问页面8.新建定时任务9.BEAN运行模式10.GLUE(Java)运行模式1.简介 xxl-job: 是一个分布式任务调度平台。平台架构分为 “调度中心” 和 “执行器”。调度中心类似定时任务的注册中心&a…

SuperMap iDesktop 之 BIM优化流程——建筑篇

kele 一、背景介绍 BIM数据是三维系统中的常客,它具有信息完备性、信息关联性、信息一致性、 可视化、协调性、模拟性、优化性和可出图性八大特点,广受人们喜爱,但这也使得它自身数据量庞大,在项目中展示效果不尽人意&#xff0c…

SegeX MemDialog:封装好的内存对话框(非资源对话框)说明

----哆啦刘小洋 原创,转载需说明出处 2022-12-27 SegeX MemDialog1 简介2 源文件清单3 快速测试4 实现基本原理5 主要功能6 使用方法6 .1 简单界面6.2 复杂界面1 简介 SegeX组件之一:SegeX MemDialog,应用级内存对话框封装类。源码首次公开。…

IEC 60598-2-22-2021 灯具 第2-22部分- 特殊要求-应急照明灯具.

2021年12月6日,国际电工委员会发布标准IEC 60598-2-22:2021《灯具-第2-22部分:特殊要求-应急照明灯具》。IEC 60598-2-22:2021标准以IEC 60598-2-22:2021 RLV标准的形式提供,包含国际标准及其红线版本,内容显示了与前一版本相比对…

tensorflow06——正则化缓解过拟合

正则化主要是在损失函数中引入了第二个部分,模型复杂度,具体就是对w参数赋予了权值,并求和,再乘上一个超参数。 (利用给w加上权值,弱化训练数据的噪声) 大概可以理解为这个意思假设模型有两个参…

从0-1搭建流媒体系统之ZLMediaKit 安装、运行、推流、拉流

音视频开发系列 文章目录音视频开发系列前言一、ZLMediaKit是什么?二、使用过程1.编译、安装、运行2.推流、拉流总结前言 目前、比较有名的流媒体服务器有ZLMediaKit、srs、live555、eadydarwin等。因为srs是单线程服务、对于多核服务器的支持需要通过部署多个服务…

蓝牙学习七(MAC地址)

1.简介 一个BLE设备,可以使用两种类型的地址(一个BLE设备可以同时具备两种地址):Public Device Address(公共设备地址)和Random Device Address(随机设备地址)。而Random Device Add…

如何用 java 实现【二叉搜索树】

文章目录搜索树概念1. 查找操作2. 插入操作3. 删除操作4. 以上三种操作的测试5. 性能分析搜索树概念 二叉搜索树 又称 二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的 左 子树 不为空,则 左 子树上所有节点的值…

自定义神经网络入门-----Pytorch

文章目录目标检测的相关评价指标IoUmAP正例和负例准确率P召回率R准确率ACCP-R曲线--APnn.Module类全连接层感知机类使用nn.Sequential进行构造使用randn函数进行简单测试损失函数nn.functionalnn.optim模型处理网络模型库torchvision.models模型Fine-tune和save参考目标检测的相…

【STM32F4系列】【HAL库】【自制库】模拟IIC从机

介绍 本项目是利用GPIO模拟I2C的从机 网上常见的是模拟I2C主机 本项目是作为一个两个单片机之间低速通信的用法 协议介绍请看,传送门 模拟主机请看这里 从机 功能 实现I2C从机端读写寄存器 编程思路 I2C的从机实现比起主机来麻烦一些 因为SCL的时序是由主机发送,从机需…

【nowcoder】笔试强训Day12

目录 一、选择题 二、编程题 2.1二进制插入 2.2 查找组成一个偶数最接近的两个素数 一、选择题 1.以下方法,哪个不是对add方法的重载? public class Test {public void add( int x,int y,int z){} } A. public int add(int x,int y,float z){return 0;} B.…

Go语言设计与实现 -- WaitGroup, Once, Cond

WaitGroup 我们可以通过 sync.WaitGroup 将原本顺序执行的代码在多个 Goroutine 中并发执行,加快程序处理的速度。 我们来看一下sync.WaitGroup的结构体: type WaitGroup struct {//保证WaitGroup不会被开发者通过再赋值的方式复制noCopy noCopy// 64-…

重学redux之Redux-Thunk高级使用(三)

这是第三篇了,哥们,如果没看过前两篇,可以去看看之前的两篇,有基础的可以直接看,不多说,直接开讲 默认情况下,Redux 的动作是同步调度的,对于任何需要与外部 API 通信或执行副作用的应用程序来说都是一个问题。 Redux 允许中间件位于被分派的动作和到达 reducer 的动…

抖音本地生活的蓬勃发展,离不开服务商的推波助澜

抖音本地生活,已经势不可挡01 抖音公布本地生活成绩单,交易额增长30倍抖音经过6年时间的演变,产品功能日益丰富,已经从内容消费,延续到线上购物、线下团购等领域,从最初的记录美好生活,成为一种…

统计分析工具-FineReport配置SQL Server外接数据库(2)

1. 配置外接数据库 1.1 外接数据库配置入口 外接数据库的配置入口,有三种形式: 1)超级管理员第一次登录数据决策系统时,即可为系统配置外接数据库。如下图所示: 2)对于使用内置数据库的系统,管…

站点能源低碳目标网,助力网络碳中和 | 华为发布站点能源十大趋势

2022年12月29日,华为今天举办站点能源十大趋势发布会并重磅发布白皮书。发布会上,华为站点能源领域总裁尧权全面解读了能源数字化、低碳网络、站点供电绿色化等站点能源十大趋势。 尧权表示,2022年是不平凡的一年,全球能源危机背…

十、通过网络服务将esp8266引脚状态显示在网页中

ESP8266在服务器模式运行时,我们可以使用浏览器来显示它的引脚状态。 1、实现目标 学习如何通过esp8266建立基本网站,在该网站上实时显示esp8266的引脚值。 2、原理图 FLASH按键与D3引脚连接,可以通过FLASH按键改变D3引脚的电平。当没有按…