建设网站证书查询,宝塔网站建设教程,正规网站有哪些,网站建设是什么意思❤️觉得内容不错的话#xff0c;欢迎点赞收藏加关注#x1f60a;#x1f60a;#x1f60a;#xff0c;后续会继续输入更多优质内容❤️#x1f449;有问题欢迎大家加关注私戳或者评论#xff08;包括但不限于NLP算法相关#xff0c;linux学习相关#xff0c;读研读博… ❤️觉得内容不错的话欢迎点赞收藏加关注后续会继续输入更多优质内容❤️有问题欢迎大家加关注私戳或者评论包括但不限于NLP算法相关linux学习相关读研读博相关......封面图由ERNIE-ViLG AI 作画大模型生成 Boosting三巨头XGBoost、LightGBM和CatBoost发展、原理、区别和联系附代码和案例
机器学习中提高模型精度是研究的重点之一而模型融合技术中Boosting算法是一种常用的方法。在Boosting算法中XGBoost、LightGBM和CatBoost是三个最为流行的框架。它们在实际使用中有各自的优势和适用场景下面将会介绍它们的区别与联系。
1. 算法原理
1.1 XGBoost
XGBoost是由陈天奇等人提出的一个优化的Gradient Boosting算法以其出色的表现和可扩展性而受到广泛关注。XGBoost使用了C实现可以运行在多个平台上并支持多种编程语言如Python、R、Java等。其原理可以概括为将弱学习器依次加入到一个全局的加权模型中每一轮迭代都在损失函数的梯度方向上优化模型。它在原有GBDT的基础上添加了正则化项和缺失值处理使得模型更加稳定和准确。其原理如下
首先假设有n个训练样本(xi,yi)(x_{i}, y_{i})(xi,yi)其中xix_{i}xi为输入特征yiy_{i}yi为输出值。那么目标就是找到一个函数f(x)使得f(x)f(x)f(x)可以预测yyy的值。
其次定义损失函数L(y,f(x))L(y, f(x))L(y,f(x))用来度量f(x)f(x)f(x)的预测值与实际值之间的误差。
再次我们使用Boosting算法来不断迭代提高模型精度。假设现在已经有了一个弱分类器fm−1(x)f_{m-1}(x)fm−1(x)那么我们希望找到一个新的弱分类器fm(x)f_{m}(x)fm(x)来减少L(y,f(x))L(y, f(x))L(y,f(x))的值。于是我们在已有的弱分类器fm−1(x)f_{m-1}(x)fm−1(x)基础上加上一个新的弱分类器fm(x)f_{m}(x)fm(x)最终得到新的分类器fm(x)fm−1(x)γhm(x)f_{m}(x)f_{m-1}(x)\gamma h_{m}(x)fm(x)fm−1(x)γhm(x)其中γ\gammaγ为学习率hm(x)h_{m}(x)hm(x)为新的弱分类器。
最后由于XGBoost使用了正则化项来控制模型的复杂度并采用了特殊的梯度下降方法进行训练使得其在处理高维稀疏数据时具有较好的效果。
1.2 LightGBM
LightGBM是由微软提出的一种基于Histogram算法的Gradient Boosting框架。它通过对样本特征值进行离散化将连续特征离散化为有限个整数从而将高维稀疏数据转化为低维稠密数据从而加速了训练速度。相比XGBoostLightGBM的最大优势在于其快速的训练速度和较小的内存占用这主要得益于其采用了基于直方图的决策树算法和局部优化等技术。LightGBM的核心思想是在构造决策树时将连续特征离散化为若干个桶然后将每个桶作为一个离散特征对待从而加速树的构建和训练过程。其原理如下
首先对于每个特征我们需要将其离散化为一些桶每个桶中包含一些连续的特征值。在训练时我们只需要计算每个桶中的样本的统计信息如平均值和方差而不需要计算每个样本的特征值从而减少了计算量。
其次对于每个样本我们根据离散化后的特征值将其归入对应的桶中然后计算桶中样本的统计信息。接着我们通过梯度单边采样GOSS算法选择一部分样本进行训练这些样本中包含了大部分的梯度信息从而保证了训练的准确性和效率。
最后LightGBM还使用了基于直方图的决策树算法使得在处理高维稀疏数据时具有较好的效果。
1.3 CatBoost
CatBoost是由Yandex提出的一种基于梯度提升算法的开源机器学习框架。它在处理分类问题时可以自动处理类别特征无需手动进行特征编码。CatBoost的原理与XGBoost和LightGBM类似同样是通过将多个弱学习器组合成一个强学习器。不同之处在于CatBoost使用了一种新的损失函数即加权交叉熵损失函数可以有效地处理类别不平衡问题。其原理如下
首先CatBoost使用了一种称为Ordered Boosting的算法来提高模型精度。Ordered Boosting可以看做是一种特殊的特征选择方法它将训练样本按照特征值大小排序然后使用分段线性模型拟合每一段特征值的梯度从而提高了模型的拟合能力。
其次CatBoost在处理分类问题时可以自动处理类别特征。它使用了一种称为Target Encoding的方法将类别特征转化为一组实数值从而避免了手动进行特征编码的麻烦。
最后CatBoost还使用了基于对称树的决策树算法使得在处理高维稀疏数据时具有较好的效果。
2. 发展前景和应用场景
XGBoost、LightGBM和CatBoost作为目前最先进的梯度提升算法在许多数据科学竞赛和实际应用中都取得了很好的效果。随着大数据时代的到来这三种算法的应用场景也越来越广泛。
其中XGBoost在传统机器学习领域仍然是最常用的算法之一特别是在结构化数据的分类、回归和排序任务中表现突出。LightGBM在大规模数据集和高维度数据上表现更佳适用于处理文本分类、图像分类、推荐系统等领域的数据。CatBoost在处理类别特征和缺失值方面表现出色适用于电商推荐、医疗预测、金融风控等领域的数据。
总的来说XGBoost、LightGBM和CatBoost作为梯度提升算法的代表都具有自身的优势和适用场景随着数据和计算能力的不断提升它们的应用前景也会越来越广阔。
3. 使用案例
3.1 XGBoost
XGBoost可以应用于多种场景如回归、分类、排序等。下面以Kaggle竞赛中的房价预测问题为例展示如何使用XGBoost进行模型训练和预测。
首先我们使用Pandas读取数据集并将其划分为训练集和测试集。
import pandas as pd
from sklearn.model_selection import train_test_splitdf pd.read_csv(train.csv)
X df.drop(SalePrice, axis1)
y df[SalePrice]
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)接着我们使用XGBoost的Python接口进行模型训练和预测。
import xgboost as xgb
from sklearn.metrics import mean_squared_errordtrain xgb.DMatrix(X_train, labely_train)
dtest xgb.DMatrix(X_test)params {max_depth: 3, learning_rate: 0.1, objective: reg:squarederror}
num_rounds 100model xgb.train(params, dtrain, num_rounds)
y_pred model.predict(dtest)mse mean_squared_error(y_test, y_pred)
print(Mean Squared Error:, mse)上述代码中我们首先使用xgb.DMatrix将训练数据转化为DMatrix格式。接着我们定义了模型参数并设置了迭代次数为100。然后我们使用xgb.train函数进行模型训练并使用model.predict函数进行模型预测。最后我们使用sklearn.metrics.mean_squared_error函数计算了模型的均方误差。
3.2 LightGBM
LightGBM可以应用于多种场景如回归、分类、排序等。下面以Kaggle竞赛中的鸢尾花分类问题为例展示如何使用LightGBM进行模型训练和预测。
首先我们使用Pandas读取数据集并将其划分为训练集和测试集。
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_splitdata load_iris()
df pd.DataFrame(data.data, columnsdata.feature_names)
df[target] data.targetX df.drop(target, axis1)
y df[target]
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)接着我们使用LightGBM的Python接口进行模型训练和预测。
import lightgbm as lgb
from sklearn.metrics import accuracy_scoredtrain lgb.Dataset(X_train, labely_train)
dtest lgb.Dataset(X_test, labely_test)params {objective: multiclass, num_class: 3, metric: multi_logloss}
num_rounds 100model lgb.train(params, dtrain, num_rounds)
y_pred model.predict(X_test)y_pred [list(x).index(max(x)) for x in y_pred]
accuracy accuracy_score(y_test, y_pred)
print(Accuracy:, accuracy)上述代码中我们首先使用lgb.Dataset将训练数据转化为Dataset格式。接着我们定义了模型参数并设置了迭代次数为100。然后我们使用lgb.train函数进行模型训练并使用model.predict函数进行模型预测。最后我们使用sklearn.metrics.accuracy_score函数计算了模型的准确率。
3.3 CatBoost
import catboost as cb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_scoreiris load_iris()
X_train, X_test, y_train, y_test train_test_split(iris.data, iris.target, test_size0.2)train_data cb.Pool(X_train, labely_train)
test_data cb.Pool(X_test, labely_test)params {loss_function: MultiClass, num_class: 3, eval_metric: Accuracy}num_rounds 20
bst cb.train(params, train_data, num_rounds)preds bst.predict(X_test)
y_pred [np.argmax(pred) for pred in preds]acc accuracy_score(y_test, y_pred)
print(Accuracy:, acc)综合展示
为了更好地展示XGBoost、LightGBM和CatBoost的应用场景和效果我们以波士顿房价预测数据集为例进行实验。
首先我们使用sklearn库中的load_boston函数加载数据集并对数据进行划分80%用于训练20%用于测试。
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_splitdata load_boston()
X_train, X_test, y_train, y_test train_test_split(data.data, data.target, test_size0.2, random_state42)然后我们依次使用XGBoost、LightGBM和CatBoost训练模型并对模型进行评估。
import xgboost as xgb
from lightgbm import LGBMRegressor
from catboost import CatBoostRegressor
from sklearn.metrics import mean_squared_error# XGBoost
xgb_model xgb.XGBRegressor(n_estimators100, max_depth5, learning_rate0.1, random_state42)
xgb_model.fit(X_train, y_train)
xgb_pred xgb_model.predict(X_test)
xgb_rmse mean_squared_error(y_test, xgb_pred, squaredFalse)# LightGBM
lgb_model LGBMRegressor(n_estimators100, max_depth5, learning_rate0.1, random_state42)
lgb_model.fit(X_train, y_train)
lgb_pred lgb_model.predict(X_test)
lgb_rmse mean_squared_error(y_test, lgb_pred, squaredFalse)# CatBoost
cat_model CatBoostRegressor(n_estimators100, max_depth5, learning_rate0.1, random_seed42, silentTrue)
cat_model.fit(X_train, y_train)
cat_pred cat_model.predict(X_test)
cat_rmse mean_squared_error(y_test, cat_pred, squaredFalse)print(XGBoost RMSE: {:.2f}.format(xgb_rmse))
print(LightGBM RMSE: {:.2f}.format(lgb_rmse))
print(CatBoost RMSE: {:.2f}.format(cat_rmse))参考文献
[1] Chen, T., Guestrin, C. (2016). Xgboost: A scalable tree boosting system. In Proceedings of the 22nd acm sigkdd international conference on knowledge discovery and data mining (pp. 785-794). [2] Ke, G., Meng, Q., Finley, T., Wang, T., Chen, W., Ma, W., … Liu, G. (2017). Lightgbm: A highly efficient gradient boosting decision tree. In Advances in Neural Information Processing Systems (pp. 3146-3154). [3] Prokhorenkova, L., Gusev, G., Vorobev, A., Dorogush, A. V., Gulin, A. (2018). CatBoost: unbiased boosting with categorical features. In Advances in neural information processing systems (pp. 6638-6648). [4] XGBoost官方文档https://xgboost.readthedocs.io/en/latest/ [5] LightGBM官方文档https://lightgbm.readthedocs.io/en/latest/ [6] CatBoost官方文档https://catboost.ai/docs/ [7] 《Python机器学习基础教程》吴斌介绍了XGBoost、LightGBM和CatBoost的使用方法和实例。 [8] 《Applied Machine Learning》Kelleher, John D.介绍了各种机器学习算法其中也包括了梯度提升算法和其变种。 [9] 《Hands-On Gradient Boosting with XGBoost and scikit-learn》Villalba, Benjamin详细介绍了XGBoost和scikit-learn库的梯度提升实现。 [10] 《Gradient Boosting》Friedman, Jerome H.介绍了梯度提升算法的基本思想和实现原理。 ❤️觉得内容不错的话欢迎点赞收藏加关注后续会继续输入更多优质内容❤️有问题欢迎大家加关注私戳或者评论包括但不限于NLP算法相关linux学习相关读研读博相关......