本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.
本文中将介绍如何使用 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