机器学习 | 使用CatBoost处理缺失值

news2024/11/18 7:33:14

数据是任何分析或机器学习的基础。然而,现实世界的数据集并不完美,它们经常包含缺失值,这可能导致任何算法的训练阶段出现错误。处理缺失值至关重要,因为它们可能会导致数据分析和机器学习模型中出现偏差或不准确的结果。处理缺失值的策略包括插补(用估计值或计算值替换缺失值)、删除不完整的记录或使用多重插补等高级技术。处理缺失值是数据清理和准备的一个重要方面,以确保强大和可靠的分析。在本文中,我们将讨论如何使用CatBoost模型处理缺失值。

什么是CatBoost

CatBoost(categorical boosting)是由俄罗斯跨国IT公司Yandex开发的机器学习算法。这种特殊的boosting算法基于梯度提升框架,通过结合有序提升,不经意树和分类变量的高级处理等技术,可以比其他传统的梯度提升算法更有效地处理分类特征,从而以最小的超参数调整实现高性能。CatBoost还有一个内置的超参数(nan_mode)来处理数据集中存在的缺失值,这有助于我们非常有效地处理数据集,而无需执行其他数据预处理。

什么是缺失值?

缺失值是指数据集中某些观测或变量的数据缺失。这些缺失值的出现可能有各种原因,从数据收集过程中的错误到故意遗漏。我们需要非常小心地处理它们,以实现准确的预测模型。常见的缺失值在数据集中以两种方式表示,下面将进行讨论:

  • NaN(Not a Number):在数值数据集中,NaN通常用于表示缺失或未定义的值。NaN是IEEE标准定义的特殊浮点值,通常用于Python等编程语言和NumPy等库。

  • NULL或NA:在数据库系统或统计软件中,NULL或NA可用于表示缺失值。这些只是占位符,表示特定观察数据的缺失。

使用CatBoost处理缺失值

1.导入所需的库

现在我们将导入所有需要的Python库,如NumPy,Pandas,Matplotlib,Seaborn和SKlearn等。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from catboost import CatBoostRegressor, Pool
from sklearn.metrics import mean_absolute_error, r2_score
from sklearn.model_selection import train_test_split

2.数据集加载

现在我们从Kaggle加载一个数据集。然后,我们将其分为训练集和测试集(80:20),并准备分类特征,这些特征将在训练期间提供给CatBoost。

# Load the Kaggle House Prices dataset
data = pd.read_csv('train.csv') # https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data?select=train.csv
# Choose features and target variable
features = data.columns.difference(['SalePrice']) # All columns except 'SalePrice'
target = 'SalePrice'

# Convert categorical features to strings
categorical_features = data[features].select_dtypes(include=['object']).columns
for feature in categorical_features:
	data[feature] = data[feature].astype(str)

# Split data into features and target
X = data[features]
y = data[target]
# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Find categorical features for CatBoost
categorical_features_indices = np.where(X.dtypes == 'object')[0]

Kaggle House Prices数据集已加载并准备好使用这行代码建模。在将分类特征转换为字符串之后,数据被划分为特征(X)和目标变量(y)。使用80-20的比率将数据集进一步划分为训练集和测试集。对于需要在训练过程中描述分类特征的CatBoost模型,变量categorical_features_indices非常有用,因为它指定了分类特征的索引。

探索性数据分析

探索性数据分析(EDA)可以帮助我们更深入地了解数据集。

检查缺失值

这与本文非常相关,对任何数据集都很重要。如果处理不当,缺失值会影响模型的预测。在这里,我们将看到数据集的哪些列包含缺失值和总计数。

# Check for missing values
missing_values = data.isnull().sum().sort_values(ascending=False)
missing_values = missing_values[missing_values > 0]
print("\nColumns with missing values:\n", missing_values)

输出

Columns with missing values:
 PoolQC              1453
MiscFeature     1406
Alley                  1369
Fence                1179
FireplaceQu     690
LotFrontage      259
GarageYrBlt       81
GarageCond     81
GarageType      81
GarageFinish    81
GarageQual      81
BsmtFinType2    38
BsmtExposure   38
BsmtQual           37
BsmtCond          37
BsmtFinType1     37
MasVnrArea        8
MasVnrType         8
Electrical              1
dtype: int64

这段代码计算每一列的空值之和,以检查“data”DataFrame中的缺失值。然后打印列及其相应的计数,但仅针对缺失值大于零的列。这是通过根据缺失值的数量以降序对列进行排序来实现的。

目标变量分布

可视化目标变量的值分布有助于我们了解数据集是否存在任何潜在的错误。在我们的数据集中,目标变量是’SalePrice’。

plt.figure(figsize=(7, 4))
sns.histplot(data['SalePrice'], kde=True, color='forestgreen')
plt.title('Distribution of SalePrice')
plt.show()

