办个网站需要投资多少,北京网站设计优选刻,深圳营销型网页设计公司,wordpress数据放在哪里数据是任何分析或机器学习的基础。然而#xff0c;现实世界的数据集并不完美#xff0c;它们经常包含缺失值#xff0c;这可能导致任何算法的训练阶段出现错误。处理缺失值至关重要#xff0c;因为它们可能会导致数据分析和机器学习模型中出现偏差或不准确的结果。处理缺失…数据是任何分析或机器学习的基础。然而现实世界的数据集并不完美它们经常包含缺失值这可能导致任何算法的训练阶段出现错误。处理缺失值至关重要因为它们可能会导致数据分析和机器学习模型中出现偏差或不准确的结果。处理缺失值的策略包括插补用估计值或计算值替换缺失值、删除不完整的记录或使用多重插补等高级技术。处理缺失值是数据清理和准备的一个重要方面以确保强大和可靠的分析。在本文中我们将讨论如何使用CatBoost模型处理缺失值。
什么是CatBoost
CatBoostcategorical boosting是由俄罗斯跨国IT公司Yandex开发的机器学习算法。这种特殊的boosting算法基于梯度提升框架通过结合有序提升不经意树和分类变量的高级处理等技术可以比其他传统的梯度提升算法更有效地处理分类特征从而以最小的超参数调整实现高性能。CatBoost还有一个内置的超参数nan_mode来处理数据集中存在的缺失值这有助于我们非常有效地处理数据集而无需执行其他数据预处理。
什么是缺失值
缺失值是指数据集中某些观测或变量的数据缺失。这些缺失值的出现可能有各种原因从数据收集过程中的错误到故意遗漏。我们需要非常小心地处理它们以实现准确的预测模型。常见的缺失值在数据集中以两种方式表示下面将进行讨论 NaNNot a Number在数值数据集中NaN通常用于表示缺失或未定义的值。NaN是IEEE标准定义的特殊浮点值通常用于Python等编程语言和NumPy等库。 NULL或NA在数据库系统或统计软件中NULL或NA可用于表示缺失值。这些只是占位符表示特定观察数据的缺失。
使用CatBoost处理缺失值
1.导入所需的库
现在我们将导入所有需要的Python库如NumPyPandasMatplotlibSeaborn和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加载一个数据集。然后我们将其分为训练集和测试集8020并准备分类特征这些特征将在训练期间提供给CatBoost。
# Load the Kaggle House Prices dataset
data pd.read_csv(train.csv) # https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data?selecttrain.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_size0.2, random_state42)
# 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(ascendingFalse)
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], kdeTrue, colorforestgreen)
plt.title(Distribution of SalePrice)
plt.show() 使用Seaborn此代码生成一个直方图显示’data’ DataFrame中’SalePrice’变量的分布。当添加kdeTrue参数时直方图获得数据分布的平滑描述从而添加核密度估计图。
模型训练
# Create CatBoost pools for training and testing
train_pool Pool(dataX_train, labely_train, cat_featurescategorical_features_indices)
test_pool Pool(dataX_test, labely_test, cat_featurescategorical_features_indices)# Train the CatBoost model
model CatBoostRegressor(iterations100, depth6, learning_rate0.1, loss_functionRMSE, nan_modeMin, verboseFalse)
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(fMean Absolute Error (MAE): {mae:.2f})
print(fR2 Score: {r2:.4f})
输出
Mean Absolute Error (MAE): 17666.19
R2 Score: 0.9000此代码使用预先训练的模型model对测试集进行预测。然后使用平均绝对误差MAE和R平方R2分数评估模型对测试数据的性能这些分数提供了关于模型拟合优度和准确性的信息。
总结
我们可以得出结论缺失值在现实世界的数据集中非常常见但我们需要有效地处理它们因为它们会降低模型的性能。CatBoost有其内置机制来处理训练过程中数据集中的缺失值。我们的模型达到了90%的显著R2分数这表明缺失值得到了有效处理。但是我们还可以执行超参数调优以获得更准确的结果。