大家好,我是Peter~
LightGBM是經典的機器學習演算法,它的背景、原理和特點都非常值得研究。 LightGBM的演算法產生了一些特點,例如高效能、可擴展和高準確性。本文將簡要介紹LightGBM的特點、原理以及一些基於LightGBM和隨機搜尋優化的案例。
在機器學習領域,梯度提昇機(Gradient Boosting Machines, GBMs)是一類強大的整合學習演算法,它們透過逐步添加弱學習器(通常是決策樹)來最小化預測誤差,從而建立一個強大的模型。 GBMs通常用於最小化預測誤差,從而建立一個強大的模型,這可以透過最小化殘差或損失函數來實現。這種演算法被廣泛使用,並經常被用於決策樹等弱學習器所建構的強大模型的最小化預測誤差。
在大數據時代,資料集的規模急劇增長,傳統的GBMs由於其運算和儲存成本高昂,難以有效地擴展。
為了解決這些問題,Microsoft在2017年推出了LightGBM(Light Gradient Boosting Machine),一個更快、更低記憶體消耗、更高效能的梯度提升框架。
官方學習位址:https://lightgbm.readthedocs.io/en/stable/
1、基於直方圖的決策樹演算法:
2、深度限制的leaf-wise樹生長策略:
3、單邊梯度採樣(GOSS):
4、互斥特徵捆綁(EFB):
5、支援平行與分散式學習:
6、快取最佳化:
7、支援多種損失函數:
8、正規化和剪枝:
9、模型解釋性:
In [1]:
import numpy as npimport lightgbm as lgbfrom sklearn.model_selection import train_test_split, RandomizedSearchCVfrom sklearn.datasets import load_irisfrom sklearn.metrics import accuracy_scoreimport warningswarnings.filterwarnings("ignore")
載入公開的iris資料集:
In [2]:
# 加载数据集data = load_iris()X, y = data.data, data.targety = [int(i) for i in y]# 将标签转换为整数
In [3]:
X[:3]
array([[5.1, 3.5, 1.4, 0.2], [4.9, 3. , 1.4, 0.2], [4.7, 3.2, 1.3, 0.2]])In [4]:
y[:10]#Out[4]:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]分割資料In [5]:
# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)同時建立LightGBM資料集:In [6]:
lgb_train = lgb.Dataset(X_train, label=y_train)#參數設定In [7]:
# 设置参数范围param_dist = {'boosting_type': ['gbdt', 'dart'],# 提升类型梯度提升决策树(gbdt)和Dropouts meet Multiple Additive Regression Trees(dart)'objective': ['binary', 'multiclass'],# 目标;二分类和多分类'num_leaves': range(20, 150),# 叶子节点数量'learning_rate': [0.01, 0.05, 0.1],# 学习率'feature_fraction': [0.6, 0.8, 1.0],# 特征采样比例'bagging_fraction': [0.6, 0.8, 1.0],# 数据采样比例'bagging_freq': range(0, 80),# 数据采样频率'verbose': [-1]# 是否显示训练过程中的详细信息,-1表示不显示}隨機搜尋調參#In [8]:
# 初始化模型model = lgb.LGBMClassifier()# 使用随机搜索进行参数调优random_search = RandomizedSearchCV(estimator=model, param_distributinotallow=param_dist, # 参数组合 n_iter=100, cv=5, # 5折交叉验证 verbose=2, random_state=42, n_jobs=-1)# 模型训练random_search.fit(X_train, y_train)Fitting 5 folds for each of 100 candidates, totalling 500 fits輸出最佳的參數組合:In [9]:
# 输出最佳参数print("Best parameters found: ", random_search.best_params_)Best parameters found:{'verbose': -1, 'objective': 'multiclass', 'num_leaves': 87, 'learning_rate': 0.05, 'feature_fraction': 0.6, 'boosting_type': 'gbdt', 'bagging_freq': 22, 'bagging_fraction': 0.6}使用最佳參數建模In [10]:
# 使用最佳参数训练模型best_model = random_search.best_estimator_best_model.fit(X_train, y_train)# 预测y_pred = best_model.predict(X_test)y_pred = [round(i) for i in y_pred]# 将概率转换为类别# 评估模型print('Accuracy: %.4f' % accuracy_score(y_test, y_pred))Accuracy: 0.9667
以上是LightGBM實戰+隨機搜尋調參:準確率96.67%的詳細內容。更多資訊請關注PHP中文網其他相關文章!