AutoML(TPOT)实现回归模型

一、TPOT原理

TPOT是一种AutoML的工具,借助遗传算法来生成Pipeline代码。基于Python,建立在scikit-learn的基础上。

**主要原理:**遗传算法进行特征、模型选择
目的:实现对特征、模型、超参的优化,并生成主体代码

只需要给定结构化的数据,自动的进行多模型比较调优,经过一定次数的迭代,会得到一个最优模型,框架会保留模型参数来构建一个pipelin.py,我们只需要在pipelin.py中微调数据传入的接口即可得到一个最优模型。

二、TPOT注意事项

  • 在使用TPOT进行建模前需要对数据进行必要的清洗和特征处理操作。

  • TPOT目前只能做有监督学习。

  • TPOT目前支持的分类器主要有贝叶斯、决策树、集成树、SVM、KNN、线性模型、xgboost。

  • TPOT目前支持的回归器主要有决策树、集成树、线性模型、xgboost。

  • TPOT会对输入的数据做进一步处理操作,例如二值化、聚类、降维、标准化、正则化、独热编码操作等。

  • 根据模型效果,TPOT会对输入特征做特征选择操作,包括基于树模型、基于方差、基于F-值的百分比。

  • 可以通过export()方法把训练过程导出为形式为sklearn pipeline的.py文件

三、案例实操

使用自带案例,波士顿房价预测,只需输入特征、标签即可得到较优的模型参数。

1、数据特征构建
from tpot import TPOTRegressor
from sklearn.datasets import load_boston  # 内置数据集
from sklearn.model_selection import train_test_splithousing = load_boston()  # 创建好训练数据和测试数据之后就开始正题了
X_train, X_test, y_train, y_test = train_test_split(housing.data, housing.target,test_size=0.3,random_state=22)
2、pipeline脚本生成
# 构建一个autoML 回归模型 generations表示迭代次数
tpot=TPOTRegressor(generations=30, population_size=50, verbosity=2,random_state=42)
tpot.fit(X_train, y_train)
# 开始迭代训练
print(tpot.score(X_test, y_test))
tpot.export('tpot_pipeline.py')  # 导出pipeline
3、结合pipeline脚本得到的参数进行预测

对数据处理的部分与训练脚本一致,只需将得到的pipeline脚本中的exported_pipeline 部分作为模型加入。后续如sklearn的相似,使用**.fit、.predict**等命令进行拟合和预测。经过结果打分,可得到以下结果:

# 在训练集上交叉验证得分为 -9.114431231395063
exported_pipeline = make_pipeline(SelectPercentile(score_func=f_regression, percentile=98),SelectFwe(score_func=f_regression, alpha=0.044),XGBRegressor(learning_rate=0.1, max_depth=5, min_child_weight=4, n_estimators=100, n_jobs=1, objective="reg:squarederror", subsample=0.55, verbosity=0)
)
set_param_recursive(exported_pipeline.steps, 'random_state', 42)
joblib.dump(exported_pipeline, 'Baseline_train_model.pkl')  # 保存模型

使用模型预测结果如下:

exported_pipeline.fit(training_features, training_target)  # 应用模型参数拟合模型
results = exported_pipeline.predict(testing_features)  # 对测试集进行验证
OUT[]:model MSE is 11.27model MAPE is 11.61 %model R2 is 81.45 %

代码如下:

from tpot import TPOTRegressor
from sklearn.datasets import load_boston  # 内置数据集
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
from sklearn.feature_selection import SelectFwe, SelectPercentile, f_regression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from xgboost import XGBRegressor
from tpot.export_utils import set_param_recursive
from sklearn.metrics import r2_score
from sklearn.metrics import *
import joblib
# 评价效果指标
def mape(true, predicted):"""计算mape指标"""inside_sum = np.abs(predicted - true) / truereturn round(100 * np.sum(inside_sum) / inside_sum.size, 2)def get_mape(y_true, y_pred):"""Compute mean absolute percentage error (MAPE)"""y_true, y_pred = np.array(y_true), np.array(y_pred)return np.mean(np.abs((y_true - y_pred) / y_true)) * 100def score_print(results,testing_target):"""评估模型效果"""print(f"model MSE is {round(mean_squared_error(results,testing_target), 2)}")print(f"model MAPE is {mape(results,testing_target)} %")print(f"model R2 is {round(r2_score(results,testing_target) * 100, 2)} %")if __name__ == '__main__':housing = load_boston()  # 依旧读取数据# 保障特征和标签相对应,如果做过特征处理则需要原样处理,然后再载入模型训练。tpot_data = housing.targetfeatures = housing.datatraining_features, testing_features, training_target, testing_target = train_test_split(features, tpot_data, random_state=42)# 在训练集上交叉验证得分为 -9.114431231395063exported_pipeline = make_pipeline(SelectPercentile(score_func=f_regression, percentile=98),SelectFwe(score_func=f_regression, alpha=0.044),XGBRegressor(learning_rate=0.1, max_depth=5, min_child_weight=4, n_estimators=100, n_jobs=1, objective="reg:squarederror", subsample=0.55, verbosity=0))set_param_recursive(exported_pipeline.steps, 'random_state', 42)joblib.dump(exported_pipeline, 'Baseline_train_fenlie1_model.pkl')  # 保存模型exported_pipeline.fit(training_features, training_target)  # 应用模型参数拟合模型results = exported_pipeline.predict(testing_features)  # 对测试集进行验证score_print(results, testing_target)  # 评估模型效果
3、加载pkl模型文件进行预测

