写点什么

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

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

关注

评论

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

Jina 实例秀|七夕神器!比你更懂你女友的口红AI

Jina AI

七夕 神经网络架构搜索

SAP 人工智能解决方案的演进史 - 从 SAP Leonardo 到 SAP Data Intelligence

汪子熙

人工智能 机器学习 AI SAP 8月月更

转转测试环境的标签域名实践

转转技术团队

nginx hosts

再次搞定 Ali 云函数计算 FC

小鑫同学

签约计划第三季

关于技术学习的6个观点

郭明

技术人

React的理念与V16的架构变化

郭明

React

开源一夏|ArkUI如何自定义弹窗(eTS)

坚果

开源 HarmonyOS OpenHarmony 8月月更

STM32+SIM800C采用MQTT协议登录OneNet上传温湿度、MQ2烟雾浓度、GPS数据

DS小龙哥

8月月更

《福格行为模型》:如何养成好习惯?

郭明

读书笔记

Rust 入门指南 (用 WASM 开发第一个 Web 页面)

王泰

rust Wasm WebAssenbly ​Rust

语音社交app源码——具备哪些开发优势?

开源直播系统源码

软件开发 语聊房 直播系统源码 语音聊天系统 语音聊天app

华为开源:聚焦开源基础软件,共建健康繁荣生态

科技热闻

Java 是否应该使用通配符导入( wildcard imports)

HoneyMoose

浅聊偏函数

掘金安东尼

JavaScript 函数式 8月月更

开源一夏 | 查询分页不只有limit,这四种分页方法值得掌握

知识浅谈

开源 8月月更

Jina 实例秀|基于神经搜索的网络安全威胁检测(一)

Jina AI

神经网络架构搜索 Python.

mysql进阶(二十六)MySQL 索引类型

No Silver Bullet

MySQL MySQL索引 8月月更

【黄啊码】MySQL入门—2、使用数据定义语言(DDL)操作数据库

黄啊码

MySQL 8月月更

IDEA 自动导入的配置(Auto import)

HoneyMoose

C#/VB.NET:在 Word 中设置文本对齐方式

Geek_249eec

C# word VB.NET 文本对齐

《The Google File System》新说

Joseph295

架构实战营模块三作业

zhihai.tu

CentOS6搭建nginx+uwsgi+flask

haiger13

签约计划第三季

【LeetCode】分组的最大数量Java题解

Albert

LeetCode 8月月更

LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之三:两次优化

程序员欣宸

Java LeetCode 8月月更

《迁移学习导论》第2版,升级内容抢先看!

博文视点Broadview

Java使用IReport导出复杂报表

源字节1号

微信小程序 软件开发 前端开发 后端开发

8月总结高频vue面试题

helloworld1024fd

Vue

仿钉钉审批流程后端 PHP 处理(一)

CRMEB

【黄啊码】MySQL入门—1、SQL 的执行流程

黄啊码

MySQL 8月月更

MySQL之my.cnf配置文件

TimeFriends

8月月更

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