吉林省电力建设总公司网站,长春火车站最新消息,商城类小程序,wordpress本地速度慢目录
初识集成学习
Bagging与随机森林
Otto Group Product(实操)
Boosting集成原理 初识集成学习
集成学习#xff08;Ensemble Learning#xff09;是一种通过组合多个基本模型来提高预测准确性和泛化能力的机器学习方法。它通过将多个模型的预测结果进行整合或投票来做…目录
初识集成学习
Bagging与随机森林
Otto Group Product(实操)
Boosting集成原理 初识集成学习
集成学习Ensemble Learning是一种通过组合多个基本模型来提高预测准确性和泛化能力的机器学习方法。它通过将多个模型的预测结果进行整合或投票来做出最终的预测决策。 集成学习通过建立几个模型来解决单一预测问题。它的工作原理是生成多个分类器/模型各自独立地学习和作出预测。这些预测最后结合成组合预测因此优于任何一个单分类的做出预测。只要单分类器的表现不太差集成学习的结果总是要好于单分类器的。
Bagging与随机森林
BaggingBootstrap Aggregating是一种常见的集成学习方法旨在通过构建多个基本模型并对它们的预测结果进行组合来提高整体性能。
Bagging的关键思想在于通过对训练数据集的重采样生成多个相互独立的基本模型并利用这些模型的集体智慧来提高整体的预测准确性和泛化能力。由于每个基本模型都是在不同的数据子集上独立训练的因此可以减小模型之间的相关性从而减少过拟合的风险。
如下我们想把圆和方块进行分类 接下来采样不同的数据集 接下来训练分类器 平均投票获取最终结果 主要实现过程总结 随机森林在机器学习中随机森林是一个包含多个决策树的分类器并且其输出的类别是由个别树输出的类别的众数而定。随机森林 Bagging 决策树
例如如果你训练了5个树其中有4个树的结果是True1个树的结果是False那么最终投票结果就是True 随机森林够造过程中的关键步骤(M表示特征数目) 1一次随机选出一个样本有放回的抽样重复N次(有可能出现重复的样本) 2随机去选出m个特征mM建立决策树 在随机森林构造过程中如果进行有放回的抽样我们会发现总是有一部分样本我们选不到。随机森林的Bagging过程对于每一颗训练出的决策树gt与数据集D有如下关系 对于星号的部分即是没有选择到的数据称之为Out-of-bag(OOB)数据当数据足够多对于任意一组数据n,yn是包外数据的概率为 由于基分类器是构建在训练样本的自助抽样集上的只有约63.2%原样本集出现在中而剩余的36.8%的数据作为包外数据可以用于基分类器的验证集。 经验证包外估计是对集成分类器泛化误差的无偏估计。 1当基学习器是决策树时可使用包外样本来辅助剪枝或用于估计决策树中各结点的后验概率以辅助对零训练样本结点的处理。 2当基学习器是神经网络时可使用包外样本来辅助早期停止以减小过拟合。 bagging集成优点Bagging 决策树/线性回归/逻辑回归/深度学习... bagging集成学习方法。经过上面方式组成的集成学习方法1均可在原有算法上提高约2%左在的泛化正确率 2简单方便通用。
Otto Group Product(实操)
背景介绍奥托集团是世界上最大的电子商务公司之一在20多个国家设有子公司。该公司每天都在世界各地销售数百万种产品所以对其产品根据性能合理的分类非常重要。
不过在实际工作中工作人员发现许多相同的产品得到了不同的分类。本案例要求你对奥拓集团的产品进行正确的分分类。尽可能的提供分类的准确性。其地址为地址 。 本案例中数据集包含大约200,000种产品的93个特征。其目的是建立一个能够区分otto公司主要产品类别的预测模型。有产品共被分成九个类别例如时装电子产品等如下 id — 产品idfeat_1,feat_2,..,feat_93 - 产品的各个特征target - 产品被划分的类别 本案例中最后结果使用多分类对数损失进行评估。 接下来通过代码进行实现以下是实现本次案例的相关重要操作
数据获取
# 导入第三方库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
获取数据集数据对数据进行一个查看 通过seaborn可视化库可以看到我们数据类别不均衡 数据基本处理
接下来通过随机欠采样获取数据 接下来通过这段代码的作用是从imblearn库中导入RandomUnderSampler类用于进行随机欠采样Random Under Sampling。如果没有该库终端执行如下命令进行安装
pip install imbalanced-learn -i https://pypi.mirrors.ustc.edu.cn/simple 通过图形可视化查看数据 接下来把标签数据转化为数字 开始分割数据 模型训练 通过可视化查看数据变化 模型评估
使用OneHotEncoder对象对y_pre进行独热编码转换。y_pre也是一个一维数组通过reshape(-1, 1)转换为二维列向量的形式并使用fit_transform方法进行独热编码转换。最后将转换后的编码结果赋值给y_pre1。 rf是一个随机森林分类器对象通过调用predict_proba方法将测试集x_test作为输入返回了每个样本所属于每个类别的概率估计值。 模型调优
在机器学习中模型调优的目的是通过对模型参数的设置和调整来提高模型的性能接下来对模型调优的超参数进行测试
# 模型调优——确定最优的 n_estimators
# 确定n_estimators的取值范围
tuned_parameters range(10, 200, 10)
# 创建添加accuracy的一个numpy
accuracy_tnp.zeros(len(tuned_parameters))
# 创建添加error的一个numpy
error_tnp.zeros(len(tuned_parameters))
# 调优过程实现
for j,one_parameter in enumerate(tuned_parameters):rf2 RandomForestClassifier(n_estimatorsone_parameter, max_depth10, max_features10, min_samples_leaf10, oob_scoreTrue, random_state0, n_jobs-1)rf2.fit(x_train, y_train)# 输出accuracyaccuracy_t[j] rf2.oob_score_# 输出log_lossy_pre rf2.predict_proba(x_test)error_t[j] log_loss(y_test, y_pre, normalizeTrue)print(error_t)
得出的结果如下 #优化结果过程可视化
fig,axes plt.subplots(nrows1,ncols2,figsize(20, 4), dpi100)axes[0].plot(tuned_parameters,error_t)
axes[1].plot(tuned_parameters,accuracy_t)axes[0].set_xlabel(n_estimators)
axes[0].set_ylabel(error_t)
axes[1].set_xlabel(n_estimators)
axes[1].set_ylabel(accuracy_t)axes[0].grid(True)
axes[1].grid(True)plt.show()
经过图像展示最后确定n_estimators175的时候表现效果不错 # 模型调优——确定最优的max_features
# 确定n_estimators的取值范围
tuned_parameters range(5, 40, 5)
# 创建添加accuracy的一个numpy
accuracy_tnp.zeros(len(tuned_parameters))
# 创建添加error的一个numpy
error_tnp.zeros(len(tuned_parameters))
# 调优过程实现
for j,one_parameter in enumerate(tuned_parameters):rf2 RandomForestClassifier(n_estimators175, max_depth10, max_featuresone_parameter, min_samples_leaf10, oob_scoreTrue, random_state0, n_jobs-1)rf2.fit(x_train, y_train)# 输出accuracyaccuracy_t[j] rf2.oob_score_# 输出log_lossy_pre rf2.predict_proba(x_test)error_t[j] log_loss(y_test, y_pre, normalizeTrue)print(error_t)
得出的结果如下 #优化结果过程可视化
fig,axes plt.subplots(nrows1,ncols2,figsize(20, 4), dpi100)axes[0].plot(tuned_parameters,error_t)
axes[1].plot(tuned_parameters,accuracy_t)axes[0].set_xlabel(max_features)
axes[0].set_ylabel(error_t)
axes[1].set_xlabel(max_features)
axes[1].set_ylabel(accuracy_t)axes[0].grid(True)
axes[1].grid(True)plt.show()
经过图像展示最后确定max_feature15的时候表现效果不错 # 模型调优——确定最优的max_depth
# 确定n_estimators的取值范围
tuned_parameters range(10, 100, 10)
# 创建添加accuracy的一个numpy
accuracy_tnp.zeros(len(tuned_parameters))
# 创建添加error的一个numpy
error_tnp.zeros(len(tuned_parameters))
# 调优过程实现
for j,one_parameter in enumerate(tuned_parameters):rf2 RandomForestClassifier(n_estimators175, max_depthone_parameter, max_features15, min_samples_leaf10, oob_scoreTrue, random_state0, n_jobs-1)rf2.fit(x_train, y_train)# 输出accuracyaccuracy_t[j] rf2.oob_score_# 输出log_lossy_pre rf2.predict_proba(x_test)error_t[j] log_loss(y_test, y_pre, normalizeTrue)print(error_t)
得出的结果如下 #优化结果过程可视化
fig,axes plt.subplots(nrows1,ncols2,figsize(20, 4), dpi100)axes[0].plot(tuned_parameters,error_t)
axes[1].plot(tuned_parameters,accuracy_t)axes[0].set_xlabel(max_depth)
axes[0].set_ylabel(error_t)
axes[1].set_xlabel(max_depth)
axes[1].set_ylabel(accuracy_t)axes[0].grid(True)
axes[1].grid(True)plt.show()
经过图像展示最后确定max_depth30的时候表现效果不错 # 模型调优——确定最优的min_sample_leaf
# 确定n_estimators的取值范围
tuned_parameters range(1, 10, 2)
# 创建添加accuracy的一个numpy
accuracy_tnp.zeros(len(tuned_parameters))
# 创建添加error的一个numpy
error_tnp.zeros(len(tuned_parameters))
# 调优过程实现
for j,one_parameter in enumerate(tuned_parameters):rf2 RandomForestClassifier(n_estimators175, max_depth30, max_features15, min_samples_leafone_parameter, oob_scoreTrue, random_state0, n_jobs-1)rf2.fit(x_train, y_train)# 输出accuracyaccuracy_t[j] rf2.oob_score_# 输出log_lossy_pre rf2.predict_proba(x_test)error_t[j] log_loss(y_test, y_pre, normalizeTrue)print(error_t)
得出的结果如下 #优化结果过程可视化
fig,axes plt.subplots(nrows1,ncols2,figsize(20, 4), dpi100)axes[0].plot(tuned_parameters,error_t)
axes[1].plot(tuned_parameters,accuracy_t)axes[0].set_xlabel(min_sample_leaf)
axes[0].set_ylabel(error_t)
axes[1].set_xlabel(min_sample_leaf)
axes[1].set_ylabel(accuracy_t)axes[0].grid(True)
axes[1].grid(True)plt.show()
经过图像展示最后确定min_sample_leaf1的时候表现效果不错 由此我们确定了最有的模型数据为 n_estimators175max_depth30max_features15min_samples_leaf1 通过获得到的具体的数据再次模型训练
rf3 RandomForestClassifier(n_estimators175, max_depth30, max_features15, min_samples_leaf1, oob_scoreTrue, random_state40, n_jobs-1)
rf3.fit(x_train, y_train)
最终获得到的数据如下 提交最终结果
我们根据kaggle平台竞赛要求我们提交的格式进行对最终结果的数据处理 这里我们先把id这一列数据删掉 接下来对数据进行处理 接下来我们在第一列添加一个id属性然后把数据进行保存 回到我们的浏览器找到相应的位置就能看到我们保存好的文件然后回到kaggle网站上提交作品即可 Boosting集成原理
Boosting是一种常见的集成学习方法它通过串行地训练多个弱分类器或回归器并将它们合并为一个强分类器或回归器。Boosting的核心思想是依次训练模型每一次训练都会调整样本的权重使得前一轮中被错误分类的样本在下一轮中得到更多的关注。因此Boosting可以在弱分类器的基础上构建出准确度更高的强分类器。
简而言之随着学习的积累从弱到强每新加入一个弱学习器整体能力就会得到提升。其代表算法AdaboostGBDTXGBoostLightGBM等。其训练的实现过程如下
训练第一个学习器 调整数据分布 训练第二个学习器 再次调整分布 依次训练学习器调整数据分布 整体实现过程 bagging集成与boosting集成的区别 1数据方面 Bagging对数据进行采样训练Boosting根据前一轮学习结果调整数据的重要性。 2投票方面 Bagging所有学习器平权投票Boosting对学习器进行加权投票。 3学习顺序 Bagging的学习是并行的每个学习器没有依赖关系 Boosting学习是串行学习有先后顺序。 4主要作用 Bagging主要用于提高泛化性能解决过拟合也可以说降低方差) Boosting主要用于提高训练精度解决欠拟合也可以说降低偏差 Adaboost介绍 GBDT介绍 XGBoost介绍 LightGBM介绍 LightGBM是一个基于梯度提升决策树Gradient Boosting Decision TreeGBDT的机器学习框架。它是由微软开发的高效、分布式的梯度提升框架以速度快和高准确率而闻名。 LightGBM的设计目标是解决大规模数据集和高维特征的机器学习问题。它在传统的梯度提升决策树算法的基础上进行了优化引入了一些创新的技术和策略以提供更好的性能和可扩展性。