炼数成金 门户 商业智能 机器学习 查看内容

原创翻译 | 使用MLBox的自动机器学习教程

2018-5-16 14:15| 发布者: 炼数成金_小数| 查看: 8453| 评论: 0

摘要: 目录 MLBox 是什么? MLBox 与其他机器学习框架的对比 安装 MLBox MLBox 的布局/流水线 使用 MLBox 构建一个机器学习回归器 对 Drift (漂移)的基本理解 对 Entity Embedding (嵌入式实体)的基本理解 MLBox 的优势 ...

Python 算法 模型 测试 机器学习

介绍

最近我和一个朋友在解决一个实践上的问题。我的朋友Shubham,经过了长达8个小时的苦干和编程,好不容易得了1153分,排名219。下面是榜单:

而我只需要8行代码就可以比他排名更靠前:

我是怎么做到的呢?

如果我告诉你有个现成的库叫做 MLBox,它替你完成了机器学习中大部分艰苦的工作,从而使你只需要写最少的代码呢?从缺值归纳到使用嵌入式实体对分类特征进行特征工程,MLBox全都有。


在使用 MLBox 的8行代码中,我还做了超参优化并以闪电般的速度对50多个模型进行了测试——是不是很棒?读完本文,你也能这么干。


目录
MLBox 是什么? 
MLBox 与其他机器学习框架的对比 
安装 MLBox MLBox 的布局/流水线 
使用 MLBox 构建一个机器学习回归器 
对 Drift (漂移)的基本理解 
对 Entity Embedding (嵌入式实体)的基本理解
MLBox 的优势与劣势 
注意事项 


1. MLBox 是什么?

据 MLBox 的开发者讲,

“MLBox 是一个强大的自动化机器学习库,它有以下特性

快速读取以及分布式进行数据处理/清洗/格式化 高度鲁棒性的特征选取和内存泄漏检测 高维空间的较精确超参优化 分类与回归中完美的预测模型 (深度学习,堆叠,轻量级GBM,…) 模型解读的预测 2. MLBox 与其他机器学习库的对比

 

相对于其他的库,MLBox 专注与以下三点:

漂移发现 – 一种使训练数据的分布与测试数据更相似的方法。 嵌入式实体 – 受Word2vec启发的一种特征分类编码技术。  超参优化

下面我们讲更加详细地讨论这几点以给大家更清晰的印象。


3. 安装 MLBox

MLBox 目前只能在 Linux 上运行。 MLBox 主要是采用Python 2 开发的,最近才支持 Python 3. 我们这里安装 MLBox 的开发版3.0. 以下为Linux下安装步骤:

使用下列命令建立Python 3.x 和 anaconda 的 Conda环境。
conda create -n Python3 python=3 anaconda    #Python3 是我们建立的环境名 激活Python 3环境
source activate Python3 下载MLBox
curl -OL https://github.com/AxeldeRomblay/mlbox/tarball/3.0-dev 解压缩
sudo tar -xzvf 3.0-dev 进入解压后目录
cd AxeldeRomblay-MLBox-2befaee 安装MLBox
cd python-package
cd dist
pip install *.whl 安装其他附加库
pip install lightgbm
pip install xgboost
pip install hyperopt
pip install tensorflow
pip install keras
pip install matplotlib
pip install ipyparallel
pip install pandas 确认安装正常
python
import mlbox
如果加载无误,说明安装成功。接下来将安装其他的库。

 

注意 – 目前这个库的开发非常活跃,所以可能不太稳定。例如,两天以前在Python 2.7下还很正常,而不能在Python 3.6下运行。但是截至本文写作期间,2.7版反而不行了,3.0版倒没问题。另外如果有任何Bug发现或者意见请尽管在GitHub上开Issue或者注释。


4. MLBox 的布局/流水线

完整流水线:


整个MLBox流水线分为3个部分/子包:


预处理 优化 预测

下面将对各部分详细分别叙述。


预处理

这个子包中的所有功能都可以通过命令mlbox使用。预处理入口*

该子包主要提供了两个主要功能。


读取和清理文件

此包支持读取各种文件格式,如CSV、Excel、hdf 5、JSON等,但在本文中,我们将主要看到最常见的“.csv”文件格式。按照下面的步骤s读取CSV文件。

步骤1:使用分隔符作为参数创建Reader类的对象。“,”是CSV文件中的分隔符。s=“,”r=Reader(s)  #初始化Reader类的对象

步骤2:列出火训练和测试文件路径的列表,并确定目标变量名。

路径=[“训练CSV文件的路径”,“测试CSV文件的路径”]

目标_名称=“训练文件中目标变量的名称”

