Press "Enter" to skip to content

使用 EvalML 自动机器学习完成 NLP 任务

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

 

 

本文中将介绍如何使用 EvalML 自动化机器学习,并一起研习是否可以使用 EvalML 自动化 NLP 任务?如果你对自动机器学习框架EvalML还不是很熟悉,建议戳:point_right: 一文彻底搞懂自动机器学习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/

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。