对此前用joblib保存的模型参数文件进行加载,然后进行预测

def load_model_predict(model_path,training_features, training_target,testing_features,testing_target):"""joblib加载模型参数预测"""exported_pipeline_load = joblib.load(model_path)set_param_recursive(exported_pipeline_load.steps, 'random_state', 42)exported_pipeline_load.fit(training_features, training_target)  # 应用模型参数拟合模型results = exported_pipeline_load.predict(testing_features)score_print(results, testing_target)  # 评估模型效果return results

AutoML—应用TPOT实现回归预测相关推荐

  1. TF之AutoML框架:AutoML框架的简介、特点、使用方法详细攻略

    TF之AutoML框架:AutoML框架的简介.特点.使用方法详细攻略 目录 AutoML框架的简介 AutoML框架的特点 AutoML框架的使用方法 AutoML VS AutoKeras 框架 ...

  2. 【译】An Opinionated Introduction to AutoML and Neural Architecture Search

    这是系列文章的第2部分. 在这里查看第1部分和第3部分 . 来自CMU和DeepMind的研究人员最近发布了一篇有趣的新论文,称为差异化架构搜索(DARTS) ,它提供了一种神经架构搜索的替代方法,这 ...

  3. 告别调参,AutoML新书发布

    来源:专知 本文约1900字,建议阅读8分钟. <AUTOML>作者当前正在完成这本新书的编辑工作,它将由NIPS 2018出版发行. [ 导读 ]近期,由Frank Hutter, La ...

  4. 金融风控实战——风控领域涉及到的算法和风控算法工程师需要具备的能力

    一些简单的介绍 市面上算法相关的岗位,从大范围上分为两大类 1.研究驱动的算法工程师,这类算法工程师的门槛很高,分布在大型公司的研究院.创新实验室等部门,这类算法工程师主要是以研究新的算法或者是更好的 ...

  5. 自动机器学习(AutoML)

    自动机器学习(AutoML) 不再需要苦恼于学习各种机器学习的算法 目录: 一.为什么需要自动机器学习 二.超参数优化 Hyper-parameter Optimization 三.元学习 Meta ...

  6. AutoML很火,过度吹捧的结果?

    作者 | Denis Vorotyntsev 译者 | Shawnice 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) [导语]现在,很多企业都很关注AutoML领域,很多 ...

  7. 一文盘点AutoML 库,自动机器学习演讲摘要

    作者:Xu LIANG 翻译:王雨桐 校对:王威力 本文长度约为1300字,建议阅读5分钟 自动化程度 Jeff Dean在ICML 2019上进行了有关AutoML的演讲,并将自动化分为4个级别: ...

  8. AutoML自动化机器学习技术深入

    开发十年,就只剩下这套Java开发体系了 >>>    之前发表了一篇介绍AutoML技术的文章,但感觉还不够深入.今天抽出时间来仔细分析了AutoML相关框架的源码,见微知著,希望 ...

  9. 开源自动机器学习(AutoML)框架盘点

    开发十年,就只剩下这套Java开发体系了 >>>    自从Google推出了能自动设计神经网络自我进化的AutoML论文后,我便开始持续关注这个领域 到目前为止,从网上显示的信息来 ...

最新文章

  1. 【Linux】一步一步学Linux系统编程教程汇总(暂时暂停更新......)
  2. matlab安装配置vc出错,64位系统安装matlab出现mexopts.bat及出现缺少或无法安装c++ compilers 故障的解决办法.pdf...
  3. 拖欠水费可能影响个人征信,大家怎么看?
  4. mysql的Innodb为什么使用B+树
  5. Ubuntu sudo 出现unable to resolve host 解决方法
  6. 2018-06-29博客
  7. 自定义sql_基于Calcite自定义SQL解析器
  8. 《流量的秘密 Google Analytics网站分析与商业实战》一2.2 版本选择的标准
  9. 教你用SQL进行数据分析
  10. 计算机管理的服务打不开,Windows 系统服务无法打开解决方法+操作命令详解
  11. python三大神器
  12. 从认知负荷理论看语音交互设计
  13. 毕业论文开题报告撰写指南-宾夕法尼亚州立大学研究生写作中心
  14. 人力资源管理-输入、输出、工具和技术
  15. 数据压缩作业:清音、浊音、爆破音频谱分析
  16. 关于Google大陆手机号不能验证的问题
  17. arnold ass standin 代理模型批量查询 与替换工具发布1.0
  18. Android 辅助服务实战-游戏点击器
  19. 2、java的应用领域
  20. Identity-Aware Textual-Visual Matching with Latent Co-attention文章翻译学习(ICCV)

热门文章

  1. 【感悟】战略上藐视敌人,战术上重视敌人
  2. 实验9.2.2 十进制转二进制
  3. 真正对眼睛好,应该这样做
  4. Oracle 利用lead、lag函数查询已有记录的下一条、上一条记录
  5. 小计64位win7上R读取excel过程
  6. 蓝桥杯Python题目(一)
  7. 微信小程序开发(九)————文章详情页的实现
  8. 寻找线性变换的零化多项式和最小多项式
  9. C++文件eof()函数的小细节
  10. c++文件读写函数eof()会错误的问题