xgboost:
这里列举的代码,是一个对10分类结果进行预测,max_depth参数控制树的深度,objective控制的是训练的目标,multi:softprob即多分类预测概率,num_class为需要分类的类数。
这里输入的x的维度为n40000,输入的y的维度为n1,即y的每一行都是一个数字,0-9,代表所属的10分类
eval_metric这个参数指定的是训练的时候loss的类别。获得结果后,可以用predict方法获得分类的结果(1维标签,0-9),用predict_proba可以获得预测分类的概率(10维,分别代表10分类各自的概率)

from xgboost import XGBClassifier
import pickle
def xgboost(x, y):model = XGBClassifier(max_depth=25, objective='multi:softprob', num_class=10,n_estimators=1000)x_train, x_test_valid, y_train, y_test_valid = train_test_split(x, y, test_size=0.2, random_state=1)model.fit(x_train, y_train, early_stopping_rounds=10, eval_set=[(x_train, y_train), (x_test_valid, y_test_valid)],eval_metric="mlogloss", verbose=True)# make predictionpreds = model.predict(x_test_valid)print(preds[0:10])prob_pre = model.predict_proba(x_test_valid)print(prob_pre[0:10])test_accuracy = accuracy_score(y_test_valid, preds)print("Test Accuracy: %.2f%%" % (test_accuracy * 100.0))if test_accuracy > 0.999:#保存代码pickle.dump(model, open("xgboostmodel2.pickle.dat", "wb"))

lgbm:和xbgoost的使用比较类似,需要注意的是在使用lgbm进行多分类时,使用predict方法输出的就是分类的预测概率,以0-9的10分类为例,lgbm的predict方法输出的就是10分类的预测概率,因此lgbm没有predict_proba方法,需要自己写函数将预测的结果转化成标签。此外,同样是多分类预测概率,lgbm里的objective

import pickle
from lightgbm import LGBMRegressordef turn_prob_to_label(prob_data):# 将检测概率转化成一维数字标签prob_data = list(prob_data)result = []for each_data in prob_data:max_loc = list(each_data).index(max(list(each_data)))result.append(str(max_loc))return resultdef lightgbm(x, y):model = LGBMRegressor(max_depth=30, objective='multiclass', num_class=10,n_estimators=1000)x_train, x_test_valid, y_train, y_test_valid = train_test_split(x, y, test_size=0.2, random_state=1)model.fit(x_train, y_train, early_stopping_rounds=30, eval_set=[(x_train, y_train), (x_test_valid, y_test_valid)],eval_metric="multi_error", verbose=True)preds = model.predict(x_test_valid)test_result = np.array(turn_prob_to_label(preds))print(test_result[0:10])print(y_test_valid[0:10])test_accuracy = accuracy_score(y_test_valid, test_result)print("Test Accuracy: %.2f%%" % (test_accuracy * 100.0))if test_accuracy > 0.999:pickle.dump(model, open("lgboostmodel2.pickle.dat", "wb"))# loaded_model = pickle.load(open("pima.pickle.dat", "rb"))

在训练完模型后,可以用pickle来保存和读取模型
如果训练效果不佳,可以主动用numpy的shuffle方法来打乱数组(类似于修改字典,不用返回值也能生效)

def shuffleData(data_x, data_y):"""对输入的numpy数组进行手动打乱"""np.random.seed(207)np.random.shuffle(data_x)np.random.seed(207)np.random.shuffle(data_y)

如果想要获取之前过程中的打印历史,可以通过evals_result_的方法来获取

history=self.model.fit(x_train, y_train,eval_set=[(x_train, y_train), (x_test_valid, y_test_valid)],eval_metric="multi_error")
print(history.evals_result_)

在更新后,lightGBM会提示early_stopping_rounds要被弃用了,要求换成callbacks传参的形式:

from lightgbm import log_evaluation, early_stopping
callbacks = [log_evaluation(period=100), early_stopping(stopping_rounds=30)]

其中period=100指每迭代100次打印一次log;stopping_rounds=30指如果验证集的误差在30次迭代内没有降低,则停止迭代。

部分参数选项

metric:
用于指定评估指标,可以传递各种评估方法组成的list。常用的评估指标如下:
‘mae’,用于回归任务,效果与 ‘mean_absolute_error’, ‘l1’ 相同。
‘mse’,用于回归任务,效果与 ‘mean_squared_error’, ‘l2’ 相同。
‘rmse’,用于回归任务,效果与 ‘root_mean_squared_error’, ‘l2_root’ 相同。
‘auc’,用于二分类任务。
‘binary’,用于二分类任务。
‘binary_logloss’,用于二分类任务。
‘binary_error’,用于二分类任务。
‘multiclass’,用于多分类。
‘multi_logloss’, 用于多分类。
‘multi_error’, 用于多分类。
seed / random_state 指定随机数种子objective:指定目标可选参数如下:
“regression”,使用L2正则项的回归模型(默认值)。
“regression_l1”,使用L1正则项的回归模型。
“mape”,平均绝对百分比误差。
“binary”,二分类。
“multiclass”,多分类。
num_class用于设置多分类问题的类别个数。

