写点什么

如何用几行代码运行 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:301588
用户头像
刘燕 InfoQ高级技术编辑

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

关注

评论

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

Redis核心原理与实践--散列类型与字典结构实现原理

binecy

数据结构 源码阅读 Redis 6.0

考试试卷存储设计

guangbao

[微服务] You built it.You fix it.

baiyutang

微服务 9月日更

低代码平台的功能及其用处

低代码小观

程序员 低代码 开发工具 低代码开发平台 无代码

高扩展的系统通常会有什么特性

卢卡多多

系统、 9月日更

推荐一款 Python 微服务框架 - Nameko

星安果

Python 微服务 Nameko

内卷把同事逼成了“扫地僧”,把 Github 上所有面试题都整理了一遍~足足 24W 字!

Java 程序员 面试

靠着狂刷这份面试题跟答案!我从 15K 变成了 30K!

Java 编程 程序员

自研ISP芯片背后:手机厂商的目光在影像之外

脑极体

MLOps生产中的机器学习:为什么你应该关心数据和概念漂移 易筋 ARTS 打卡 Week 67

John(易筋)

ARTS 打卡计划

带你读论文丨基于视觉匹配的自适应文本识别

华为云开发者联盟

损失函数 视觉 文本识别 文档识别 视觉匹配

一文带你了解经典的Java垃圾回收机制

华为云开发者联盟

Java JVM 对象 垃圾回收机制 垃圾收集器

内部群炸了!字节同事写了一篇Leetc刷题心得,高管看见之后,直接给他涨了20K

算法 算法题

在线985,211高校查询

入门小站

工具

JavaScript “上层”语言

Augus

JavaScript 9月日更

什么是低代码自动化以及它如何使你受益?

低代码小观

程序员 自动化 工具 低代码 低代码开发平台

我仅用了3个月就成功破茧成蝶!从简历被拒到收割8个大厂offer的辛酸历程!

编程 Java、 计算机

如何做到监控告警的管理?

睿象云

运维 告警 监控告警 运维平台 告警管理

天壤完成新一轮战略融资 加速构建数字化转型通用智能平台

InfoQ 天津

腾讯高工终于把操作系统、TCP/IP、线程与进程、CPU全部讲明白了

Java 架构 面试 操作系统 计算机

网络攻防学习笔记 Day149

穿过生命散发芬芳

9月日更 网络管理

回帖抽大奖——5分钟极速体验AI技术能力

百度大脑

人工智能

密码学系列之:1Password的加密基础PBKDF2

程序那些事

算法 加密解密 密码学 程序那些事

大厂面试喜欢考算法,该怎么破?

博文视点Broadview

数据安全与隐私系列08:大数据与电影《少数派报告》

Databri_AI

人工智能

linux之秘钥登录

入门小站

Linux

吃串串,数签签,这个AI神器一秒搞定

百度大脑

人工智能 EasyDL

字节内部不传之秘:1298页算法刷题笔记(附源码可直接运行)

Java 程序员 面试

Linux之常见的存储架构

在即

9月日更

p3c 插件,是怎么检查出你那屎山的代码?

小傅哥

小傅哥 代码规范 p3m pmd 开发手册

2B 销售系统设计需要考虑的 3 个层面

boshi

团队管理 销售管理

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