组队学习——决策树(以泰坦尼克号公共数据集为例)

本次我们挑战的数据集为泰坦尼克号公共数据集,为了降低难度,我们在原有数据集的基础上进行了优化,具体数据集介绍如下:

在这里也介绍一下数据的含义吧

数据介绍:

Survived:是否存活(label)

Pclass(用户阶级):1 - 1st class,高等用户;2 - 2nd class,中等用户;3 - 3rd class,低等用户;

Name(名字)

Sex(性别)

Age(年龄)

Siblings/Spouses Aboard:描述了泰坦尼克号上与乘客同行的兄弟姐妹(Siblings)和配偶(Spouse)数目;

Parents/Children Aboard:描述了泰坦尼克号上与乘客同行的家长(Parents)和孩子(Children)数目;

Fare(乘客费用)

第一步:导入必要的库

python 复制代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report

第二步:加载并分析数据

观察是否有缺失值和异常值(异常值需要根据具体的题目条件来判断),若有缺失值和异常值进行第三步数据预处理

python 复制代码
# 加载数据集
path = "E:\\Jupyter Workspace\\数学建模\\titanic.csv"
data = pd.read_csv(path)

# 显示数据的前几行
data.head()
# 查看数据的详细信息
data.info()

第三步:数据预处理

首先删除不必要的特征如名字(可能有用,比如有些人名在那个时代只有贵族能用或者只有穷人能用,但本体不考虑这些因素)

python 复制代码
# 删除不需要的特征
data = data.drop(["Name"], axis=1)

若有缺失值可以进行如下操作,如用中位数填充

python 复制代码
# 填充数值特征的缺失值
data["Age"].fillna(data["Age"].median(), inplace=True)
data["Fare"].fillna(data["Fare"].median(), inplace=True)

若遇到分类变量特征,可以进行独热编码

python 复制代码
# 对分类特征进行独热编码
data = pd.get_dummies(data, columns=["Sex"], drop_first=True)

思考一下:分类变量分类为两类的时候可以drop_first,那如果100类呢?该采用哪些方法来处理这个分类变量特征呢?

第四步:划分自变量(X)和因变量(y)

python 复制代码
# 分割数据为特征(X)和目标(y)
X = data.drop("Survived", axis=1)
y = data["Survived"]

第五步:训练模型

在训练模型之前,需要将数据集划分为训练集和测试集(本题由于没有要预测的部分,就把数据集中0.2比例的验证集当做测试集进行模型的验证)

python 复制代码
# 将数据集分割为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

在放入模型前,先对上述特征进行标准化处理(大家思考一下这个操作是为什么呢?)

python 复制代码
# 特征标准化处理
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

创建决策树模型分类器进行训练

python 复制代码
# 创建决策树分类器并进行训练
model2 = DecisionTreeClassifier(random_state=42)
model2.fit(X_train, y_train)

第六步:模型的性能指标评价

python 复制代码
# 在测试数据上进行预测
y_pred = model2.predict(X_test)

# 计算准确性
accuracy = accuracy_score(y_test, y_pred)
print("模型准确性:", accuracy)

# 生成分类报告
report = classification_report(y_test, y_pred)
print("分类报告:\n", report)
相关推荐
jz_ddk2 小时前
[实战]调频(FM)和调幅(AM)信号生成(完整C语言实现)
c语言·算法·信号处理
CloudAce云一3 小时前
谷歌云代理商:谷歌云TPU/GPU如何加速您的AI模型训练和推理
算法
轻语呢喃3 小时前
每日LeetCode : 杨辉三角
javascript·后端·算法
萝卜青今天也要开心3 小时前
2025年上半年软件设计师考后分享
笔记·学习
amazinging4 小时前
北京-4年功能测试2年空窗-报培训班学测开-第四十七天
python·学习·selenium
YuTaoShao4 小时前
【LeetCode 热题 100】148. 排序链表——(解法二)分治
java·算法·leetcode·链表
Shilong Wang4 小时前
三维旋转沿轴分解
算法·计算机视觉·机器人
吃货界的硬件攻城狮4 小时前
【STM32 学习笔记】SPI通信协议
笔记·stm32·学习
一个天蝎座 白勺 程序猿4 小时前
Python练习(1)Python基础类型操作语法实战:20道实战题解与案例分析(上)
开发语言·python·学习
ygming4 小时前
Q43- code973- 最接近原点的 K 个点 + Q44- code347- 前 K 个高频元素
前端·算法