写点什么

如何用几行代码运行 40 个回归模型

  • 2021-05-12
  • 本文字数:2942 字

    阅读完需:约 10 分钟

如何用几行代码运行 40 个回归模型

本文最初发表于 Towards Data Science 博客,经原作者 Ismael Arayjo 授权,InfoQ 中文站翻译并分享。


这篇文章教你如何使用 Lazy Predict 运行超过 40 个机器学习模型进行回归项目。


假设你需要执行一项回归机器学习项目。你已经分析了你的数据,进行了一些数据清洗,创建了一些虚拟变量,现在,是时候运行机器学习回归模型了。你想到的十大模型有哪些?大多数人可能都不知道有“十大回归模型”。如果你不知道,也不必担心,因为在本文的最后,你不仅可以运行 10 个机器学习回归模型,而且能运行 40 多个机器学习回归模型。


几周前,我在博客上发表了一篇名为《如何用几行代码运行 30 个机器学习模型》(How to Run 30 Machine Learning Models with a Few Lines of Code)的文章,反响非常好。实际上,这是我到目前为止最流行的博文。在那篇博文中,我创建了一个分类项目来尝试 Lazy Predict。现在,我要在一个回归项目测试 Lazy Predict。因此,我将使用典型的西雅图房价数据集,在 Kaggle 上就能找到。

Lazy Predict 是什么?


不需要很多代码,Lazy Predict 就能帮助构建几十个模型,并帮助了解哪些模型在不经过任何参数调整的情况下工作得更好。说明其工作原理的最好方法就是使用一个小项目,现在就开始吧。

回归项目使用 Lazy Predict


首先,要安装 Lazy Predict,你可以pip install lazypredict回归项目到你的终端。简单得很。接下来,让我们导入一些用于本项目的库。你可以在这里找到完整的 Notebook。


# Importing important librariesimport pyforestfrom lazypredict.Supervised import LazyRegressorfrom pandas.plotting import scatter_matrix# Scikit-learn packagesfrom sklearn.linear_model import LinearRegressionfrom sklearn.tree import DecisionTreeRegressorfrom sklearn.ensemble import ExtraTreesRegressorfrom sklearn import metricsfrom sklearn.metrics import mean_squared_error# Hide warningsimport warningswarnings.filterwarnings(“ignore”)# Setting up max columns displayed to 100pd.options.display.max_columns = 100
复制代码


你可以看到我导入了pyforest而非 Pandas 和 Numpy。在 Notebook 中,PyForest 可以非常快速地导入所有重要的库。我写了一篇关于它的博文,你可以在这里找到。接下来,让我们来导入数据集。


# Import datasetdf = pd.read_csv('../data/kc_house_data_train.csv', index_col=0)
复制代码


看看这个数据集是什么样子。



下面我们来检查一下数据类型。


# Checking datatimes and null valuesdf.info()
复制代码



下面是吸引我注意力的几件事情。第一件是id列与这个小项目没有任何关联。但是,如果你想更深入地研究这个项目,你应该检查是否存在重复项。另外,date列是一个对象类型。应将其改为 DateTime 类型。这些列中的zipcodelatlong可能与价格几乎或者根本没有关联。然而,因为本项目的目标是演示lazy predict,所以我会保留它们。


接下来,在运行第一个模型之前,让我们检查一些统计数据,以找出需要修改的地方。



是的,我看到了一些有趣的事情。首先,有一所房子有 33 间卧室,那不可能是真的。所以我在网上查了一下,结果发现我用它的id找到了这套房子,它实际上有 3 间卧室。你可以在这里找到这套房子。此外,有些房子看上去没有卫生间。我会包括至少 1 个卫生间,这样我们就可以完成数据清理了。


# Fixing house with 33 bedroomsdf[df['bedrooms'] == 33] = df[df['bedrooms'] == 3]# This will add 1 bathroom to houses without any bathroomdf['bathrooms'] = df.bedrooms.apply(lambda x: 1 if x < 1 else x)
复制代码

