AutoML—应用TPOT实现回归预测
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实现回归预测相关推荐
- TF之AutoML框架:AutoML框架的简介、特点、使用方法详细攻略
TF之AutoML框架:AutoML框架的简介.特点.使用方法详细攻略 目录 AutoML框架的简介 AutoML框架的特点 AutoML框架的使用方法 AutoML VS AutoKeras 框架 ...
- 【译】An Opinionated Introduction to AutoML and Neural Architecture Search
这是系列文章的第2部分. 在这里查看第1部分和第3部分 . 来自CMU和DeepMind的研究人员最近发布了一篇有趣的新论文,称为差异化架构搜索(DARTS) ,它提供了一种神经架构搜索的替代方法,这 ...
- 告别调参,AutoML新书发布
来源:专知 本文约1900字,建议阅读8分钟. <AUTOML>作者当前正在完成这本新书的编辑工作,它将由NIPS 2018出版发行. [ 导读 ]近期,由Frank Hutter, La ...
- 金融风控实战——风控领域涉及到的算法和风控算法工程师需要具备的能力
一些简单的介绍 市面上算法相关的岗位,从大范围上分为两大类 1.研究驱动的算法工程师,这类算法工程师的门槛很高,分布在大型公司的研究院.创新实验室等部门,这类算法工程师主要是以研究新的算法或者是更好的 ...
- 自动机器学习(AutoML)
自动机器学习(AutoML) 不再需要苦恼于学习各种机器学习的算法 目录: 一.为什么需要自动机器学习 二.超参数优化 Hyper-parameter Optimization 三.元学习 Meta ...
- AutoML很火,过度吹捧的结果?
作者 | Denis Vorotyntsev 译者 | Shawnice 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) [导语]现在,很多企业都很关注AutoML领域,很多 ...
- 一文盘点AutoML 库,自动机器学习演讲摘要
作者:Xu LIANG 翻译:王雨桐 校对:王威力 本文长度约为1300字,建议阅读5分钟 自动化程度 Jeff Dean在ICML 2019上进行了有关AutoML的演讲,并将自动化分为4个级别: ...
- AutoML自动化机器学习技术深入
开发十年,就只剩下这套Java开发体系了 >>> 之前发表了一篇介绍AutoML技术的文章,但感觉还不够深入.今天抽出时间来仔细分析了AutoML相关框架的源码,见微知著,希望 ...
- 开源自动机器学习(AutoML)框架盘点
开发十年,就只剩下这套Java开发体系了 >>> 自从Google推出了能自动设计神经网络自我进化的AutoML论文后,我便开始持续关注这个领域 到目前为止,从网上显示的信息来 ...
最新文章
- 【Linux】一步一步学Linux系统编程教程汇总(暂时暂停更新......)
- matlab安装配置vc出错,64位系统安装matlab出现mexopts.bat及出现缺少或无法安装c++ compilers 故障的解决办法.pdf...
- 拖欠水费可能影响个人征信,大家怎么看?
- mysql的Innodb为什么使用B+树
- Ubuntu sudo 出现unable to resolve host 解决方法
- 2018-06-29博客
- 自定义sql_基于Calcite自定义SQL解析器
- 《流量的秘密 Google Analytics网站分析与商业实战》一2.2 版本选择的标准
- 教你用SQL进行数据分析
- 计算机管理的服务打不开,Windows 系统服务无法打开解决方法+操作命令详解
- python三大神器
- 从认知负荷理论看语音交互设计
- 毕业论文开题报告撰写指南-宾夕法尼亚州立大学研究生写作中心
- 人力资源管理-输入、输出、工具和技术
- 数据压缩作业:清音、浊音、爆破音频谱分析
- 关于Google大陆手机号不能验证的问题
- arnold ass standin 代理模型批量查询 与替换工具发布1.0
- Android 辅助服务实战-游戏点击器
- 2、java的应用领域
- Identity-Aware Textual-Visual Matching with Latent Co-attention文章翻译学习(ICCV)