当前位置: 首页 > news >正文

外贸门户网站建设WordPress上传ftp设置

外贸门户网站建设,WordPress上传ftp设置,做网站卖东西赚钱,做标书的任务网站XGBoost和LightGBM都是目前非常流行的基于决策树的机器学习模型#xff0c;它们都有着高效的性能表现#xff0c;但是在某些情况下#xff0c;它们也有着不同的特点。 XGBoost和LightGBM简单对比 训练速度 LightGBM相较于xgboost在训练速度方面有明显的优势。这是因为Ligh…XGBoost和LightGBM都是目前非常流行的基于决策树的机器学习模型它们都有着高效的性能表现但是在某些情况下它们也有着不同的特点。 XGBoost和LightGBM简单对比 训练速度 LightGBM相较于xgboost在训练速度方面有明显的优势。这是因为LightGBM使用了一些高效的算法和数据结构比如直方图算法和基于梯度单边采样算法GOSS这些算法使得LightGBM在训练大规模数据集时速度更快。 内存消耗 由于LightGBM使用了一些高效的算法和数据结构因此其内存消耗相对较小。而xgboost在处理大规模数据集时可能会需要较大的内存。 鲁棒性 xgboost在处理一些不规则数据时更加鲁棒比如一些缺失值和异常值。而LightGBM在这方面相对较弱。 精度 在相同的数据集和参数设置下两个模型的精度大致相当。不过在某些情况下xgboost可能表现得更好比如在特征数较少的情况下或者是需要更加平滑的决策树时。 参数设置 xgboost的参数比较多需要根据实际情况进行调整。而LightGBM的参数相对较少大多数情况下使用默认参数即可。 XGBoost和 LightGBM 算法对比 XGBoost和 LightGBM 都是基于决策树的梯度提升框架它们的核心思想都是通过组合多个弱学习器来提升模型的预测能力。它们在实现上有很多相似之处但在算法方面有一些明显的不同 分裂点选择方法 在构建决策树时xgboost 采用的是一种贪心算法称为 Exact Greedy Algorithm它会枚举每一个特征的每一个取值作为分裂点然后计算对应的增益值选取最大增益的分裂点作为最终的分裂点。 而 LightGBM 使用的是一种基于梯度单边采样Gradient-based One-Side SamplingGOSS和直方图算法的分裂点选择方法它会先对数据进行预排序然后将数据划分成若干个直方图每个直方图包含多个数据点。在寻找最优分裂点时LightGBM 只会在直方图中选取一个代表点即直方图中的最大梯度值进行计算这样大大降低了计算量。 特征并行处理 xgboost 将数据按特征进行划分然后将每个特征分配到不同的节点上进行计算。这种方法可以有效提高训练速度但需要额外的通信和同步开销。 LightGBM 将数据按行进行划分然后将每个分块分配到不同的节点上进行计算。这种方法避免了通信和同步开销但需要额外的内存空间。 处理缺失值 xgboost 会自动将缺失值分配到左右子树中概率更高的那一边。这种方法可能会引入一些偏差但对于处理缺失值较多的数据集比较有效。 LightGBM 则采用的方法称为 Zero As MissingZAM它将所有的缺失值都视为一个特殊的取值并将其归入其中一个子节点中。这种方法可以避免偏差但需要更多的内存空间。 训练速度 LightGBM 在训练速度方面具有显著优势这是因为它使用了 GOSS 和直方图算法减少了计算量和内存消耗。而 xgboost 的计算速度相对较慢但是在处理较小的数据集时表现良好。 电力能源消耗预测 在当今世界能源是主要的讨论点之一能够准确预测能源消费需求是任何电力公司的关键所以我们这里以能源预测为例对这两个目前最好的表格类数据的模型做一个对比。 我们使用的是伦敦能源数据集其中包含2011年11月至2014年2月期间英国伦敦市5567个随机选择的家庭的能源消耗。我们将这个集与伦敦天气数据集结合起来作为辅助数据来提高模型的性能。 1、预处理 在每个项目中我们要做的第一件事就是很好地理解数据并在需要时对其进行预处理 import pandas as pdimport matplotlib.pyplot as pltdf pd.read_csv(london_energy.csv)print(df.isna().sum())df.head()“LCLid”是标识每个家庭的唯一字符串“Date”就是我们的时间索引“KWH”是在该日期花费的总千瓦时数没有任何缺失值。由于我们想要以一般方式而不是以家庭为单位来预测耗电量所以我们需要将结果按日期分组并平均千瓦时。 df_avg_consumption df.groupby(Date)[KWH].mean()df_avg_consumption pd.DataFrame({date: df_avg_consumption.index.tolist(), consumption: df_avg_consumption.values.tolist()})df_avg_consumption[date] pd.to_datetime(df_avg_consumption[date])print(fFrom: {df_avg_consumption[date].min()})print(fTo: {df_avg_consumption[date].max()})我们来做一个折线图: df_avg_consumption.plot(xdate, yconsumption)季节性特征非常明显。冬季能源需求很高而夏季的消耗是最低的。这种行为在数据集中每年都会重复具有不同的高值和低值。可视化一年内的波动: df_avg_consumption.query(date 2012-01-01 date 2013-01-01).plot(xdate, yconsumption)训练像XGBoost和LightGB这样的模型我们需要自己创建特征。因为目前我们只有一个特征:日期。所欲需要根据完整的日期提取不同的特征例如星期几、一年中的哪一天、月份和其他日期 df_avg_consumption[day_of_week] df_avg_consumption[date].dt.dayofweekdf_avg_consumption[day_of_year] df_avg_consumption[date].dt.dayofyeardf_avg_consumption[month] df_avg_consumption[date].dt.monthdf_avg_consumption[quarter] df_avg_consumption[date].dt.quarterdf_avg_consumption[year] df_avg_consumption[date].dt.yeardf_avg_consumption.head()’ date 特征就变得多余了。但是在删除它之前我们将使用它将数据集分割为训练集和测试集。与传统的训练相反在时间序列中我们不能只是以随机的方式分割集合因为数据的顺序非常重要所以对于测试集将只使用最近6个月的数据。如果训练集更大可以用去年全年的数据作为测试集。 training_mask df_avg_consumption[date] 2013-07-28training_data df_avg_consumption.loc[training_mask]print(training_data.shape)testing_mask df_avg_consumption[date] 2013-07-28testing_data df_avg_consumption.loc[testing_mask]print(testing_data.shape)可视化训练集和测试集之间的分割: figure, ax plt.subplots(figsize(20, 5))training_data.plot(axax, labelTraining, xdate, yconsumption)testing_data.plot(axax, labelTesting, xdate, yconsumption)plt.show()现在我们可以删除’ date 并创建训练和测试集: # Dropping unnecessary date columntraining_data training_data.drop(columns[date])testing_dates testing_data[date]testing_data testing_data.drop(columns[date])X_train training_data[[day_of_week, day_of_year, month, quarter, year]]y_train training_data[consumption]X_test testing_data[[day_of_week, day_of_year, month, quarter, year]]y_test testing_data[consumption]2、训练模型 我们这里的超参数优化将通过网格搜索完成。因为是时间序列所以不能只使用普通的k-fold交叉验证。Scikit learn提供了TimeSeriesSplit方法这里可以直接使用。 from xgboost import XGBRegressorimport lightgbm as lgbfrom sklearn.model_selection import TimeSeriesSplit, GridSearchCV# XGBoostcv_split TimeSeriesSplit(n_splits4, test_size100)model XGBRegressor()parameters {max_depth: [3, 4, 6, 5, 10],learning_rate: [0.01, 0.05, 0.1, 0.2, 0.3],n_estimators: [100, 300, 500, 700, 900, 1000],colsample_bytree: [0.3, 0.5, 0.7]}grid_search GridSearchCV(estimatormodel, cvcv_split, param_gridparameters)grid_search.fit(X_train, y_train)对于LightGB代码是这样的: # LGBMcv_split TimeSeriesSplit(n_splits4, test_size100)model lgb.LGBMRegressor()parameters {max_depth: [3, 4, 6, 5, 10],num_leaves: [10, 20, 30, 40, 100, 120],learning_rate: [0.01, 0.05, 0.1, 0.2, 0.3],n_estimators: [50, 100, 300, 500, 700, 900, 1000],colsample_bytree: [0.3, 0.5, 0.7, 1]}grid_search GridSearchCV(estimatormodel, cvcv_split, param_gridparameters)grid_search.fit(X_train, y_train)3、评估 为了评估测试集上的最佳估计量我们将计算平均绝对误差(MAE)、均方误差(MSE)和平均绝对百分比误差(MAPE)。因为每个指标都提供了训练模型实际性能的不同视角。我们还将绘制一个折线图以更好地可视化模型的性能。 from sklearn.metrics import mean_absolute_error, mean_absolute_percentage_error,\mean_squared_errordef evaluate_model(y_test, prediction):print(fMAE: {mean_absolute_error(y_test, prediction)})print(fMSE: {mean_squared_error(y_test, prediction)})print(fMAPE: {mean_absolute_percentage_error(y_test, prediction)})def plot_predictions(testing_dates, y_test, prediction):df_test pd.DataFrame({date: testing_dates, actual: y_test, prediction: prediction })figure, ax plt.subplots(figsize(10, 5))df_test.plot(axax, labelActual, xdate, yactual)df_test.plot(axax, labelPrediction, xdate, yprediction)plt.legend([Actual, Prediction])plt.show()然后我们运行下面代码进行验证: # Evaluating GridSearch resultsprediction grid_search.predict(X_test)plot_predictions(testing_dates, y_test, prediction)evaluate_model(y_test, prediction)XGB LightGBM 从图上可以看到XGBoost可以更准确地预测冬季的能源消耗但为了量化和比较性能我们计算误差指标。通过查看下面的表可以很明显地看出XGBoost在所有情况下都优于LightGBM。 使用外部辅助天气数据 该模型表现还不错我们看看还能不能提高呢为了达到更好的效果可以采用许多不同的技巧和技巧。其中之一是使用与能源消耗直接或间接相关的辅助特征。例如在预测能源需求时天气数据可以发挥决定性作用。这就是为什么我们选择使用伦敦天气数据集的天气数据的原因。 首先让我们来看看数据的结构: df_weather pd.read_csv(london_weather.csv)print(df_weather.isna().sum())df_weather.head()这个数据集中有各种缺失的数据需要填充。填充缺失的数据也不是一件简单的事情因为每种不同的情况填充方法是不同的。我们这里的天气数据每天都取决于前几天和下一天所以可以通过插值来填充这些值。另外还需要将’ date ‘列转换为’ datetime 然后合并两个DF以获得一个增强的完整数据集。 # Parsing datesdf_weather[date] pd.to_datetime(df_weather[date], format%Y%m%d)# Filling missing values through interpolationdf_weather df_weather.interpolate(methodffill)# Enhancing consumption dataset with weather informationdf_avg_consumption df_avg_consumption.merge(df_weather, howinner, ondate)df_avg_consumption.head()在生成增强集之后必须重新运行拆分过程获得新的’ training_data ‘和’ testing_data 。 # Dropping unnecessary date columntraining_data training_data.drop(columns[date])testing_dates testing_data[date]testing_data testing_data.drop(columns[date])X_train training_data[[day_of_week, day_of_year, month, quarter, year,\cloud_cover, sunshine, global_radiation, max_temp,\mean_temp, min_temp, precipitation, pressure,\snow_depth]]y_train training_data[consumption]X_test testing_data[[day_of_week, day_of_year, month, quarter, year,\cloud_cover, sunshine, global_radiation, max_temp,\mean_temp, min_temp, precipitation, pressure,\snow_depth]]y_test testing_data[consumption]训练步骤不需要做更改。在新数据集上训练模型后我们得到以下结果: XGBoost LightGBM 整合上面的表格 我们看到天气数据大大提高了两个模型的性能。特别是在XGBoost场景中MAE减少了近44%而MAPE从19%减少到16%。对于LightGBM, MAE下降了42%MAPE从19.8%下降到16.7%。 总结 xgboost 和 LightGBM 都是优秀的梯度提升框架它们各自具有一些独特的优点和缺点选择哪一种算法应该根据实际应用场景和数据集的特征来决定。如果数据集中缺失值较多可以选择 xgboost。如果需要处理大规模数据集并追求更快的训练速度可以选择 LightGBM。如果需要解释模型的特征重要性xgboost 提供了更好的特征重要性评估方法并且如果需要更加鲁棒的模型可以优先选择xgboost。 在本文中我们还介绍了一种提高模型的方法就是使用附加数据通过附加我们认为相关的辅助数据也可以大大提高模型的性能。 除此以外我们还可以结合滞后特征或尝试不同的超参数优化技术(如随机搜索或贝叶斯优化)来作为提高性能的尝试如果你有任何新的结果欢迎留言。 以下是2个数据集的链接 https://avoid.overfit.cn/post/bfcd5ca1cd7741acac137fade88bd747 作者George Kamtziridis
http://www.w-s-a.com/news/777948/