在这里插入图片描述
使用Seaborn,此代码生成一个直方图,显示’data’ DataFrame中’SalePrice’变量的分布。当添加kde=True参数时,直方图获得数据分布的平滑描述,从而添加核密度估计图。

模型训练

# Create CatBoost pools for training and testing
train_pool = Pool(data=X_train, label=y_train, cat_features=categorical_features_indices)
test_pool = Pool(data=X_test, label=y_test, cat_features=categorical_features_indices)

# Train the CatBoost model
model = CatBoostRegressor(iterations=100, depth=6, learning_rate=0.1, loss_function='RMSE', nan_mode='Min', verbose=False)
model.fit(train_pool)

为了训练CatBoost模型,我们需要为CatBoost创建训练和测试集,因为它的内部训练优化需要特殊类型的数据集类型,不同于普通的NumPy或pandas数据帧。之后,我们需要指定各种超参数来训练CatBoost模型。在这里,我们还将使用内置的catboost超参数处理缺失值。

  • iterations:该参数设置boosting迭代的总数,即集合中的树的数量。这里我们将它设置为100,这意味着训练过程将创建100个决策树(迭代)。
  • learning_rate:该参数确定梯度提升算法学习的步长,该算法将每个树对最终预测的贡献进行缩放。较小的学习率通常会导致更强大的模型,但需要更多的迭代。
  • depth:这个参数控制决策树的最大深度。更深的树可以捕获更复杂的模式,但它可能会导致过拟合问题。
  • verbose:此参数控制训练期间显示的日志记录和信息的级别,这对于监控训练过程很有用。这里我们将其设置为“False”以保持控制台清晰。
  • loss_function:该参数指定用于在训练期间优化模型的损失函数。它被设置为“RMSE”,因为我们正在执行回归任务。
  • cat_features:分类特征的索引数组。CatBoost会自动对这些特征进行编码以进行训练,并以不同的方式处理它们。
  • nan_mode:这是CatBoost的特殊超参数,用于在模型训练期间内部处理数据集的缺失值。这个超参数有三个值,分别是“Forbidden”、“Min”和“Max”。默认情况下,它接受’Forbidden’并在训练期间引发错误。如果我们将其设置为’Min’,那么它将用相应列的最小值替换所有缺失值。如果我们将其设置为’Max’,那么它将用相应列的最大值替换缺失值。在这里,我们将其设置为“Min”。

模型评估

现在,我们将根据MAE和R2得分来评估我们的模型,这是最常见的回归模型指标。

# Make predictions on the test set
y_pred = model.predict(test_pool)
# Evaluate the model
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f'Mean Absolute Error (MAE): {mae:.2f}')
print(f'R2 Score: {r2:.4f}')

输出

Mean Absolute Error (MAE): 17666.19
R2 Score: 0.9000

此代码使用预先训练的模型(model)对测试集进行预测。然后使用平均绝对误差(MAE)和R平方(R2)分数评估模型对测试数据的性能,这些分数提供了关于模型拟合优度和准确性的信息。

总结

我们可以得出结论,缺失值在现实世界的数据集中非常常见,但我们需要有效地处理它们,因为它们会降低模型的性能。CatBoost有其内置机制来处理训练过程中数据集中的缺失值。我们的模型达到了90%的显著R2分数,这表明缺失值得到了有效处理。但是,我们还可以执行超参数调优以获得更准确的结果。

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

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

相关文章

第5章 HSA内存模型

5.1 引言 在共享内存环境中,独立的控制线程可以竞相修改单个位置。为程序以可预测的方式运行,程序员必须用同步来控制这些竞争。 “内存一致性模型”或“内存模型”定义了并行代理之间通信的基本规则。当这些规则含糊不清地定义或者更糟的是完全不存在…

OpenHarmony教程指南—Ability的启动模式

介绍 本示例展示了在一个Stage模型中,实现standard、singleton、specified多种模式场景。 本实例参考开发指南 。 本实例需要使用aa工具 查看应用Ability 模式信息。 效果预览 使用说明 1、standard模式: 1)进入首页,点击番茄…

Linux ubuntu 写c语言Hello world

文章目录 创建hello.c 文件进入hello.c 文件使用vim 编辑器进行编辑下载gcc 编辑器调用gcc 进行编译hello.c 创建hello.c 文件 touch hello.c进入hello.c 文件 vi hello.c使用vim 编辑器进行编辑 下载gcc 编辑器 sudo apt update sudo apt install gcc第一个语句是更新&am…

政安晨:【深度学习处理实践】(二)—— 最大汇聚运算

最大汇聚运算(Max Pooling Operation)是深度学习领域卷积神经网络常用的一种汇聚运算方式。在卷积神经网络中,经过一系列卷积层和激活函数层后,数据在空间尺寸上逐渐减小,特征图的深度也逐渐增加。为了降低数据尺寸并提…

