LightGBM - 回归
流行的机器学习方法 LightGBM(轻量梯度提升机)用于回归和分类应用。当它用于回归时,它会创建一系列决策树,每个决策树都试图通过减少前一个决策树的误差来最小化损失函数(例如均方误差)。
LightGBM 如何用于回归?
LightGBM 的基础是梯度提升,它以有序的方式一个接一个地创建多个决策树。每棵树都会努力纠正先前的决策树所犯的错误。
与其他逐级生长树的提升算法不同,LightGBM 以叶子为单位构建树。这表明,在扩展模型的同时,它优化了损失减少(即,对模型改进最大的叶子)。这提供了更深、更准确的树,但需要仔细调整以避免过度拟合。
为了减少预期结果和实际结果之间的差异,LightGBM 使用两种类型的损失函数进行回归任务− 均方误差 (MSE) 和平均绝对误差 (MAE)。
何时使用 LightGBM 回归
以下是一些可以使用 LightGBM 进行回归的情况−
当给定一个大型数据集时。
当需要一个快速有效的模型时。
当您的数据包含大量特征(列)或缺失值时。
使用 LightGBM 进行回归的示例
现在让我们看看如何创建 LightGBM 回归模型。这些步骤将帮助您了解流程的每个步骤是如何工作的。
步骤 1 − 安装所需的库
开始之前,请确保您已安装必要的库。数据处理需要 Scikit-learn,LightGBM 模型需要 lightgbm。
pip install pandas scikit-learn lightgbm
步骤 2 − 加载数据
首先,使用 pandas 加载数据集。该数据集包含健康相关信息,包括年龄、性别、BMI、子女数量、位置、吸烟状况和医疗账单。
import pandas as pd # 从本地文件路径加载数据集 data = pd.read_csv('/My Docs/Python/medical_cost.csv') # 显示数据集的前几行 print(data.head())
输出
这将产生以下结果 −
age sex bmi children smoker region charges 0 19 female 27.900 0 yes southwest 16884.92400 1 18 male 33.770 1 no southeast 1725.55230 2 28 male 33.000 3 no southeast 4449.46200 3 33 male 22.705 0 no northwest 21984.47061 4 32 male 28.880 0 no northwest 3866.85520
步骤 3 − 分离特征和目标变量
现在将目标变量 (y) 和特征 (X) 分离。在本例中,我们想使用其他特征找出"charges"列。
# "charges" 是我们想要预测的目标列 # 除"charges"之外的所有列都是特征 X = data.drop('charges', axis=1) # "charges"列是目标变量 y = data['charges']
步骤 4 − 处理分类数据
数据集中的分类特征(性别、吸烟者和地区)需要转换为数字格式,因为 LightGBM 处理数字数据。独热编码用于将这些类别列转换为二进制格式(0 和 1)。
# 将分类变量转换为数值 X = pd.get_dummies(X, drop_first=True)
这里,
pd.get_dummies() 为每个类别生成额外的二进制列。
drop_first=True 通过消除每个分类变量的初始类别来避免多重共线性。
步骤 5 − 拆分数据
要了解模型的性能,我们将数据拆分为两组 −训练集表示 80% 的数据,测试集表示 20% 的数据。
train_test split() 用于随机分割数据,同时保持给定的比例 (test_size=0.2)。
使用 random_state = 42 我们将确保分割可重现。
from sklearn.model_selection import train_test_split # 将数据分成训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
第 6 步:初始化 LightGBM回归器
现在我们将初始化 LightGBM 模型以进行回归。LGBMRegressor 是专为回归任务创建的 LightGBM 实现的名称。LGBMRegressor 模型非常高效且灵活,可以有效处理大型数据集。
from lightgbm import LGBMRegressor # 初始化 LightGBM 回归模型 model = LGBMRegressor()
第 7 步:训练模型
接下来,我们将借助训练数据 (X_train 和 y_train) 来训练模型。这里使用 fit() 方法通过在训练数据中查找模式并预测目标变量 (charges) 来训练模型。
# 在训练数据上训练模型 model.fit(X_train, y_train)
输出
运行上述代码后,我们将获得以下结果 −
[LightGBM] [Info] Auto-choosing col-wise multi-threading, the overhead of testing was 0.001000 seconds. You can set `force_col_wise=true` to remove the overhead. [LightGBM] [Info] Total Bins 319 [LightGBM] [Info] Number of data points in the train set: 1070, number of used features: 8 [LightGBM] [Info] Start training from score 13346.089733 LGBMRegressori LGBMRegressor()
步骤 8:进行预测
训练后,我们使用该模型对测试集 (X_test) 进行预测。 model.predict(X_test) 根据从训练数据中学习到的模式为测试集生成预测值。
# 预测测试集 y_pred = model.predict(X_test)
第 9 步:评估模型
我们将使用一种流行的回归统计方法均方误差 (MSE) 来衡量模型的性能。预期数字与实际数字之间的差异计算为均方误差或 MSE。MSE 值越低,性能越好。
from sklearn.metrics import mean_squared_error # 计算 MSE mse = mean_squared_error(y_test, y_pred) print(f'均方误差:{mse}')
输出
这将生成以下输出 −
均方误差:20557383.0620152
分析 MSE 数字以查看模型对目标变量的预测效果。如果 MSE 较高,请考虑通过调整超参数或收集新数据来更新模型。
可视化均方误差 (MSE)
要查看均方误差,请使用 MSE 值构建条形图。这提供了问题严重程度的清晰且直观的表示。
在这里,您可以看到如何使用 matplotlib 绘制它,这是一个用于绘制的流行 Python 库 −
import matplotlib.pyplot as plt from sklearn.metrics import mean_squared_error # 示例数据(将其替换为您的实际值) # 实际值 y_test = [3, -0.5, 2, 7] # 预测值 y_pred = [2.5, 0.0, 2, 8] # 计算 MSE mse = mean_squared_error(y_test, y_pred) # 绘制均方误差 plt.figure(figsize=(6, 4)) plt.bar(['Mean Squared Error'], [mse], color='blue') plt.ylabel('Error Value') plt.title('Mean Squared Error (MSE)') plt.show()
输出
以下是上述代码的结果 −