使用xgboost以及lgbm相关推荐

  1. XGBOOST和LGBM及RF的区别:

    1.xgboost基于一种划分时对数值进行预排序presort,因此不能处理类别型特征,这种方法好处是能够处理精准找到分裂点,但是时间复杂度很高: 而Light GBM基于hist直方图,对于连续性特 ...

  2. xgboost参数原理详解,适合入门新人

    sklearn集成方法 bagging 常见变体(按照样本采样方式的不同划分) Pasting:直接从样本集里随机抽取的到训练样本子集 Bagging:自助采样(有放回的抽样)得到训练子集 Rando ...

  3. 机器学习模型解释性工具SHAP

    如下图,SHAP支持模型解释性,可用于抽取特征对结果的贡献. Github地址:https://github.com/slundberg/shap 案例: 1.数据集: # dataset:http: ...

  4. 【IM】关于集成学习Bagging和Boosting的理解

    集成学习在各大比赛中非常流程,如XGboost.LGBM等,对其基学习器决策树及其剪枝等,可参考: https://blog.csdn.net/fjssharpsword/article/detail ...

  5. LESSON 12.8 原理进阶 (1):GBDT数学流程与残差概念辨析

    四 原理进阶:GBDT的求解流程 1 GBDT的基本数学流程 作为当代众多经典算法的基础,GBDT的求解过程可谓十分精妙,它不仅开创性地舍弃了使用原始标签进行训练的方式,同时还极大地简化了Boosti ...

  6. 一天1个机器学习知识点(四)

    陆陆续续整理的机器学习的知识点,资料大多数来自网上,不做盈利目的,如果侵权请告知即删!如果文章中有错误的地方还请各位同学指正,,一起学习,一起进步! 每天都在更新中,记得收藏,每天进步一点点!! 一天 ...

  7. 随机森林的特征 是放回抽样么_机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南...

    一.什么是随机森林 前面我们已经介绍了决策树的基本原理和使用.但是决策树有一个很大的缺陷:因为决策树会非常细致地划分样本,如果决策树分得太多细致,会导致其在训练集上出现过拟合,而如果决策树粗略地划分样 ...

  8. 回归分析|变量重要性选择

    回归分析|变量/特征重要性选择 特征重要性分析方法 线性模型 树模型 怎么量化一个变量在模型中的重要性 特征重要性分析方法 线性模型 看标准化以后的系数 树模型 XGBoost或者LGBM模型中自带的 ...

  9. 2023美赛春季赛Y题保姆级思路及代码 了解二手帆船

    2023_MCM_Problem_Y  Understanding Used Sailboat Prices 背景: 和许多奢侈品一样,帆船的价值会随着老化和市场条件的变化而变化.附件中所附的 &qu ...

最新文章

  1. 行业发展之关于有用信息和无用信息的思考
  2. 【SSM框架系列】SpringMVC基本介绍
  3. IBM HyperLedger fabric 详解
  4. gdb core调试
  5. APP安全环节缺失,手游运营商怎样应对APP破解困境
  6. Nginx的启动阶段讲解
  7. 自定义用户控件显示属性分类、描述、默认值
  8. wow修改人物模型_玻璃钢气球狗模型景观雕-东莞气球树脂雕塑
  9. 全屏窗口指令_在iOS 14系统中,快捷指令原来有多达11种运行方式(上篇)
  10. python中文繁简体转换库zhconv
  11. ✨❤️CSDN标题党❤️,创意无极限,那不直接全网站都花的飞起?
  12. 解决Mac 80端口被占用
  13. 全国互联电网调度管理规程(第一章__第九章)
  14. 真正内心强大的人是什么样子???
  15. 小米10至尊纪念版和Redmi K30至尊纪念版的区别 哪个好
  16. Spring cloud 灰度发布
  17. 微服务架构 基础(三)
  18. IMP-00017: 由于 ORACLE 的 20001 错误
  19. 怎样让java程序在别的电脑上运行_有关java桌面应用如何在别的电脑上运行
  20. 金蝶KIS专业版销售出库反审核不成功,销售订单关联的出库数量为负!

热门文章

  1. Go语言fmt包Printf方法格式化参数详解
  2. 中国一次性医疗器械行业需求价值与投资潜力预测报告2022版
  3. 细思极恐——你真的会写Java吗?
  4. 祖-玛珑全新馥郁系列香氛“香根草与香子兰”上市
  5. 电子科技大学图书馆使用教程二则
  6. 虚拟服务器显卡,GPU也玩虚拟机 解析RemoteFX虚拟化技术
  7. Android:让手机成为你的移动生活助手
  8. kratos 微服务框架商城实战初识 kratos
  9. 能让Jellyfin直接挂载阿里云盘的aliyundrive-fuse
  10. 用Python制作你的专属音乐播放器(此刻浪漫只属于你哦*´▽`*)