拆分训练集和测试集

我们现在可以拆分训练集和测试集了。但是在此之前,让我们确保代码不会出现naninfinite的值。


# Removing nan and infinite valuesdf.replace([np.inf, -np.inf], np.nan, inplace=True)df.dropna(inplace=True)
复制代码


现在将数据集分为 X 和 Y 两个变量。我会给训练集分配 75% 的数据集,给测试集 25%。


# Creating train test splitX = df.drop(columns=['price])y = df.price# Call train_test_split on the data and capture the resultsX_train, X_test, y_train, y_test = train_test_split(X, y, random_state=3,test_size=0.25)
复制代码


是时候找点乐子了!下面的代码将运行 40 多个模型,并显示每个模型的 R-Squared 和 RMSE。做好准备,开始!


reg = LazyRegressor(ignore_warnings=False, custom_metric=None)models, predictions = reg.fit(X_train, X_test, y_train, y_test)print(models)
复制代码



哇!对于花费在上面的工作来说,这些结果非常好。对普通模型而言,这些都是非常好的 R-Squared 和 RMSE。就像我们看到的,我们运行了 41 个普通模型,并且得到了我们需要的指标,你可以看到每个模型所花费的时间。一点也不差。那么,你如何确定这些结果是否正确呢?通过运行一个模型,我们可以查看结果,看它是否和我们得到的结果相近。我们要不要测试一下基于直方图的梯度提升回归树?如果你从未听说过这种算法,不要担心,因为我也从没听说过它。你可以在这里找到一篇关于它的文章。

复核结果

首先,让我们用 scikit-learn 导入这个模型。


# Explicitly require this experimental featurefrom sklearn.experimental import enable_hist_gradient_boosting# Now you can import normally from ensemblefrom sklearn.ensemble import HistGradientBoostingRegressor
复制代码


此外,我们还创建了一个函数来检查模型的度量。


# Evaluation Functionsdef rmse(model, y_test, y_pred, X_train, y_train):r_squared = model.score(X_test, y_test)mse = mean_squared_error(y_test, y_pred)rmse = np.sqrt(mse)print(‘R-squared: ‘ + str(r_squared))print(‘Mean Squared Error: ‘+ str(rmse))# Create model line scatter plotdef scatter_plot(y_test, y_pred, model_name):plt.figure(figsize=(10,6))sns.residplot(y_test, y_pred, lowess=True, color='#4682b4',line_kws={'lw': 2, 'color': 'r'})plt.title(str('Price vs Residuals for '+ model_name))plt.xlabel('Price',fontsize=16)plt.xticks(fontsize=13)plt.yticks(fontsize=13)plt.show()
复制代码


最后,我们来运行这个模型并查看结果。


# Histogram-based Gradient Boosting Regression Treehist = HistGradientBoostingRegressor()hist.fit(X_train, y_train)y_pred = hist.predict(X_test)
复制代码



瞧!我们用 Lazy Predict 得到的结果和这个结果非常接近。看来这确实很管用。

最后想法

Lazy Predict 是一个神奇的库,易于使用,并且非常快速,只需要很少的代码就可以运行普通模型。你可以使用 2 到 3 行的代码来手动设置,而不需要手工设置多个普通模型。切记,不要把结果作为最终的模型,应该始终对结果进行复核,以确保库工作正常。就像我在其他博文中提到的那样,数据科学是一个复杂的领域,Lazy Predict 并不能取代那些优化模型的专业人员的专业知识。请让我知道它是如何为你工作的。


作者介绍:


Ismael Araujo,在纽约工作,数据科学家、机器学习工程师。


原文链接:


https://towardsdatascience.com/how-to-run-40-regression-models-with-a-few-lines-of-code-5a24186de7d

