共计 12759 个字符,预计需要花费 32 分钟才能阅读完成。
作者:韩信子 @ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/41
本文地址:http://www.showmeai.tech/article-detail/206
申明:版权所有,转载请分割平台与作者并注明出处
珍藏 ShowMeAI 查看更多精彩内容
1. 案例介绍
在本篇内容中,ShowMeAI 将基于 Kaggle 数据迷信比赛平台的 Rossmann store sales 大数据比赛我的项目,给大家梳理和总结,基于 Python 解决电商建模的全过程:包含数据摸索剖析、数据预处理与特色工程、建模与调优。
本篇对应的构造和内容如下。
- 第①节:介绍本篇中咱们解决方案所用到的 Python 工具库。
- 第②节:介绍 Rossmann store sales 我的项目根本状况,包含业务背景、数据状态、我的项目指标。
- 第③节:介绍联合业务和数据做 EDA,即探索性数据分析的过程。
- 第④节:介绍利用 Python 机器学习工具库 SKLearn/XGBoost/LightGBM 进行建模和调优的过程。
2. 工具库介绍
(1) Numpy
Numpy(Numerical Python)是 Python 语言的一个扩大程序库,反对大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy 的次要特色如下:
- 一个弱小的 N 维数组对象 ndarray
- 播送性能函数
- 整合 C /C++/Fortran 代码的工具
- 线性代数、傅里叶变换、随机数生成等性能
想对 Numpy 有具体理解的宝宝,欢送查看 ShowMeAI 的 数据分析系列教程 中的 Numpy 局部。大家也能够查看 ShowMeAI 总结的 Numpy 速查表 数据迷信工具速查 | Numpy 使用指南 做一个疾速理解。
(2) Pandas
Pandas 是一个弱小的序列数据处理工具包,我的项目开发之初是为了剖析公司的财务数据以及金融数据。现在 Pandas 宽泛地利用在了其余畛域的数据分析中。它提供了大量能使咱们疾速便捷地解决数据的函数和办法,十分弱小。
想对 Pandas 有具体理解的宝宝,欢送查看 ShowMeAI 的 数据分析系列教程 中的 Pandas 局部。大家也能够查看 ShowMeAI 总结的 Pandas 速查表 数据迷信工具速查 | Pandas 使用指南 做一个疾速理解。
(3) Matplotlib
Matplotlib 是 Python 最弱小的绘图工具之一,其次要用于绘制 2D 图形或 3D 图形的 2D 示意图。其在数据分析畛域它有很大的位置,因为可视化能够帮忙咱们更清晰直观地理解数据分布个性。
想学习 Matplotlib 工具库的宝宝,也能够查看 ShowMeAI 总结的 Matplotlib 速查表 数据迷信工具速查 | Matplotlib 使用指南 做一个疾速理解。
(4) Seaborn
Seaborn 是基于 Python 且十分受欢迎的图形可视化库,在 Matplotlib 的根底上,进行了更高级的封装,使得作图更加方便快捷。即使是没有什么根底的人,也能通过极简的代码,做出具备剖析价值而又非常好看的图形。
想对 Seaborn 有具体理解的宝宝,欢送查看 ShowMeAI 的 数据分析系列教程 中的 Seaborn 局部。
大家也能够查看 ShowMeAI 总结的 Seaborn 速查表 数据迷信工具速查 | Seaborn 使用指南 做一个疾速理解。
(5) Scikit-Learn
Python 机器学习工具库 Scikit-Learn,构建在 Numpy,SciPy,Pandas 和 Matplotlib 之上,也是最罕用的 Python 机器学习工具库之一,外面的 API 的设计十分好,所有对象的接口简略,很适宜新手上路。笼罩的模型十分多,实用场景宽泛。
想对 Scikit-Learn 有具体理解的宝宝,欢送查看 ShowMeAI 的机器学习实战教程中的SKLearn 入门 和 SKLearn 指南 局部。也能够查看 ShowMeAI 总结的 Scikit-Learn 速查表 AI 建模工具速查 | Scikit-Learn 使用指南 做一个疾速理解。
(6) XGBoost
XGBoost 是 eXtreme Gradient Boosting 的缩写称说,它是一个十分弱小的 Boosting 算法工具包,优良的性能 (成果与速度) 让其在很长一段时间内霸屏数据迷信较量解决方案榜首,当初很多大厂的机器学习计划依旧会首选这个模型。XGBoost 在并行计算效率、缺失值解决、管制过拟合、预测泛化能力上都变现十分优良。
想对 XGBoost 有具体理解的宝宝,欢送查看 ShowMeAI 的文章 图解机器学习 | XGBoost 模型详解 了解其原理,以及文章 XGBoost 工具库建模利用详解 理解具体用法。
(7) LightGBM
LightGBM 是微软开发的 boosting 集成模型,和 XGBoost 一样是对 GBDT 的优化和高效实现,原理有一些相似之处,但它很多方面比 XGBoost 有着更为优良的体现。
想对 LightGBM 有具体理解的宝宝,欢送查看 ShowMeAI 的文章 图解机器学习 | LightGBM 模型详解 了解其原理,以及文章 LightGBM 工具库建模利用详解 理解具体用法。
3. 我的项目详情介绍
本我的项目源于 Kaggle 平台的大数据机器学习较量 Rossmann Store Sales,上面对其开展做介绍。
3.1 背景介绍
Rossmann 成立于 1972 年,是德国最大的日化用品超市,在 7 个欧洲国家有 3000 多家商店。商店不定时会举办短期的促销流动以及间断的促销流动以此来进步销售额。除此之外,商店的销售还受到许多因素的影响,包含促销、竞争、学校和国家假日、季节性和周期性。
3.2 数据介绍
数据以 1115 家 Rossmann 连锁商店为钻研对象,从 2013 年 1 月 1 日到 2015 年 7 月共计录 1017209 条销售数据(27 个特色)。
数据集一共涵盖了四个文件:
train.csv
:含有销量的历史数据test.csv
:未含销量的历史数据sample_submission.csv
:以正确格局提交的示例文件store.csv
:对于每个商店的一些补充信息
其中,train.csv
中的数据中一共含有 9 列信息:
store
:为对应店铺的 id 序号DayOfWeek
:代表着每周开店的天数Data
:是对应销售额 Sales 产生的日期Sales
:就是销售额的历史数据Customers
:为进店的客人数量Open
:则示意这个店铺是否开门与否Promo
:示意商店是否在当天有促销流动StateHoliday
:与 SchoolHoliday 别离示意了是否是国定假日或是学校假日。
(1) train.csv
咱们在 Kaggle 的 data 页面下部的数据概览能够大抵查看每个数据的散布状况和局部数据样例如下:
(2) test.csv
test.csv
中的数据列简直和 train.csv
一样,但短少了 Sales(也就是销售数据)以及 Customers(用户流量)这两列。而咱们的最终目标就是利用 test.csv
以及 store.csv
中的补充信息预测出 test.csv
中缺失的 Sales 数据。
test.csv
的数据分布状况,能够看到和下面相比短少了 Sales 以及与 Sales 有强关联的 Customer 数据。
数据分布和局部示例数据如下:
(3) sample_submission.csv
后果文件 sample_submission.csv
中仅有 id 与 Sales 这两列,这个文件是咱们将咱们的预测答案提交至 Kaggle 的判题器上的规范格局模板。
在 Python 中咱们只须要关上此文件,并将预测数据依照程序填入 Sales 这一列后,应用 Dataframe.to_csv(‘sample_submission.csv‘)
后就能够将带有预测数据的 sample_submission.csv
保留至本地并筹备后续上传。
(4) store.csv
大家能够看到,train.csv
与 test.csv
中有对应的店铺 id,这些店铺 id 的详细情况就对应在 store.csv
中,其中记录了一些店铺的地理位置信息以及营促销信息。
store.csv
的数据分布状况,能够留神到这里有很多离散的类别标签。
数据分布和局部示例数据如下:
其中:
Store
:对应示意了店铺的编号。StoreType
:店铺的品种,一共有 a、b、c、d 四种不同品种的店铺。大家能够把它设想成快闪店,一般营业店,旗舰店,或 mini 店这样咱们生存中的类型。Assortment
:用 a、b、c 三种分类形容店铺内售卖产品的组合级别。例如旗舰店和 mini 店中组合的产品必定是有很大不同的。Competition Distance
、Competition Open Since Year
、Competition Open Since Month
:别离示意最近的竞争对手的店铺间隔,开店工夫(以年计算),开店工夫(以月计算)。Promo2
:形容该店铺是否有长期的促销流动。Promo2 Since Year
于Promo2 Since Week
:别离示意商店开始参加促销的年份和日历周。Promo Interval
:形容promo2
开始的间断距离,以促销从新开始的月份命名。
3.3 我的项目指标
在理解了这些数据后咱们就须要明确一下咱们的我的项目目标,在 Rossmanns 销售预测中,咱们须要利用历史数据,也就是 train.csv
中的数据进行监督学习。训练出的模型利用通 test.csv 中的数据进行模型推断 (预测),将预测出的数据以sample_submission.csv
的格局提交至 Kaggle 进行评分。在这过程中还能够联合 store.csv
中的补充信息增强咱们模型取得数据的能力。
3.4 评估准则
模型所驳回的评估指标为 Kaggle 在比赛中所举荐的 Root Mean Square Percentage Error (RMSPE)指标。
$$
RMSPE = \sqrt{\frac{1}{n}\sum\limits_{i=1}^n\left(\frac{y_i-\hat{y}_i}{y_i}\right)^2}
= \sqrt{\frac{1}{n}\sum\limits_{i=1}^n\left(\frac{\hat{y}_i}{{y}_i}-1\right)^2}
$$
其中:
- \(y_i \)代表门店当天的实在销售额。
- \(\hat{y}_i \)代表绝对应的预测销售额。
- \(n \) 代表样本的数量。
如果有任何一天的销售额为 0,那么将会被疏忽。最初计算失去的这个 RMSPE 值越小代表误差就越小,相应就会取得更高的评分。
4.EDA 探索性数据分析
本案例波及到的数据规模比拟大,咱们无奈间接通过肉眼查看数据个性,然而对于数据分布个性的了解,能够帮忙咱们在后续的开掘与建模中获得更好的成果。咱们在这里会借助之前介绍过的 Pandas、Matplotlib、Seaborn 等工具来对数据进行剖析和可视化了解。
这个局部咱们应用的 IDE 为 Jupyter Notebook,比拟不便进行交互式绘图摸索数据个性。
4.1 折线图
咱们应用了 matplotlib.pyplot
绘制了序号为 1 的店铺从 2013 年 1 月到 2015 年月的销售数据的曲线图。
train.loc[train['Store']==1,['Date','Sales']].plot(x='Date',y='Sales',title='The Sales Data In Store 1',figsize=(16,4))
代码解释:
- 咱们应用 Pandas 读取
train.csv
到train
变量中。 -
再利用
.loc()
这个函数对 train 这个 Dataframe 进行了数据筛选。- 筛选出 Store 编号为 1 的所有数据中的 Date 与 Sales 这两列数据,也就是下中对应的 x 轴与 y 轴。
-
而后利用 Pandas 内置的
plot
办法进行绘图。在plot()
中咱们给图片设定了一系列的客制化参数:- x 轴对应的数据为
Date
列 - y 轴的数据为
Sales
列 - 设定了图片的题目为
The Sales Data In Store 1
- 图片的尺寸为(16, 4)
- x 轴对应的数据为
- Matplotlib 中的
figsize
参数能够束缚图片的长宽以及大小,咱们这里设置为(16, 4),象征可视化图片的像素大小为 1600*400 像素。
编号为 1 号的店铺从 2013 年 1 月至 2015 年 8 月的销售量曲线图
如果咱们想查看肯定工夫范畴内的销售额数据,能够调整 loc
函数内容对 x 轴进行范畴选取。
train.loc[train['Store']==1,['Date','Sales']].plot(x='Date',y='Sale s',title='Store1',figsize=(8,2),xlim=['2014-6-1','2014-7-31'])
上述代码减少了 xlim 参数,达到了在 x 轴上对工夫线进行截取的目标。
编号为 1 号的店铺从 2014 年 6 月 1 日至 2014 年 7 月 31 日的销售量曲线图
4.2 单变量分布图
上面咱们对单维度特色进行数据分析,Seaborn 提供了 distplot()
这个不便就能够绘制数据分布的 api。
sns.distplot(train.loc[train['Store']==1,['Date','Sales']]['Sales'],bins=10, rug=True)
失去的后果如下,即一号店铺这么多年来全副销售状态的散布状况。
编号为 1 号的店铺从 2013 年 1 月至 2015 年 8 月的销售量数据分布
通过数据分布图就能够看出数据次要散布在 4000-6000 这一销售额中,数据的散布范畴则从 2000-10000,整体根本合乎高斯分布(正态分布)。
因为销售额是咱们的预测指标,提前明确预测数据的散布十分有用,在训练集和测试集的散布显著有区别时,咱们在预测的数据上进行肯定的操作 (例如乘以一个固定系数进行调整等),有时能够大幅改善预测的成果,在后续的建模局部咱们也会采纳这个策略。
同样的单变量散布剖析,能够利用在其余的特色变量上。
4.3 二元变量联结分布图
除了对单变量进行散布剖析,咱们还能够通过对二元变量进行穿插联结散布剖析取得更多的关联信息。在 Seaborn 中的 jointplot()
函数能够帮忙咱们很好的剖析两个变量之间的关系。
sns.jointplot(x=train["Sales"], y=train["Customers"], kind="hex")
下图中显示了销售额 (x 轴) 与客户流量 (y 轴) 之间的关系,并且在各自的轴上显示了对于轴的数据分布状态。
2013 年 1 月至 2015 年 8 月的销售量与客户流量的关系
二元变量关联剖析绘图,能够帮咱们直观地察看出两列数据之间的相关性,在上图中咱们就能够很轻易的观测出客户流量和销售流量是有肯定线性关系的。
在 jointplot()
中还能够给其传递不同的 kind 参数扭转图像的格调,例如下图中咱们将 kind 的参数从 hex
改为reg
,下图格调就从六边形格调变成了如下格调,并减少了两个列数据组成的回归线以示意数据的根本趋势。
2013 年 1 月至 2015 年 8 月的销售量与客户流量的关系
下面绘制的图中,还出现了一些参数指标信息如 kendaltau=0.76
以及 p=2.8e-19
这些信息。这能够联合 scipy
以及函数中的 stat_func=
参数进行计算指标的传递。
这里给出范例代码:
sns.jointplot(x=train["Sales"], y=train["Customers"], kind="hex", stat_func=stats.kendalltau, kind="reg")
4.4 箱线图
其余罕用的剖析工具还包含箱线图(Box-plot,又称为盒须图、盒式图或箱形图),它能够清晰出现数据分布的统计个性,包含一组数据的最大值、最小值、中位数及高低四分位数。
上面以销售数据为例,解说应用 Seaborn 中的 boxplot()
函数对销售数据进行剖析的过程。
sns.boxplot(train.Sales, palette="Set3")
其中,train.Sales
是另外一种读取 Pandas 某列数据的形式,当然你也能够应用 x=train ["Sales"]
来达到同样的成果。
销售额数据的箱线图
咱们想将销售数据分成 4 个箱线图 (不同店铺类型),每个箱线图示意一周店铺类型的销售额。先将 store 中的 storeTpye 店铺类型数据放入train
的数据中,即如下做合并。
train = pd.merge(train, store, on='Store')
上述代码中 merge
将两个 Dataframe 数据以某一列为索引进行合并,合并的根据为参数 on
。在这里将参数on
设置为了 Store
就意味着以 Store` 为索引进行合并。
接下来咱们能够应用 boxplot()
函数进行两列数据的联合剖析,其中 x 轴应该是店铺类别数据而 y 应该是销售额的箱线图数据。
sns.boxplot(x="StoreType", y="Sales", data=train, palette="Set3")
palette
参数能够调节箱线图的配色状态,这里用的是Set3
(色调能够依据本人的集体爱好或展现要求进行批改)。
不同店铺类型下的销售额箱线图状况
能够看出不同店铺类型特地是店铺类型 b 的店铺销售额要显著高出其余店铺。a、c、d 三种店铺的无论是中位数还是四分位数数据都基本相同。
Seaborn 中的函数 violinplot()
也提供了和箱线图性能相似的提琴图性能,上面以代码举例。
sns.violinplot(x="StoreType", y="Sales", data=train, palette="Set3")
不同店铺类型下的销售额提琴图状况
在提琴图中将箱线图里中位数,四分位的地位标线等数据变为了数据的整体散布状况,在这里咱们看见 a、d、c 三类店铺都有很多数据十分靠近于 0,这可能是店铺在那一天关门等状况导致的。
4.5 热力求
如果咱们心愿更清晰地摸索多变量之间的两两关联度,热力求是一个很不错的抉择。作为一种密度图,热力求个别应用具备显著色彩差别的形式来出现数据成果,热力求中亮色个别代表事件产生频率较高或事物散布密度较大,暗色则反之。
在 Seaborn 中要绘制热力求,咱们会利用到 Pandas 中的 corr()
函数,该函数计算每列数据之间的相关性。这里的相关性为 Pearson 相关系数,能够由以下公式失去。
$$\rho_{X, Y}=\frac{\operatorname{cov}(X, Y)}{\sigma_{X} \sigma_{Y}}=\frac{E\left(\left(X-\mu_{X}\right)\left(Y-\mu_{Y}\right)\right)}{\sigma_{X} \sigma_{Y}}$$
计算相关性矩阵的代码如下所示:
train_corr = train.corr()
接下来就能够间接利用 Seaborn 的 heatmap()
函数进行热力求的绘制。
sns.heatmap(train.corr(), annot=True, vmin=-0.1,vmax=0.1,center=0)
上述代码中:
- 参数
annot=True
是在热力求上显示相关系数矩阵的数值 vim
与 vmax` 规定了右侧色卡的显示范畴,这里咱们设置为了从 -0.1 至 -0.1 的范畴center=0
示意咱们将核心值设置为 0
各列的相关性热力求
上图显示不少参数之间都具备肯定的正相关性或者负相关性,意味着这些数据之间有肯定的关联度,也就是说咱们能够将这些数据应用机器学习模型进行分类或回归。
5. 模型的训练与评估
本节咱们先带大家回顾一些机器学习基础知识,再基于不同的机器学习工具库和模型进行建模。
5.1 过拟合和欠拟合
过拟合是指模型能够很好的拟合训练样本,但对新数据的预测准确性很差,泛化能力弱。欠拟合是指模型不能很好的拟合训练样本,且对新数据的预测性也不好。
过拟合欠拟合示意图
更具体的解说大家能够参考 ShowMeAI 的文章图解机器学习 | 机器学习基础知识
5.2 评估准则
在 Scikit-Learn,XGBoost 或是 LightGBM 中,咱们往往应用各种评估规范来表白模型的性能。最罕用的往往有以下评估准则,对应二分类,多分类,回归等等不同的问题。
rmse
:均方根误差mae
:均匀绝对误差logloss
:负对数似然函数值error
:二分类错误率merror
:多分类错误率mlogloss
:多分类 logloss 损失函数auc
:曲线下面积
当然也能够通过定义本人的 loss function 进行损失函数定义。
5.3 穿插验证
留出法的数据划分,可能会带来偏差。在机器学习中,另外一种比拟常见的评估办法是穿插验证法——K 折穿插验证对 K 个不同分组训练的后果进行均匀来缩小方差。
因而模型的性能对数据的划分就不那么敏感,对数据的应用也会更充沛,模型评估后果更加稳固,能够很好地防止上述问题。
更具体的解说大家能够参考 ShowMeAI 的文章 图解机器学习 | 机器学习基础知识。
5.4 建模工具库与模型抉择
本我的项目很显然是一个回归类建模问题,咱们能够先从回归树 ( 图解机器学习 | 回归树模型详解 ),后能够尝试集成模型,例如随机森林( 图解机器学习 | 随机森林分类模型详解 )、XGBoost( 图解机器学习 | XGBoost 模型详解 )、LightGBM( 图解机器学习 | LightGBM 模型详解)。
思考到加入较量的同学的整体算力资源可能参差不齐所以本文将次要解说如何利用 LightGBM 进行模型的训练。本文只提供一些外围代码演示,更加细节的文档能够参考 LightGBM 中文文档。
大家通过 ShowMeAI 后面的工具库详解 LightGBM 建模利用详解 晓得,如果用 LightGBM 进行训练学习,训练代码非常简单:
model = lgb.train(params=lgb_parameter, feval=rmsle, train_set=train_data, num_boost_round=15000, valid_sets=watchlist, early_stopping_rounds=1000, verbose_eval=1000)
代码解释:
params
:定义 lgb 算法的一些参数设置,如评估规范,学习率,工作类型等。feval
:能够让 lgb 应用自定义的损失函数。train_set
:训练集的输出。num_boost_round
:最大的训练次数。valid_sets
:测试集的输出。early_stopping_rounds
:当模型评分在 n 个回合后还没有进步时就完结模型将最佳的点的模型保留。verbose_eval
:示意每多少论返回一次训练的评估信息,这里定义了每 1000 轮保留一次。
5.5 数据预处理
为了建模有好的成果,咱们很少间接用原始数据,个别会先对数据进行预处理。
咱们先用 pd.merge
办法将 store
与train
数据合并,失去以下 DataFrame 数据:
合并后数据的前 5 行概览
首先咱们看到有一些类别型字段,比方 SotreType
、Assortment
以及 StateHoliday
,是以 a、b、c、d 这样的数值模式保留的,罕用的数据预处理或者特色工程,会将其进行编码。咱们这里用mapping
函数将其编码变换为 0123 这样的数字。
mappings = {'0':0, 'a':1, 'b':2, 'c':3, 'd':4}
data['StoreType'] = data.StoreType.map(mappings)
data['Assortment']= data.Assortment.map(mappings)
data['StateHoliday']= data.StateHoliday.map(mappings)
再留神到工夫型的字段 date,是以 YYYY-MM-DD
这样的日期工夫戳的模式记录的。咱们最常做的操作,是将工夫戳拆分开来,比方年月日能够拆分成 Year
、Month
、Day
这样的模式会更有利于咱们的模型学习到无效的信息。
data['Year'] = data.Date.dt.year
data['Month'] = data.Date.dt.month
data['Day'] = data.Date.dt.day
data['DayOfWeek'] = data.Date.dt.dayofweek
data['WeekOfYear'] = data.Date.dt.weekofyear
上述代码还抽取了「一年内的第几周」和「一周中的第几天」两列额定信息。这些都能够在 Pandas 中的 dt 办法中找到。
再看 CompetitionOpenSince
和Promo2Since
两个字段,这两列数据表示促销开始的工夫,这样的数据是固定的,然而开始的工夫到以后工夫点的数据是很有价值帮忙咱们预测销售额。所以这里须要肯定变动,咱们将促销开始的工夫减去以后 data 的工夫即可。
data['CompetitionOpen']=12*(data.Year-data.CompetitionOpenSinceYear)+(data.Month - data.CompetitionOpenSinceMonth)
data['PromoOpen'] = 12 *(data.Year-data.Promo2SinceYear)+ (data.WeekOfYear - data.Promo2SinceWeek) / 4.0
data['CompetitionOpen'] = data.CompetitionOpen.apply(lambda x: x if x > 0 else 0)
data['PromoOpen'] = data.PromoOpen.apply(lambda x: x if x > 0 else 0)
CompetitionOpen
和 PromoOpen
是两列计算间隔促销,或竞争对手开始工夫长短的字段,用于表白促销或竞争对手对于销售额的影响。咱们先做异样值解决(滤除所有负值)。
在数据中还有一列 PromoInterval
以列出月信息的模式贮存正在促销的月份,咱们想将其转化为以月份信息为准,如这个工夫点的月份在这个 PromoInterval
中则这一店的这一时间点在促销中。
data.loc[data.PromoInterval == 0, 'PromoInterval'] = ''data['IsPromoMonth'] = 0
for interval in data.PromoInterval.unique():
if interval != '':
for month in interval.split(','):
data.loc[(data.monthStr == month) & (data.PromoInterval == interval), 'IsPromoMonth'] = 1
和店铺类型中的标签转换相似,咱们将月份从数字转化为 str 类型以和 PromoInterval
进行配对用于断以后工夫是否是销售工夫,并且新建一个数据列 IsPromoMonth
进行贮存以后工夫是否为促销工夫。
当然,如果咱们深度思考,还能够有很多事件做。例如:
- 在原始数据中有很多店铺没有开门的状况,既
Open
的值为 0。而预测数值的状况下咱们默认店铺不会存在关门的状况,所以能够在数据筛选的过程中清理 Open 为 0 的状况。 - 在数据中还一部分
Sales
数值小于零的状况,这里猜想是有一些意外状况导致的记账信息谬误,所以能够在数据荡涤中时也间接过滤这一部分数据。
5.6 模型参数
很多机器学习有很多超参数能够调整,以这里的 LightGBM 为例,上面为选出的系列参数。对于 LightGBM 的参数和调参办法能够参考 LightGBM 建模利用详解。
params ={
'boosting_type': 'gbdt',
'objective': 'regression',
'metric':'rmse',
'eval_metric':'rmse',
'learning_rate': 0.03,
'num_leaves': 400,
#'max_depth' : 10,
'subsample': 0.8,
"colsample_bytree": 0.7,
'seed':3,
}
上述参数蕴含两类:
主要参数:确定工作和模型的时候就会确定下来。
boosting_type
:是模型的类型(常抉择 gbdt 或 dart)。objective
:决定了模型是实现一个分类工作还是回归工作。metric
:为模型训练时的评估准则。eval_metric
:为模型评估时的评估准则。
模型可调细节参数:对模型的构建和成果有影响的参数。
learning_rate
:示意每次模型学习时的学习率。num_leaves
:是最多叶子数。leaf-wise 的 LightGBM 算法次要由叶子数来管制成长和过拟合,如果树深为max_depth
,它的值的设置应该小于 2^(max_depth),否则可能会导致过拟合。is_unbalance
:设置能够应答类别非均衡数据集。min_data_in_leaf
:叶子节点起码样本数,调大它的值能够避免过拟合,它的值通常设置的比拟大。
# coding: utf-8
import lightgbm as lgb
import pandas as pd
from sklearn.metrics import mean_squared_error
# 设定训练集和测试集
y_train = train['Sales'].values
X_train = train.drop('Sales', axis=1).values
# 构建 lgb 中的 Dataset 格局
lgb_train = lgb.Dataset(X_train, y_train)
# 敲定好一组参数
params = {
'boosting_type': 'gbdt',
'objective': 'regression',
'metric':'rmse',
'eval_metric':'rmse',
'learning_rate': 0.03,
'num_leaves': 400,
#'max_depth' : 10,
'subsample': 0.8,
"colsample_bytree": 0.7,
'seed':3,
}
print('开始训练...')
# 训练
gbm = lgb.train(params,
lgb_train,
num_boost_round=200)
# 保留模型
print('保留模型...')
# 保留模型到文件中
gbm.save_model('model.txt')
参考资料
- 数据分析系列教程
- 机器学习算法系列教程
- Kaggle Rossmann Store Sales 机器学习较量
- 数据迷信工具速查 | Numpy 使用指南
- 数据迷信工具速查 | Numpy 使用指南
- 数据迷信工具速查 | Pandas 使用指南
- 数据迷信工具速查 | Matplotlib 使用指南
- 数据迷信工具速查 | Seaborn 使用指南
- AI 建模工具速查 | Scikit-Learn 使用指南
- 图解机器学习 | XGBoost 模型详解
- 图解机器学习 | LightGBM 模型详解
ShowMeAI 系列教程举荐
- 图解 Python 编程:从入门到精通系列教程
- 图解数据分析:从入门到精通系列教程
- 图解 AI 数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程
- 图解机器学习算法:从入门到精通系列教程
- 机器学习实战:手把手教你玩转机器学习系列
相干文章举荐
- Python 机器学习算法利用实际
- SKLearn 入门与简略利用案例
- SKLearn 最全利用指南
- XGBoost 建模利用详解
- LightGBM 建模利用详解
- Python 机器学习综合我的项目 - 电商销量预估
- Python 机器学习综合我的项目 - 电商销量预估 < 进阶计划 >
- 机器学习特色工程最全解读
- 自动化特色工程工具 Featuretools 利用
- AutoML 自动化机器学习建模