本文中将介绍如何使用 EvalML 自动化机器学习,并一起研习是否可以使用 EvalML 自动化 NLP 任务?如果你对自动机器学习框架EvalML还不是很熟悉,建议戳👉​一文彻底搞懂自动机器学习AutoML:EvalML。接下来跟小猴子一起研习吧!

什么是 EvalML

它是一个 AutoML 库,可使用特定领域的目标函数构建、优化和评估机器学习管道。它实际上避免了手动训练和调整模型,一切交与自动化机器学习。它在内部使用数据表(data tables,),比数据框(data frames)快 20 倍。在它内部构建了多个管道,包括最先进的预处理、特征工程、特征选择和各种优秀的建模技术。

数据集

在本文中,我们使用的是Spam and Ham Dataset数据集。该数据集具有一个因变量(Category类别)和自特征(Message消息)。我们的目标是预测邮件是否是垃圾邮件。数据集地址[1]

任务开始

没有安装的直接pip install evalml即可。
# 导入 urllib.request 从超链接导入数据集
from
 urllib.request 
import
 urlopen 

import
 pandas 
as
 pd 

# storing the csv file in variable
hyperlink = 

input_data = urlopen(hyperlink)

# readinng csv file
data = pd.read_csv(input_data) 

data.head()

从CSV文件中读取数据,在EvalML的帮助下开发一个模型,并为本次目标寻找最佳模型。这里不需要手动进行文本特征化,所有的事情都将由EvalML自动执行。现在把数据集分成自变量和因变量。
X=data.drop(
'Category'
,axis=
1

y=data[
'Category'
]

检查数据集是否平衡。

y.value_counts(normalize=
True
)

ham 0.750084

spam 0.249916

Name: Category, dtype: float64

把数据集分成训练集和测试集。

使用 evalml 将数据集分割成训练集和测试集部分,这里提到的 problem_type,实际上是试图解决的问题类型。
import
 evalml

X_train,X_test,y_train,y_test =  \

evalml.preprocessing.split_data(X,y,problem_type=
'binary'
)

EvalML 中可用的问题陈述

evalml.problem_types.ProblemTypes.all_problem_types

执行自动化 EvalML 任务并检查最适合问题陈述的模型

automl = AutoMLSearch(X_train=X_train,

                      y_train=y_train,

                      problem_type=
'binary'
,

                      max_batches=
1
,

                      optimize_thresholds=
True

automl.search()

最后,得到了最适合问题陈述的算法。在这里,它采用所有适合我们的问题陈述的算法,然后自动创建许多管道并调整参数。在所有的管道中,它选择了最好的,其准确性更高。可以必须传递一些参数,可以阅读此处提供的文档[2] 更加深入挖掘该问题。
还可以根据特定目标调整模型。这里的目标是指用于检查模型效率或准确性的参数,例如 AUC、F1 分数、召回率或精度。可以使用 “objectives”“additional_objectives” 参数。
EvalML 将比 additional_objectives 更关注向目标传递参数。注意不要混淆,它只会以这样一种方式训练和调整模型,以便我们为 “objectives”“additional_objectives” 中可用的参数获得优化值。

在本次问题中,最好的管道是:

  • Best pipeline:带有文本特征化组件的随机森林分类器
  • Best pipeline:  Log Loss:0.154849

根据准确性和各种目标获得最佳模型

automl.rankings

获取最佳pipeline

best_pipeline = automl.best_pipeline

GeneratedPipeline(parameters={

'Random Forest Classifier':

{'n_estimators': 100,

'max_depth': 6, 'n_jobs': -1},})

详细描述最佳管道

automl.describe_pipeline(automl.rankings.iloc[
0
][
"id"
])

使用最佳模型评估测试数据

scores = best_pipeline.score(X_test, y_test, 

      objectives=evalml.objectives.get_core_objectives(
'binary'
)) 


print(
f'Accuracy Binary: {scores["Accuracy Binary"]}'
)    

Accuracy Binary: 0.9732441471571907

将模型保存在pickle文件中

best_pipeline.save(
"model.pkl"
)

我希望这篇文章能够帮助您理解EvalML的基础知识,以及如何使用它来为我们的问题陈述获得最合适的模型。

参考资料

[1]
数据集地址: https://featurelabs-static.s3.amazonaws.com/spam_text_messages_modified.csv
[2]
文档: https://evalml.alteryx.com/en/stable/
机器学习合集👇
长按👇关注- 机器学习研习院 -设为星标,干货速递
继续阅读
阅读原文