2021-05-12 09:301666
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 567.8 次阅读, 收获喜欢 1978 次。

关注

评论

发布
暂无评论
发现更多内容

Hive窗口函数与分析函数

大数据技术指南

hive 5月日更

聊聊dubbo协议2

捉虫大师

dubbo 协议

「技术人生」第2篇:学会分析事物的本质

阿里巴巴中间件

技术 工具 技术人 技术人生 一号位

MindSpore:不用摘口罩也知道你是谁

华为云开发者联盟

算法 人脸识别 口罩 mindspore 口罩人脸

并发王者课 - 青铜 3: 双刃剑-理解多线程带来的安全问题

MetaThoughts

Java 多线程 并发 王者并发课

探索GaussDB(DWS)的过程化SQL语言能力

华为云开发者联盟

数据库 GaussDB(DWS) SQL语言 PLSQL语言 索引表达式

技术干货 | 基于MindSpore更好的理解Focal Loss

华为云开发者联盟

函数 mindspore Focal Loss 样本

LRU 和 LFU

且听且吟

极光开发者周刊【No.0521】

极光GPTBots-极光推送

阿里P9架构师强烈推荐:想拿60W以上年薪必看,Java高并发四套小册。

Java架构追梦

Java 阿里巴巴 架构 面试 高并发

云计算下半场:打法已变,谁主沉浮

ToB行业头条

云计算

懂得取舍才是缓存设计的真谛

万俊峰Kevin

缓存 cache 分布式缓存 Go 语言

2021年中国信创生态报告发布 指引未来信创产业发展

融云 RongCloud

Nginx的11个执行阶段详解

运维研习社

nginx 运维 源码剖析 5月日更

新思科技为中兴通讯提供BSIMM软件安全评估

InfoQ_434670063458

5G 新思科技 中兴 软件安全 BSIMM

BMP、GIF、TIFF、PNG、JPG和SVG格式图像的特点

不脱发的程序猿

图像格式

Spark知识点简单总结

五分钟学大数据

大数据 spark 5月日更

做一次黑客,入侵一次服务器

叫我阿柒啊

Docker 入侵 docker远程 redis注入

☕【JVM技术之旅】你真正掌握了Java对象创建的流程吗?

码界西柚

JVM java对象分析 java对象 对象创建 5月日更

M1 Dock智能硬件环境搭建(MaixPy安装及使用)

不脱发的程序猿

人工智能 开发板 智能硬件 AIOT M1 Dock

云小课|聊一聊DRS的数据过滤特性

华为云开发者联盟

数据库 DRS 数据复制服务 数据过滤 数据库引擎

这么狠,私塾在线架构师系列课程全都免费发放

InfoQ_d2212957090d

Java

2021 DevOpsDays 东京站完美收官 | CODING 专家受邀分享最新技术资讯

CODING DevOps

DevOps CI/CD

iOS面试--拼多多最新iOS开发面试题

一意孤行的程序员

ios swift 面试 ios开发 知识分享

我粉了!阿里大牛从内部带出来的百亿级高并发系统,从基础到实战、面面俱到

Java 程序员 架构 面试

重命名表,应该怎么做?

Simon

MySQL

GitHub开源的AI下五子棋

不脱发的程序猿

人工智能 GitHub 开源 AI 五子棋

「DataPipeline」完成数千万B轮融资,加速构建中国的世界级数据中间件产品

DataPipeline数见科技

融资

记十亿级Es数据迁移mongodb成本节省及性能优化实践

杨亚洲(专注MongoDB及高性能中间件)

MySQL 数据库 mongodb 架构 分布式数据库mongodb

网络攻防学习笔记 Day24

穿过生命散发芬芳

5月日更 网络攻防

WizTree——一个扫描快似Everything的硬盘空间分析工具

吴脑的键客

DevOps windows

如何用几行代码运行 40 个回归模型_文化 & 方法_Ismael Araujo_InfoQ精选文章