步骤3:执行清理操作,并创建一个清理过的训练和测试文件。数据=r。训练_测试_分裂(路径,目标_名称)。

上述步骤中执行的清理步骤是

-删除未命名列

-移除重复项

-从日期列提取周中的年、月、日

移除漂移变量

漂移变量在后面的章节中进行了解释。要删除漂移变量,请遵循以下步骤。

步骤1:创建一个类Drift_thresholder
dft=Drift_thresholder()

步骤2:使用创建对象的拟合变换方法删除漂移变量。
data=dft.fit_transform(data)


最优法

这个子包中的所有功能都可以通过命令mlbox使用。优化进口*

这是这个库得分较高的部分。这个库中的超参数优化方法使用的是Hyperopt库,它非常快速,从选择正确的缺失值插补方法到XGBoost模型的深度,您可以几乎优化此库中的任何内容。这个库创建了要优化的参数的高维空间并选择了降低验证分数的参数的较佳组合。

下面是MLBox库中所做的四大优化的表,其中的词条位于连字符的右侧,可以为不同的值进行优化。

缺失值编码器(ne)-数值_策略(当要计算的列是连续列时,例如-均值、中值等)、范畴_策略(当要计算的列是分类列时,例如-NaN值等)。

分类值编码器(ce)–策略(分类变量的编码方法,如标签编码,虚拟化、随机投影、实体嵌入)。

特征选择器(fs)–策略(不同的特征选择方法,如l1、方差、rf_feature_importance),阈值(要丢弃的特征的百分比)。

估计器(est)–策略(可用作估计器的不同算法,例如-LightGBM、xgBoost等),**Params(与所使用的算法相关的参数,如Eg-max_DEAD、n_估值器等)。

让我们举个例子,创建一个要优化的超参数空间。让我们陈述我想要优化的所有参数:

使用的算法-LightGBM
LightGBM 较大深度-[3,5,7,9]
LightGBM n_估计器-[250,500,700,1000]
特征选择-[方差,l1,随机森林特征重要性]

缺失值估算-数值(平均值,中值),分类(NAN值)

分类值编码器-标签编码,实体嵌入与随机投影。

现在让我们创建我们的超参数空间。在此之前,请记住,超参数是键和值对的字典,其中值也是由语法{“search”:strategy,”space”:list}给出的,其中的策略可以是”选择“或”统一“,列表是值的列表。

space={'ne_numerical_strategy':{"search":"choice","space":['mean','median']},
'ne_categorical_strategy':{"search":"choice","space":[np.NaN]},
'ce_strategy':{"search":"choice","space":['label_encoding','entity_embedding','random_projection']},
'fs_strategy':{"search":"choice","space":['l1','variance','rf_feature_importance']},
'fs_threshold':{"search":"uniform","space":[0.01, 0.3]},
'est_max_depth':{"search":"choice","space":[3,5,7,9]},
'est_n_estimators':{"search":"choice","space":[250,500,700,1000]}}


现在,我们将看到使用以下步骤从上述空间中选择较佳组合的步骤:

Step1: 创建一个类Optimiser的对象,该对象的参数为‘scoring’ 和‘n_folds’. scoring是我们想要优化我们的超参数空间的标准,n_folds则是交叉验证的折叠数。

Scoring 值Classification- "accuracy", "roc_auc", "f1", "log_loss", "precision", "recall"
Scoring 值为Regression- "mean_absolute_error", "mean_squarred_error", "median_absolute_error", "r2"
opt=Optimiser(scoring="accuracy",n_folds=5)

步骤2:使用上面创建对象的优化函数,该函数以超参数空间、由train_test_split创建的字典和迭代次数作为参数。本函数从超参数空间返回较佳超参数。
best=opt.optimise(space,data,40)


预测

这个子包中的所有函数都可以使用下面的mlbox命令来安装。预测进口*

这个分包预计使用较佳的超参数的优化计算分包测试数据集。要在测试数据集上进行预测,请执行以下步骤。


步骤1:创建类预测器的对象
pred=Predictor()

Step2: Use the fit_predict method of the object created above which takes a set of hyperparameters and dictionary created through train_test_split as the parameter.步骤2:使用上面创建的对象的拟合预测方法,该方法以一组超参数和通过train_test_split创建的字典作为参数。

pred.fit_predict(best,data)

上述方法将特征重要性、漂移变量系数和最终预测保存到一个名为“Save”的单独文件夹中。


5. 使用MLBox来建立一个机器学习回归器

