使用Python构建CART决策树回归模型

news2024/11/15 10:18:36

数据预处理

此次构建模型是根据泰坦迪克号邮轮票价、乘客性别、船上亲友数量等特征信息来预测乘客存活率的模型,使用的数据集为泰坦尼克数据集,下载地址:taitanic | Kaggle。

在下载完数据集后,可以先试用 ydata_profiling库(原pandas_profiling库)先对数据进行预先分析,找到缺失值和对预测变量存在显著影响的特征值:

from ydata_profiling import ProfileReport
import pandas as pd
 
data = pd.read_csv('C:\\gaygayhappy\\Desktop\\titandick.csv')
df = pd.DataFrame(data)
report = ProfileReport(df)  
report.to_file(output_file='big_dick.html')

在生成的.HTML文件报告中,可以查看数据集中存在的缺失值、均值,最大值等信息 ,还可自动绘制各个示值间的相互作用图和柱形图、热力图

 

建立映射字典

import pandas as pd  # type: ignore
from sklearn.model_selection import train_test_split    # type: ignore
from sklearn.tree import DecisionTreeRegressor, export_graphviz    # type: ignore
from sklearn.metrics import mean_squared_error, r2_score   # type: ignore
import numpy as np      # type: ignore
import graphviz 
import pandas as pd
 
data = pd.read_csv('C:\\gaygayhappy\\Desktop\\titandick.csv')

在训练模型前应当确保下用以训练的特征值中没有字符型出现,可以使用类似R语言因子的方式,创立一个映射字典,将字符型特征值转换为数字特征值

# 打印所有列名  
print(data.columns)

输出: 

 Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype='object')

 其中 Sex 的性别特征为字符型,将字符映射为数字可以进行如下操作:

# 创建映射字典  
sex_mapping = {  
    'male': 0,  
    'female': 1,  
    'gay': 2  
}  
data['Sex'] = data['Sex'].map(sex_mapping)

选择特征和目标变量

# 选择特征和目标变量  
features = data[['Sex', 'Age', 'Pclass', 'Fare', 'Parch']]  
target = data['Survived']

 划分数据集

通常可以将数据划分70%~80%用于训练模型,20%~30%用于测试模型。随机种子为确保模型的复现性设置,并非越大越好。

X_train, X_test, y_train, y_test = train_test_split(features, target,test_size=0.2, random_state=123)

 训练模型前在查看下数据中有误存在缺失值

# 查看数据数否存在NAN值
nan_count = y_train.isnull().sum()  
print(f"NaN values in y_train: {nan_count}") 

模型训练 

model = DecisionTreeRegressor(  
    random_state=123,  
    max_depth=10,  # 限制树的最大深度  
    min_samples_split=4,  # 设置拆分节点所需的最小样本数  
    min_samples_leaf=1  # 设置叶子节点所需的最小样本数  
)  
model.fit(X_train, y_train) 

绘制决策树模型 

dot_data = export_graphviz(model, out_file=None, feature_names=X_train.columns,    
                           filled=True, rounded=True,    
                           special_characters=True) 
graph = graphviz.Source(dot_data)  
graph.render("titanic_tree", format="pdf", cleanup=True) 
display(graphviz.Source(dot_data))

绘制的树模型

 绘制模型特征值的基尼指数

 一般分类决策树中基尼指数用的较多

fig, ax = plt.subplots(figsize=(10, 6))  
viz = FeatureImportances(model, ax=ax)  
viz.fit(X_train, y_train)  
viz.show()

 模型评估

y_pred = model.predict(X_test)    
mse = mean_squared_error(y_test, y_pred)    
r2 = r2_score(y_test, y_pred)   
print(f'Mean Squared Error: {mse}')  
print(f'R^2 Score: {r2}') 
y_pred = model.predict(X_test)

输出:

Mean Squared Error: 0.159004938012737
R^2 Score: 0.35164531942442745

 保存训练好的模型

