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

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

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

数据介绍:

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)
相关推荐
zephyr052 分钟前
DP 从放弃到拿捏:一份持续更新的动态规划题解清单(一)
算法·动态规划
岛雨QA5 分钟前
树结构的基础部分「Java数据结构与算法学习笔记9」
数据结构·算法
会编程的土豆6 分钟前
2.25 做题
数据结构·c++·算法
Frostnova丶17 分钟前
LeetCode 1356. 根据数字二进制下1的数目排序
数据结构·算法·leetcode
GEO行业研究员21 分钟前
AI是否正在重构个体在健康相关场景中的决策路径——基于系统建模与决策链条结构分析的讨论
人工智能·算法·重构·geo优化·医疗geo·医疗geo优化
岛雨QA25 分钟前
哈希表「Java数据结构与算法学习笔记8」
数据结构·算法
独自破碎E29 分钟前
【DFS】BISHI76 迷宫寻路
算法·深度优先
寄存器漫游者37 分钟前
Linux 线程间通信
数据库·算法
毛小茛42 分钟前
计算机系统概论——校验码
学习
岛雨QA1 小时前
查找算法「Java数据结构与算法学习笔记7」
数据结构·算法