我们现在要用带有超参数优化的短短7行代码建立一个机器学习分类器。我们将解决的大型超市的销售问题。下载训练集和测试集文件并将它们保存在同一个文件夹中。 应用MLBox包,我们甚至都不用看那些数据,就能提交我们的第一份预测结果。你可以在下面找到这些代码来进行这个问题的预测。


Java"># coding: utf-8

# importing the required libraries
from mlbox.preprocessing import *
from mlbox.optimisation import *
from mlbox.prediction import *

# reading and cleaning the train and test files
df=Reader(sep=",").train_test_split(['/home/nss/Downloads/mlbox_blog/train.csv',

 '/home/nss/Downloads/mlbox_blog/test.csv'],'Item_Outlet_Sales')

# removing the drift variables
df=Drift_thresholder().fit_transform(df)

# setting the hyperparameter space
space={'ne__numerical_strategy':{"search":"choice","space":['mean','median']},
'ne__categorical_strategy':{"search":"choice","space":[np.NaN]},
'ce__strategy':{"search":"choice","space":['label_encoding','entity_embedding','random_projection']},
'fs__strategy':{"search":"choice","space":['l1','variance','rf_feature_importance']},
'fs__threshold':{"search":"uniform","space":[0.01, 0.3]},
'est__max_depth':{"search":"choice","space":[3,5,7,9]},
'est__n_estimators':{"search":"choice","space":[250,500,700,1000]}}

# calculating the best hyper-parameter
best=Optimiser(scoring="mean_squared_error",n_folds=5).optimise(space,df,40)

# predicting on the test dataset
Predictor().fit_predict(best,df)

上述代码在公共排行榜中排名108(前1%),这甚至是在不需要打开训练集和测试集文件的情况下。我认为这太可怕了!

以下是由LightGBM计算出的特征重要度的图解。


6.漂流的基本认识

漂流不是一个常见的话题,而是一个非常重要的话题,值得自己写一篇文章。但是,我将试图简单地解释一下Drift_Thresholder处理器的功能。

通常,我们假设训练和测试数据集是通过相同的生成算法或过程创建的,但是这种假设是相当强的,我们在现实世界中看不到这种行为。在现实世界中,数据生成器或进程可能会发生变化。例如,在销售预测模型中,客户行为随时间而变化,因此生成的数据将不同于用于创建模型的数据。这就是所谓的漂移。


另一点要注意的是,在数据集中,独立特征和依赖特征都可能发生漂移。当独立特征发生变化时,称为协变量转移,当独立特征与依赖特征之间的关系发生变化时,称为概念转移。MLBox处理协变量转移。 


漂移检测的一般算法如下:

7.对实体嵌入的基本理解

实体嵌入的存在归功于Word2vec嵌入,因为它们的功能与Word向量的功能相同。例如,我们知道在字向量表示中,我们可以做下面这样的事情。


在类似的意义上,可以编码分类变量以创建新的信息特性。在Kaggle的Rossmann销售问题上,他们的影响是显而易见的,在这个问题上,一个团队使用了实体嵌入和神经网络,在没有执行任何重要的特性工程的情况下名列第三。在这里可以找到整个代码和关于实体嵌入的研究论文。实体嵌入能够捕捉到德国政府之间的关系。如下所示。

我不想让你陷入对实体嵌入的解释。它应该有自己的文章。在MLBox中,可以使用实体嵌入作为对分类变量进行编码的黑匣子。

8.MLBox的利弊


这个库有自己的优点和缺点。

优点是:

自动任务识别,即分类或回归

读取数据时的基本预处理

移除漂移变量

非常快速和较精确的超参数优化

多种特征选择方法

最少的代码行

基于实体嵌入的特征工程


缺点是:


它仍处于积极的发展中,任何时候都有可能发生破坏

不支持无监督学习

基本特征工程。你还得创造自己的特色。

纯粹基于数学的特征选择方法。此方法可能会删除从业务角度来看有意义的变量。

不是真正的自动机器学习库。

所以,我建议你权衡利弊,然后再把它作为机器学习的主流库。


9. 结语

一在GitHub上看见这个库发布时,我就兴奋地去尝试使用这个库。我花了几天时间研究这个库并进行了简化,供你们马上使用。我不得不说我被这个库震撼了,并且我将深入探索。只用8行代码,我就能进入前1%,而不必花明确的时间进行数据处理和超参数优化,我可以把更多的时间投入到特征工程和在实战中检验它们。如有任何帮助或想法,请随时评论。


英文原文:https://www.analyticsvidhya.com/blog/2017/07/mlbox-library-automated-machine-learning/


欢迎加入本站公开兴趣群

商业智能与数据分析群

兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识

QQ群:81035754


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2018-5-27 20:05 , Processed in 0.076730 second(s), 26 queries .