from joblib import dump, load 
dump(model, 'titanDicks.joblib') 

导入训练好的模型

import pandas as pd  
from sklearn.tree import DecisionTreeRegressor
from joblib import load  
  
# 指定模型文件的路径  
model_path = 'F:\\gayboy\\titanDicks.joblib'   
model = load(model_path)  
  

开始预测

# 建议预测对象
jack = {  
    'Sex': [1],  
    'Age': [24],  
    'Pclass': [3],   
    'Fare': [5],   
    'Parch': [0]   
}  
  
df_predict = pd.DataFrame(jack)
prediction = model.predict(df_predict)    
print(prediction)

 根据预测结果jack必定归西

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

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

相关文章

Codeforces Round 946 (Div. 3) A~G

A.Phone Desktop (枚举) 题意: 小 A A A的手机有一个桌面(或称启动器)。桌面可以由多个屏幕组成。每个屏幕表示为大小为 5 3 5 \times 3 53 的网格,即五行三列。 有 x x x 个应用程序的图标大小为 1 1 1 \times 1 11 个单…

高铁Wifi是如何接入的?

使用PC端的朋友,请将页面缩小到最小比例,阅读最佳! 在飞驰的高铁上,除了窗外一闪而过的风景,你是否好奇过,高铁Wifi信号如何连接的呢? 远动的火车可不能连接光纤吧,难道是连接的卫星…

6.2 Go 切片(Slice)

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

OrangePi AIpro初体验:开启嵌入式开发之旅

概述 随着物联网和智能设备时代的到来,单板电脑因其独特的优势成为创新项目和教育实践的重要工具。在众多单板电脑中,香橙派以其出色的性能和亲民的价格,十分吸引博主这初涉嵌入式开发的新手。博主有幸被CSDN邀请对OrangePi AIpro进行测评。…

Anaconda虚拟环境安装Pybullet

Anaconda虚拟环境安装Pybullet 当直接使用pip install Pybullet的时候出现以下问题: 查看报错信息和CSDN上的许多博客教程,基本都在说与缺少C的依赖有关需要安装几个G的microsoft visual 我尝试使用Conda 包管理器从 conda-forge 通道安装名为 pybulle…

PyTorch自定义张量操作开发指南【CFFI+CUDA】

PyTorch 与 TensorFlow 一起成为深度学习研究人员和从业者的标准。虽然 PyTorch 在张量运算或深度学习层方面提供了多种选择,但一些专门的操作仍然需要手动实现。在运行时至关重要的情况下,应使用 C 或 CUDA 来完成此操作,以支持 CPU 和 GPU …

快团团供货大团长如何打印电子面单?

一、功能说明 快团团打单平台是目前唯一一个服务于快团团团长的打单发货工具,免费提供给团长使用。可帮助团长快速打印面单、分拣包裹、完成发货。 目前快团团打单平台已支持大批量打印快递单、自定义快递面单、自动发货、绑定拼多多电子面单账号等功能&#xff0c…

摸鱼大数据——Hive表操作——复杂类型

1、hvie的SerDe机制 其中ROW FORMAT是语法关键字,DELIMITED和SERDE二选其一。本次我们主要学习DELIMITED关键字相关知识点 如果使用delimited: 表示底层默认使用的Serde类:LazySimpleSerDe类来处理数据。 如果使用serde:表示指定其他的Serde类来处理数据,支持用户自…

香橙派AIpro开发板初体验

香橙派AIpro开发板初体验 一、引言 在当前的AI发展浪潮中,边缘计算逐渐成为了研究的热点。香橙派AIpro开发板作为一款基于昇腾AI技术的开发板,凭借其强大的算力和丰富的接口,为AI边缘计算提供了强大的支持。最近,我也是拿到了官…

揭秘SQL中的公用表表达式:数据查询的新宠儿

