【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

如何用几行代码运行 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

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

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

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

关注

评论

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

2020年终总结:回顾、反思、期待

书旅

年终总结

Pulsar vs Kafka,CTO 如何抉择?

Apache Pulsar

大数据 pulsar 消息中间件

高效学习:如何制定有价值的学习目标

石云升

学习 28天写作

FFMpeg解码API以及在解码过程中存在的丢帧问题

wangwei1237

ffmpeg 视频解码

架构师 3 期 3 班 -week9- 总结

zbest

总结 week9

基于机器学习的逻辑回归模型

无誉

爱了爱了!带着问题深入学习Handler,吊打面试官系列!

欢喜学安卓

android 程序员 面试 移动开发

深度模型的日志异常检测,还有谁不会?

华为云开发者联盟

运维 日志 网络 AIOPS 系统

关注直播 解锁采集器新功能

滴滴云

运维 可观测性 直播技术 滴滴夜莺

全球城市ZoneId和UTC时间偏移量的最全对照表

YourBatman

GMT UTC ZoneId 时区

k8s 上运行我们的 springboot 服务之——springboot服务https请求

柠檬

Java k8s https Istio,

AQS之ReentrantReadWriteLock写锁

伯阳

读写锁 ReentrantReadWriteLock 多线程与高并发 lock

程序员的简历,要注意以下几点

田维常

简历

mq消费幂等总结

A

MQ 幂等性 db

还热乎的面经

书旅

百度 面试 面经

第一周

Richard

Java 程序经验小结:避免使用终结方法

后台技术汇

28天写作

图说丨京东《技术重构社会供应链——未来科技趋势白皮书》

京东科技开发者

京东 智能供应链

2021面试脚本!夜读互联网Java开发27大专题,终入P7

比伯

Java 程序员 面试 计算机 技术宅

架构师 3 期 3 班 -week9- 作业

zbest

作业 week9

对微服务架构设计实践中若干问题的探讨

xcbeyond

微服务 28天写作

美团图数据库平台建设及业务实践

NebulaGraph

图数据库

如何成为一名优秀的技术Leader?

架构精进之路

成长笔记 七日更 28天写作

[JetPack] LiveData源码解析

Changing Lin

android 技术 JetPack

持币生息钱包APP系统开发|持币生息钱包软件开发

系统开发

软件测试--cookie学习

测试人生路

软件测试

Spring Boot 中集成ActiveMQ

武哥聊编程

Java springboot SpringBoot 2 28天写作 Activemq

数据结构与算法 - 哈夫曼树

ios 数据结构与算法

腾讯T3大佬亲自教你!一起刷完了这份1307页的安卓面试宝典吧,吐血整理

欢喜学安卓

android 程序员 面试 移动开发

数字钱包系统软件开发|数字钱包APP开发

系统开发

Redis中哈希分布不均匀该怎么办

Java 数据库 编程 程序员 面试

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