相关文章:

  • 小纯洁网站开发如何注册域名
  • 网上做试卷的网站如何把刚做的网站被百度抓取到
  • 滕州网站建wordpress用户中心按钮不弹出
  • 清远新闻最新消息福建seo搜索引擎优化
  • 凡客建站网微信网站怎么做的
  • 网站建设费怎么写会计科目行业网站建设公司
  • 网站里的友情链接网站建设个人简历的网页
  • 佛山自助建站软件湖南seo优化推荐
  • 免费微信微网站模板下载不了优化人员配置
  • wordpress 导航网站主题画流程图的网站
  • 皮卡剧网站怎样做排名网
  • 网站开发 兼职哪个网站是做安全教育
  • 商品展示类网站怎么用群晖nas做网站
  • 长腿蜘蛛wordpresssem优化推广
  • 中国铁路建设监理协会官方网站深圳福田区怎么样
  • 互联网网站开发发展wordpress文章自定义栏目
  • 众筹网站平台建设工信部网站备案系统
  • 网站301重定向代码wordpress 加子目录
  • 淄博网站制作优化推广asp做学生信息网站
  • 海口招商建设有限公司网站淮安哪有专业做网站的公司
  • 喀什哪有做网站的国内正规seo网络推广
  • 网站设计初步规划公司网页打不开是什么原因
  • 深圳企业网站建设推广服务php做的商城网站设计论文
  • 韩雪冬网站手机网站开发 宽度
  • 奉贤专业做网站新手怎么做企业网站
  • 做网站用哪几个端口 比较好手机号网站源码
  • 手机免费代理ip网站那个旅游网站做攻略最好
  • 西安做网站找哪家公司好苏州专业网站建设开发
  • dedecms如何做网站网站设计实施方案
  • 网站建设合约品牌设计有哪些