前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python人工智能:Python决策树分类算法实现示例——基于泰坦尼克号生存者数据集

Python人工智能:Python决策树分类算法实现示例——基于泰坦尼克号生存者数据集

作者头像
用户1143655
发布2023-03-21 20:17:20
1.1K0
发布2023-03-21 20:17:20
举报
文章被收录于专栏:全栈之殇

一、泰坦尼克号数据集的获取、查看与预处理

1.1 数据集的获取

  • (1) 本文使用的泰坦尼克号数据集的Kaggle官网下载地址为:📊 Titanic - Machine Learning from Disaster,如果注册成功了Kaggle账户的可以直接下载,但是如果没有注册Kaggle账户的下载时会遇到问题。
  • (2) 为此,也可以通过下面的百度网盘链接下载,链接为:🗃️ 链接: https://pan.baidu.com/s/15U0JS2lOZ3f3aDrZbJD33Q?pwd=4ckq,提取码: 4ckq。

✨ 注意:本文仅使用其中的train.csv文件。

1.2 数据的读取与信息查看

通常,数据的读取与信息查看的python函数主要包括如下三个:

  • (1) pandas.read_csv()函数:读取数据;
  • (2) head()函数:查看数据的前5行,用于了解数据的整体结构;
  • (3) info()函数:查看数据的整体统计信息。

读取train.csv数据的python代码:

代码语言:javascript
复制
import pandas as pd

train_data = pd.read_csv('./titanic/train.csv')

查看数据的前5行:

代码语言:javascript
复制
train_data.head()

本文以Survived列,即以是否存活为目标值。

查看数据的整体统计信息:

代码语言:javascript
复制
train_data.info()

1.3 数据预处理

  • (1) 特征筛选

由于乘客姓名Name、乘票信息Ticket与客舱名称Cabin特征对于乘客的存活影响很小,所以下面首先将其从train_data中剔除:

代码语言:javascript
复制
train_data.drop(
    ['Cabin', 'Name', 'Ticket'],    # 需要删除的列
    inplace=True,                   # 替换原始数据
    axis=1                          # 对列进行操作
)

train_data.head()
  • (2) 缺失值处理

此时可以通过下面的命令查看train_data是否存在缺失值:

代码语言:javascript
复制
print(train_data.isnull().any())

由此可以看出Age乘客年龄特征与Embarked登船港口特征具有缺失值。下面通过下面的命令处理缺失值:

代码语言:javascript
复制
# 使用所有乘客的平均年对年龄特征进行缺失值填充
train_data['Age'] = train_data['Age'].fillna(
    train_data['Age'].mean()
)

# 删除Embarked属性具有缺失值的行
train_data = train_data.dropna()
  • (3) 数据类型转换

由于决策树无法处理字符串,下面将字符串的特征转换为数值形式。此时,具有字符串的特征属性包括性别属性Sex与登船港口属性Embarked,我们可以通过下面命令查看这两个属性包括的类别:

代码语言:javascript
复制
print("性别具有的类别:", train_data['Sex'].unique())
print("登船的港口类别:", train_data['Embarked'].unique())

由此,可以看出性别属性Sex具有两类,登船的港口属性Embarked具有三类。下面对这两个属性进行如下操作:

  • 对性别特征Sex的处理代码:
代码语言:javascript
复制
# 将性别属性Sex转为0,1整形数据,1表示男性,0表示女性
train_data["Sex"] = (train_data['Sex'] == "male").astype("int")
  • 对登船港口特征Embarked的处理代码:
代码语言:javascript
复制
# 首先将登船港口类别转换为列表格式
labels = train_data['Embarked'].unique().tolist()
# 然后获取每个登船港口类型的index值,并将其存储到train_data中
train_data["Embarked"] = train_data["Embarked"].apply(
    lambda x: labels.index(x)
)

此时,数据已经处理完毕,可以通过train_data.head()命令查看数据信息,以确认数据的情况。

由上图可以看出Sex与Embarked属性均已经处理妥当。

为了能够使用sklearn库进行决策树设计,这里需要将预处理后的数据集train_data划分为观测数据X(特征值)与目标值y(存活状况),代码如下所示:

代码语言:javascript
复制
X = train_data.loc[:, train_data.columns != "Survived"]
y = train_data.loc[:, train_data.columns == "Survived"]

至此,我们就可以着手设计决策树分类算法了。

二、决策树分类算法的实现

本文使用sklearn库进行决策树分类算法的实现,主要包括如下几个步骤:

  • (1) 将数据集划分为训练数据集与测试数据集;
  • (2) 实例化决策树模型;
  • (3) 网格搜索技术调整决策树超参数。

!! ✨ 网格搜索:通过枚举技术对多个参数进行优化分析,以提高模型的预测精度。sklearn提供了GridSearchCV方法,其集成了拟合训练(fit)、性能评价(score)以及交叉验证(cross_val_score)三个步骤的类方法,最终返回超参数网格parameters搜索后的最佳模型,通过它可以方便地寻找出模型的最佳超参数。

代码如下所示:

代码语言:javascript
复制
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.model_selection import GridSearchCV
import numpy as np

# (1) 将数据集划分为训练数据集与测试数据集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3
)

# 由于train_test_split会对数据集进行随机排序,
# 为了防止后续数据分析出现混乱,使用如下代码将
# 索引变成顺序索引
for i in [X_train, X_test, y_train, y_test]:
    i.index = range(i.shape[0])

# (2) 实例化决策树模型
clf = DecisionTreeClassifier()

# (3) 网格搜索技术调整决策树超参数
# 设置超参数搜索网格参数
parameters = {
    "criterion": ("gini", "entropy"),
    "splitter": ("best", "random"),
    "max_depth": [*range(1,10)],
    "min_samples_leaf": [*range(1, 30, 3)],
    "min_impurity_decrease": [*np.linspace(0, 0.5, 20)]
}

# 使用GridSearchCV对超参数网格parameters进行网络搜索,
# 并以10折交叉验证方法得到评价结果
GS = GridSearchCV(clf, parameters, cv=10)   # 实例化网格搜索对象
GS = GS.fit(X_train, y_train)   # 对训练数据集进行训练

# 返回最佳超参数组合
print("\n最佳的超参数组合:\n", GS.best_params_)
# 返回最佳的模型评价结果
print("\n最佳的分类评价结果:\n", GS.best_score_)

最佳的预测结果为80.7%。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、泰坦尼克号数据集的获取、查看与预处理
  • 二、决策树分类算法的实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档