梯度提升是一种强大的机器学习技术,用于构建预测模型。它是一种基于树的集成方法,将多个决策树组合起来以提高模型的预测精度。在本文中,我们将探索不同的梯度提升算法,并通过分步代码示例将它们应用于在线数据集。我们还将解释和描述每个代码块,并使用可视化评估模型性能。
(资料图片)
本文使用的在线数据集是来自 UCI Machine Learning Repository 的“Online Shoppers Purchasing Intention Dataset”。它是一个二进制分类数据集,可预测客户是否会在在线购物网站上进行购买。该数据集包含 12,330 个实例和 18 个属性,包括数值、分类和二进制变量。您可以从https://www.kaggle.com/datasets/henrysue/online-shoppers-intention下载数据集。
第一步:数据预处理
在应用任何机器学习算法之前,我们需要对数据进行预处理。这涉及清理、转换和准备建模数据。在此步骤中,我们将加载数据集、检查缺失值并使用单热编码对分类变量进行编码。
import pandas as pdimport numpy as npfrom sklearn.preprocessing import OneHotEncoderfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score, roc_auc_scorefrom sklearn.ensemble import GradientBoostingClassifierfrom xgboost import XGBClassifierfrom lightgbm import LGBMClassifier
# 加载数据集df = pd.read_csv(r"C:\Users\User\Downloads\online_shoppers_intention\online_shoppers_intention_dataset.csv")df
输出:
在下面的代码中,我们使用 isnull() 函数检查缺失值。我们发现数据集中没有缺失值。
# 检查缺失值df.isnull().sum()
输出:
# 检查各个列的数据类型(分类/数值) df.dtypes
输出:
接下来,我们使用 Scikit-learn 中的 OneHotEncoder 对分类变量进行编码。
# 将分类列获取到变量cat_cols = df.select_dtypes(include="object").columnsenc = OneHotEncoder()
# 使用单热编码对分类变量进行编码enc.fit(df[cat_cols])
#获取数组中的分类列cat_data = enc.transform(df[cat_cols]).toarray() cat_data
输出:
#获取数组中的数值列num_data = df.select_dtypes(include=np.number).values num_data
输出:
我们将单热编码的分类变量与数值变量连接起来,得到最终的特征矩阵 X。我们还从数据集中提取目标变量 y。最后,我们使用 Scikit-learn 中的 train_test_split 函数将数据集拆分为训练集和测试集。
X = np.concatenate((cat_data, num_data), axis= 1 ) y = df[ "Revenue" ].values
# 将数据集拆分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
第 2 步:梯度提升算法
在这一步中,我们将在预处理后的数据集上应用不同的梯度提升算法。我们将使用以下算法:
梯度提升算法XGBoost算法LightGBM算法
我们将使用 Scikit-learn、XGBoost 和 LightGBM 库来实现这些算法。让我们从 Scikit-learn 的梯度提升算法开始。
我们将使用准确性分数和 ROC AUC 分数来评估我们的模型性能。
accuracy_score 是用于评估分类模型性能的指标。它被定义为模型做出的正确预测在所有预测中所占的比例。
ROC 曲线是模型在不同分类阈值下的敏感性和特异性之间权衡的图形表示。AUC 是 ROC 曲线下的面积,它提供了一个单一的标量值来总结模型的整体性能。AUC 的取值范围为 0 到 1,AUC 越高表示模型性能越好。AUC 为 0.5 对应的模型性能不比随机猜测好,而 AUC 为 1 对应于可以完美区分正类和负类的完美模型。
梯度提升算法
# 梯度提升gb_clf = GradientBoostingClassifier(random_state= 42 ) gb_clf.fit(X_train, y_train)
# 对测试集进行预测y_pred = gb_clf.predict(X_test)# 评估模型性能print("Accuracy:", accuracy_score(y_test, y_pred)) print("ROC AUC:", roc_auc_score(y_test, y_pred))
输出:
2. XGBoost算法
# XGBoost xgb_clf = XGBClassifier(random_state= 42 ) xgb_clf.fit(X_train, y_train)
# 对测试集进行预测y_pred = xgb_clf.predict(X_test)# 评估模型性能print("Accuracy:", accuracy_score(y_test, y_pred)) print("ROC AUC:", roc_auc_score(y_test, y_pred))
输出:
3.LightGBM算法
# LightGBM lgbm_clf = LGBMClassifier(random_state= 42 ) lgbm_clf.fit(X_train, y_train)
# 对测试集进行预测y_pred = lgbm_clf.predict(X_test)# 评估模型性能print("Accuracy:", accuracy_score(y_test, y_pred)) print("ROC AUC:", roc_auc_score(y_test, y_pred))
输出:
现在我们已经应用了三种梯度提升算法,让我们比较一下它们的性能。我们可以通过创建一个显示每个模型的准确性和 ROC AUC 分数的条形图来做到这一点。
import matplotlib.pyplot as plt
# 绘制模型的性能labels = ["Gradient Boosting", "XGBoost", "LightGBM"]accuracy = [accuracy_score(y_test, gb_clf.predict(X_test)),accuracy_score(y_test, xgb_clf.predict(X_test)),accuracy_score(y_test, lgbm_clf.predict(X_test))]roc_auc = [roc_auc_score(y_test, gb_clf.predict(X_test)),roc_auc_score(y_test, xgb_clf.predict(X_test)),roc_auc_score(y_test, lgbm_clf.predict(X_test))]x = np.arange(len(labels))width = 0.35fig, ax = plt.subplots()rects1 = ax.bar(x - width/2, accuracy, width, label="Accuracy")rects2 = ax.bar(x + width/2, roc_auc, width, label="ROC AUC")ax.set_xticks(x)ax.set_xticklabels(labels)ax.legend()plt.show()
输出:
从条形图中我们可以看出,LightGBM 算法在准确率和 ROC AUC 方面都优于其他两种算法。它的准确度约为 0.901,ROC AUC 分数约为 0.782。梯度提升算法以大约 0.895 的准确度和大约 0.771 的 ROC AUC 分数位居第二。XGBoost 算法的性能最低,精度约为 0.891,ROC AUC 分数约为 0.757。
总之,我们将三种梯度提升算法应用于在线购买意向数据集并评估了它们的性能。我们发现 LightGBM 算法在准确性和 ROC AUC 方面优于其他两种算法。我们还创建了一个条形图来可视化每个算法的性能。梯度提升算法是提高预测准确性的强大工具,可应用于广泛的机器学习任务。快乐编码!
关键词:
梯度提升是一种强大的机器学习技术,用于构建预测模型。它是一种基于树的集成方法,将多个决策树组合起来以提高模型的预测精度。在本文中,我
智通财经APP讯,麦澜德(688273 SH)发布2022年度业绩快报,报告期内公司营业总收入3 77亿元,同比增长10 28%;营业利润1 49亿元,同比增长14 44%