『python爬虫』requests实战-comicai绘画ai通过cookie签到(保姆级图文)

目录 实现效果实现思路登录查询积分数量签到 实现代码总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 实现效果 实现思路 登录 f12 打开控制台,进入网络清除所有信息后点击登录按钮 通过搜索login(通用写法)…

Spring Boot中实现图片上传功能的两种策略

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

学习Java的第二天

如何使用文本文档在cmd里打印出HelloWorld 1、创建一个文本文档,并命名为HelloWorld,将后缀改为java(需要自己去把后缀打开显示出来) 2、打开编辑 也可以双击打开 3、在里面写出以下代码 上面红框里为你要打印的语句,…

英伟达板子4----存储满了系统黑屏

记录一个bug,因为最近在做边缘端视频处理的内容,就把视频存储在边端设备,但是发现由于边缘端设备的存储太小了,导致把ubuntu端的存储(只有28个Gib)给吃满了。 然后搜了一篇博客说重启就能释放一些空间&…

KONG - API转发流程梳理

kong简介 Kong 是一个开源的API网关,集成了服务注册和发现、负载均衡、健康检查等功能,还可以通过插件来提供限流、熔断、监控、日志等能力, 在kong的微服务架构中,kong担当了注册中心的角色,服务提供者(Provider)首…

【b站咸虾米】ES6 Promise的用法,ES7 async/await异步处理同步化,异步处理进化史

课程地址:【ES6 Promise的用法,ES7 async/await异步处理同步化,异步处理进化史】 https://www.bilibili.com/video/BV1XW4y1v7Md/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 图文地址:https://www.b…

Java 集合类的高级特性介绍

在 Java 编程中,了解集合类的高级特性对于编写高效和可维护的代码至关重要。以下是一些你应该知道的 Java 集合类的高级特性,以及简单的例子来说明它们的用法。 1. 迭代器(Iterators)和列表迭代器(ListIterators&#…

算法归纳【数组篇】

目录 二分查找1. 前提条件:2. 二分查找边界 2.移除元素有序数组的平方长度最小的子数组59.螺旋矩阵II54. 螺旋矩阵 二分查找 参考链接 https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF 1. 前提条件: 数…

git revert 撤回之前的几个指定的提交

文章目录 Intro操作命令-n 选项 参考 Intro 在开发过程中,有的时候一开始只是一个小需求,可以改着改着事情超出了控制,比如说我一开始只是想调整一个依赖包的版本,可是改到后来类库不兼容甚至导致项目无法启动。 这个时候我就想&…

华为OD机试 - 服务器广播 - 矩阵(Java 2024 C卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷…

从数据到智能:探讨大数据在AI领域的核心作用

前言 大数据和人工智能已经成为当今社会的两大热门话题。它们之间究竟有何关系?又如何在各个领域发挥着重要作用? 概念区别与联系 一、大数据与人工智能的基本概念 大数据,顾名思义,指的是海量的、类型繁多的数据集合。这些数据…

万界星空科技MES系统中的车间管理的作用

在了解mes生产管理系统的作用包括哪些方面之前,我们先来了解一下作为生产管理信息化的关键部分,车间管理系统包含哪几个部分:一、mes系统中的车间管理通常包含以下部分: 1、设备管理:用于监控车间内的设备状态&#xf…

【日常聊聊】2024 年 AI 辅助研发趋势

🍎个人博客:个人主页 🏆个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 方向一:AI辅助研发的技术进展 方向二:行业应用案例 方向三: 面临的挑战与机遇 方向四&a…

学习人工智能:吴恩达《AI for everyone》2019 第3周:实现智能音箱和自动驾驶的几个步骤;无监督学习;增强学习

吴恩达 Andrew Ng, 斯坦福大学前教授,Google Brain项目发起人、领导者。 Coursera 的联合创始人和联合主席,在 Coursera 上有十万用户的《机器学习》课程;斯坦福大学计算机科学前教授。百度前副总裁、前首席科学家;谷…

【深度优先】【图论】【C++算法】2045. 到达目的地的第二短时间

作者推荐 视频算法专题 LeetCode2045. 到达目的地的第二短时间 城市用一个 双向连通 图表示,图中有 n 个节点,从 1 到 n 编号(包含 1 和 n)。图中的边用一个二维整数数组 edges 表示,其中每个 edges[i] [ui, vi] 表…

开源分子对接程序rDock使用方法(1)-Docking in 3 steps

欢迎浏览我的CSND博客! Blockbuater_drug …点击进入 文章目录 前言一、Docking in 3 steps 标准对接rDock 的基本对接步骤及注意事项 二、 三步对接案例Step 1. 结构文件准备Step 2. 产生对接位点Step 3. 运行分子对接3.1 检查输入文件3.2 测试-只进行打分3.3 运行…