欢迎来到我的博客,代码的世界里,每一行都是一个故事 揭秘SQL中的公用表表达式:数据查询的新宠儿 前言公用表表述的概述非递归CTE的作用递归CTE的作用CTE性能优化 前言 你是否曾经为SQL查询的复杂性而困扰不已?尤其是那些读写层子…

数据结构(一)顺序表

目录 一、概念(一)数据结构的三元素1. 逻辑结构(1)线性结构(2)非线性结构 2. 存储结构(1)顺序存储(2)链式存储(3)索引存储 3. 运算 &a…

douyin-vue:使用Vue3、Pinia和Vite5打造高度还原的抖音仿制项目

一:引言 在前端技术日新月异的今天,Vue.js作为一款流行的前端框架,不断吸引着开发者的目光。最近,GitHub上出现了一个备受瞩目的项目——douyin-vue,这是一个基于Vue3、Pinia和Vite5的移动端短视频项目,旨…

CCF20220301——未初始化警告

CCF20220301——未初始化警告 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; #define Max 100000 int x[Max]{0},y[Max]{0}; int main() {int n,k;int cnt1,flag0;cin>>n>>k;for(int i1;i<k;i)cin>>x[i]>>y[i];for(in…

Linux命令 jps(Java Process Status)解释

文章目录 1、第一种解释2、第二种解释3、第三种解释 1、第一种解释 jps 命令本身并不是一个标准的 Unix/Linux 命令&#xff0c;但您可能是想提到 jps 的一个变种或误写了 jps 为 jps&#xff0c;而实际上可能是想提及 jps&#xff08;Java Virtual Machine Process Status To…

虚拟化概述

虚拟存储器(Virtual Memory) 它的基本思想是对于一个程序来说,它的程序(code)、数据(data)和堆栈(stack)的总大小可以超过实际物理内存的大小&#xff1b;操作系统把当前使用的部分内容放到物理内存中&#xff0c;而把其他未使用的内容放到更下一级存储器&#xff0c;如硬盘&a…

通过 coze 快速构建自己的智能体机器人

通过 coze 快速构建自己的智能体机器人 coze 的使用 一&#xff09;coze 是什么 「Coze 扣子」AI Bot 开发平台。任何用户都可以快速、低门槛地搭建自己的 Chatbot&#xff0c;且平台支持用户将其一键发布到飞书、微信公众号、豆包等渠道。 二&#xff09;coze 怎么注册 1. …

安卓ADB通过WIFI无线连接手机[通过无线安装APK]

安卓ADB通过无线连接手机 本文摘录于&#xff1a;https://www.cnblogs.com/zhuxibo/p/14261117.html只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 别人给的操作确实可行,我这里实操记录如下: AdministratorpiaoranPC MINGW64 /e/Wor…

AI RAG的知识满天飞,为什么你还做不出一个像样的AI助手应用

引言 在过去的一年半里&#xff0c;随着大型语言模型&#xff08;LLM&#xff09;的崛起&#xff0c;检索增强生成&#xff08;RAG&#xff09;的概念也逐渐进入公众视野。 从微信公众号到各大自媒体&#xff0c;关于RAG的讨论几乎无处不在。然而&#xff0c;尽管这些高科技名…

小苯的排列构造,小苯的01背包(easy),小苯的01背包(hard)

小苯的排列构造 题目描述 运行代码 #include<bits/stdc.h> using namespace std; typedef long long ll; #define N 1000050 int i,j,k,n,m,t,a[N],b[N],f[N],l[N]; bool v[N]; int main(){cin>>n;for(i1;i<n;i)cin>>a[i];v[0]1;for(i1;i<n;i){if(a[…

apexcharts数据可视化之极坐标区域图

apexcharts数据可视化之极坐标区域图 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式&#xff1a; 基础极坐标区域图单色极坐标区域图 基础极坐标区域图 import ApexChart from react-apexcharts;export function BasicPolar() {// 数据序列const series…