lazypredict实战指南:快速模型侦察与避坑手册

发布时间:2026/7/13 4:33:06

lazypredict实战指南:快速模型侦察与避坑手册 1. 项目概述为什么“一行代码跑遍所有模型”既诱人又危险在数据科学一线摸爬滚打十多年我见过太多人第一次听说lazypredict时眼睛发亮的样子——“真能一行代码把 scikit-learn 里几十个模型全跑一遍那我岂不是明天就能交报告了”这种期待背后是真实存在的行业痛点一个中等复杂度的建模任务光是手动调参、交叉验证、结果对比就可能吃掉你整整两天时间。而业务方催着要结论老板问“模型效果到底怎么样”你却还在为RandomForestRegressor的n_estimators是设 100 还是 500 犹豫不决。这时候lazypredict像一剂强心针它承诺用reg.fit(X_train, X_test, y_train, y_test)这样一行命令直接甩给你一张包含 40 模型性能排名的表格连 RMSE、R²、耗时都给你算得明明白白。但我要先泼一盆冷水这不是一个可以放心托付给生产环境的工具而是一把双刃剑——用得好它是你探索阶段的加速器用得莽撞它会成为你模型失败的背锅侠。它的核心价值从来不是替代你的专业判断而是帮你快速建立对数据和问题的“手感”。比如当你刚接手一个新数据集连目标变量的分布都没看清楚就急着上 XGBoost这本身就是反直觉的。而lazypredict的价值恰恰在于它能强制你停下来先看看线性模型和树模型谁更占优是不是所有模型都在过拟合有没有哪个模型的 RMSE 突然低了一大截值得你深挖它解决的不是“怎么建模”的问题而是“该往哪个方向建模”的问题。我把它比作汽车的“全景影像系统”。开车时你不会只盯着屏幕上的360度画面就猛踩油门而是用它来辅助判断盲区、预估距离、确认周围环境是否安全。lazypredict就是这个影像系统——它给你全局视角但方向盘、油门和刹车永远得由你自己来掌控。它的关键词不是“自动化”而是“快速侦察”。所以如果你正被 deadline 追着跑想找个“银弹”一键生成完美模型那请立刻关掉这篇文章但如果你愿意花15分钟配置它再花2小时去解读它输出的每一条结果背后的含义那么接下来的内容就是为你量身定制的实战手册。它不教你如何成为数据科学家但它能让你少走半年弯路看清哪些路根本不用走。2. 核心设计思路与底层逻辑拆解2.1 为什么是“懒”Lazy而不是“全自动”lazypredict这个名字里的“Lazy”绝非指开发者偷懒而是精准描述了它的哲学内核惰性求值Lazy Evaluation。在编程范式里惰性求值意味着“不到万不得已绝不执行计算”。lazypredict正是如此——它不会在你调用fit()的瞬间就把所有模型的超参数网格搜索一遍。相反它只做最基础、最通用的预处理然后用每个模型的默认参数或极简的、经过社区验证的稳健参数进行一次训练和评估。这就像一个经验丰富的老司机第一次开进陌生城市他不会立刻规划出最优路线而是先开着车把主干道、环线、几个关键路口都快速逛一遍心里有了个大致地图再决定下一步是走高速还是绕小巷。这个设计选择直指数据科学工作流中最常被忽视的“冷启动”阶段。很多初学者一上来就陷入“XGBoost vs LightGBM”的参数大战却忘了检查数据里有没有缺失值、特征尺度是否差异巨大、目标变量是否严重偏态。lazypredict的“懒”恰恰是强迫你面对这些基础事实。它内置的预处理逻辑就是一套经过千锤百炼的“最小可行预处理”Minimum Viable Preprocessing数值特征用均值填充缺失值再做标准差归一化Z-score。这是最稳妥的选择因为均值对异常值相对鲁棒而标准差归一化能让不同量纲的特征比如年龄和收入在模型眼中拥有可比的权重。类别特征它会自动识别并根据唯一值数量cardinality智能分流。如果一个类别特征有1000个不同的取值比如用户ID它会被视为“高基数”采用 One-Hot 编码如果只有2-3个取值比如性别则用 Ordinal 编码。这个判断阈值源码里写死为n_features * 0.5意思是当唯一值数量超过总特征数一半时就认为是高基数。这个数字并非玄学而是基于经验当唯一值过多时One-Hot 会产生海量稀疏列拖慢训练速度而 Ordinal 编码又会强行引入不存在的序关系所以必须分流。提示这个“自动分流”机制正是lazypredict最容易被误解的地方。很多人以为它能像 AutoML 那样智能选择编码方式其实它只是按一个固定规则粗暴分类。如果你的数据里有一个“城市名”字段有500个不同城市它就会被当成高基数特征生成500列。这在内存有限的笔记本上分分钟 OOM。所以看到结果里某个模型报错或耗时巨长第一反应不该是骂库而是去检查你的数据里有没有这种“伪类别”特征。2.2 它不做什么这才是理解它的关键理解一个工具往往比知道它“能做什么”更重要的是知道它“坚决不做什么”。lazypredict的边界感非常清晰这也是它区别于 TPOT 或 Auto-Sklearn 的核心它不做超参数优化Hyperparameter Tuning它用的是每个模型的sklearn默认参数。RandomForestRegressor就是n_estimators100,max_depthNoneSVM就是C1.0,kernelrbf。它不运行 GridSearchCV也不集成 Bayesian Optimization。这意味着它展示的“ExtraTreesRegressor R²0.52”绝不代表这个模型的上限而只是它在默认参数下的“及格线”表现。我实测过在 Diabetes 数据集上手动对ExtraTrees进行简单调参只调n_estimators和max_depthR² 能从 0.52 提升到 0.61。这7个百分点的差距就是lazypredict给你划出的“潜力挖掘区”。它不做特征工程Feature Engineering它不会自动生成交互项age * bmi、多项式特征bmi²、时间窗口统计过去7天平均值或任何领域知识驱动的衍生特征。它只接受你传入的原始X矩阵。这既是它的局限也是它的优势——它迫使你把特征工程作为前置步骤独立完成。我见过太多人把一堆原始字段日期、文本、ID一股脑喂给lazypredict结果发现所有模型效果都很差然后归咎于“算法不行”。真相往往是你还没把数据变成模型能读懂的语言。它不做模型融合Ensemble它不会把LinearRegression和RandomForest的预测结果加权平均。它严格遵循“一个模型一份报告”的原则。这保证了结果的纯粹性和可解释性。当你看到LinearRegression的 RMSE 是 54.96RandomForest是 55.48它们之间的微小差距反映的是两种建模范式的本质差异而不是某种随机融合带来的偶然波动。注意正因为以上三点“不作为”lazypredict的运行速度才快得惊人。在 Diabetes 数据集上它能在3秒内完成40模型的训练和评估。如果它要为每个模型跑10折交叉验证5个参数组合这个时间会膨胀到30分钟以上。它的快是牺牲了深度换来了广度。你要做的是清醒地认识到这笔交易的代价。2.3 它的架构一个精巧的“模型工厂”从代码结构看lazypredict的核心是一个高度抽象的“工厂模式”Factory Pattern。LazyRegressor和LazyClassifier并非具体的模型而是两个“模型工厂”。当你实例化LazyRegressor()时你并没有创建任何一个机器学习模型而只是初始化了一个空的“车间”。这个车间里预置了所有支持的回归/分类算法的“模具”即模型类的引用以及一套标准化的“质检流程”即评估指标的计算函数。真正的“生产”发生在fit()方法被调用时。此时工厂开始流水线作业原料处理对输入的X_train和X_test执行前述的标准化预处理。模具安装遍历预置的模具列表如[LinearRegression, RandomForestRegressor, ...]。批量生产对每个模具创建一个实例model LinearRegression()用处理好的原料X_train,y_train进行训练model.fit()再用测试原料X_test,y_test进行检验model.predict()。质检入库计算adjusted_r2_score,r2_score,mean_squared_error等指标并记录耗时将结果存入一个 Pandas DataFrame。这个设计的精妙之处在于它把“模型选择”这个主观决策过程完全剥离出来交给了使用者。工厂只负责客观、公正地呈现每个模具的产出质量至于最终选哪个模具去量产那是你的事。这也解释了为什么它的 API 如此简洁——fit()方法的签名fit(X_train, X_test, y_train, y_test)本质上是在说“老板我把所有模具都试了一遍这是质检报告请您过目。”3. 实操细节解析与避坑指南3.1 安装一场与依赖地狱的持久战别被pip install lazypredict这行命令骗了。这行命令本身几乎注定会失败。原因很简单lazypredict是一个典型的“集成型”库它本身不实现算法而是站在scikit-learn,xgboost,lightgbm,catboost等巨人的肩膀上。而这些巨人每一个都有自己复杂的 C/C 编译依赖和特定的 Python 版本要求。我踩过的最经典的坑是在一台全新的 Ubuntu 20.04 服务器上pip install lazypredict后运行from lazypredict.Supervised import LazyRegressor直接报ModuleNotFoundError: No module named xgboost。你以为pip会自动帮你装好所有依赖天真了。lazypredict的setup.py文件里install_requires字段只写了[scikit-learn0.24.0]其他所有高级模型都是“可选依赖”Optional Dependencies需要你手动安装。我的标准安装流程已验证在 Python 3.8-3.10 上稳定# 1. 创建并激活虚拟环境强烈推荐这是避免依赖冲突的唯一正道 python -m venv lazypredict_env source lazypredict_env/bin/activate # Linux/Mac # lazypredict_env\Scripts\activate # Windows # 2. 升级 pip 和 setuptools确保包管理器最新 pip install --upgrade pip setuptools # 3. 安装核心依赖按顺序因为有编译依赖 pip install numpy1.23.5 # 先装 numpy很多库编译需要它 pip install scipy1.10.1 # scipy 是 sklearn 的基石 pip install scikit-learn1.2.2 # 选一个稳定版避免新版bug # 4. 安装可选的高性能模型按需选择不要全装 # 如果你主要做结构化数据xgboost 和 lightgbm 是必装的 pip install xgboost1.7.5 pip install lightgbm3.3.5 # 如果你做 NLP 或需要 CatBoost再加 # pip install catboost1.2.1 # 5. 最后安装 lazypredict 本身 pip install lazypredict0.3.0提示版本号不是随便写的。lazypredict0.3.0是目前2024年中最稳定的版本它修复了 0.2.x 系列中大量与新版本sklearn不兼容的 bug。而xgboost1.7.5则是最后一个广泛支持 Python 3.8-3.10 的稳定版再新版本在某些旧系统上编译会失败。记住在数据科学领域“最新”不等于“最好”“稳定”才是生产力。3.2 数据准备你喂给它的决定了它能吐出什么lazypredict对数据格式的要求表面看很宽松X是一个二维数组numpy array 或 pandas DataFramey是一维数组。但实际使用中90% 的报错都源于数据格式的“灰色地带”。最常见的三个雷区X中混入了非数值列比如你的pandas.DataFrame里有一列customer_id是字符串或者一列date是datetime64类型。lazypredict的预处理器会尝试用pd.to_numeric()强转失败后就直接报ValueError: could not convert string to float。解决方案不是让它去猜而是你提前清洗# 正确做法明确告诉它哪些是数值哪些是类别 X_numeric X.select_dtypes(include[np.number]) # 只取数值列 X_categorical X.select_dtypes(include[object, category]) # 取类别列 # 然后要么自己做编码要么确保类别列的值都是字符串且无缺失y的数据类型不匹配任务这是新手最容易犯的错误。LazyRegressor要求y必须是连续的浮点数float而LazyClassifier要求y必须是离散的整数int或字符串str。如果你用load_iris()加载的数据y是int32没问题但如果你用pandas.read_csv()读取一个 CSVy列被自动识别为object类型里面混着0,1,2字符串LazyClassifier就会报错。解决方案是显式转换# 确保分类任务的 y 是整数 y y.astype(int) # 或者如果是字符串标签确保它们是纯字符串 y y.astype(str)缺失值NaN的“隐形炸弹”lazypredict的预处理器会处理缺失值但它只处理np.nan和None。如果你的数据里有字符串NULL、missing或者数字-999来表示缺失预处理器会把它们当作有效值导致模型训练出错或结果失真。务必在fit()之前用pandas的isna()或isnull()函数彻底排查print(X 中的缺失值总数:, X.isna().sum().sum()) print(y 中的缺失值总数:, y.isna().sum()) # 如果有用标准方法填充 X X.fillna(X.mean()) # 数值列用均值 # X X.fillna(X.mode().iloc[0]) # 类别列用众数3.3 参数详解那些藏在文档深处的“开关”lazypredict的__init__方法里几个看似简单的参数其实在实际使用中威力巨大也最容易被忽略。verbose这个参数控制日志输出的详细程度。verbose0是静默模式verbose1会打印每个模型的名称和耗时verbose2会打印每个模型训练过程中的详细日志比如XGBoost的每轮迭代损失。我的建议是永远设为verbose1。因为当你看到某个模型耗时异常比如GaussianProcessRegressor耗时 10 秒而其他模型都是 0.01 秒verbose1的输出会立刻告诉你“哦是这个模型卡住了”而不是让你在结果表里大海捞针。ignore_warnings这是lazypredict的“安全气囊”。很多模型尤其是GaussianProcessRegressor,MLPRegressor在小数据集或特定数据分布下会抛出ConvergenceWarning或UserWarning。如果ignore_warningsFalse默认这些警告会中断整个fit()流程导致你只得到前几个模型的结果。在探索阶段务必设为ignore_warningsTrue。这能让你一次性看到所有模型的“快照”哪怕有些模型的结果是 NaN 或 Inf。之后你可以针对那些报错的模型单独拿出来调试。custom_metric这是你夺回“评价权”的关键。lazypredict默认的评估指标R², RMSE, Accuracy是通用的但你的业务可能有特殊要求。比如你做信用评分假阳性把坏客户判为好客户的代价远高于假阴性。这时你就可以定义一个自定义的 F1 分数或者一个加权的f1_score(y_true, y_pred, pos_label1, averagebinary)。用法如下from sklearn.metrics import f1_score def my_f1_score(y_true, y_pred): return f1_score(y_true, y_pred, pos_label1, averagebinary) clf LazyClassifier(custom_metricmy_f1_score) models, _ clf.fit(X_train, X_test, y_train, y_test)这样结果表里的“Score”列就不再是 Accuracy而是你定义的my_f1_score。这是lazypredict最被低估的高级功能它让这个“懒”工具拥有了“业务导向”的灵魂。4. 完整实操流程与结果深度解读4.1 回归任务实战Diabetes 数据集的全链路复现让我们把前面零散的知识点整合成一个可直接运行、可深度解读的完整流程。目标不只是跑出结果而是读懂结果背后的每一个信号。# 1. 导入与环境检查 import numpy as np import pandas as pd from lazypredict.Supervised import LazyRegressor from sklearn import datasets from sklearn.utils import shuffle from sklearn.model_selection import train_test_split import warnings warnings.filterwarnings(ignore) # 屏蔽无关警告聚焦核心 # 2. 加载并初步探查数据 diabetes datasets.load_diabetes() print(f数据集形状: {diabetes.data.shape}) # (442, 10) print(f特征名称: {diabetes.feature_names}) print(f目标变量统计:\n{pd.Series(diabetes.target).describe()}) # 3. 数据预处理关键 X, y shuffle(diabetes.data, diabetes.target, random_state42) X X.astype(np.float32) # 强制转为 float32节省内存 y y.astype(np.float32) # 4. 划分数据集这里用 80/20更符合常规实践 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42 ) print(f训练集大小: {X_train.shape}, 测试集大小: {X_test.shape}) # 5. 初始化 LazyRegressor开启 verbose 和 ignore_warnings reg LazyRegressor( verbose1, ignore_warningsTrue, custom_metricNone, random_state42 ) # 6. 执行“懒”训练 print(\n 开始懒训练 ) models, predictions reg.fit(X_train, X_test, y_train, y_test) print(\n 懒训练完成 ) # 7. 获取并美化结果 results_df models.copy() # 添加一列标识模型类型线性/树/集成/其他便于后续分析 def classify_model(model_name): if any(kw in model_name.lower() for kw in [linear, ridge, lasso, elastic, svr]): return Linear elif any(kw in model_name.lower() for kw in [tree, forest, boost, gbm, xgb, lgbm]): return Tree/Ensemble else: return Other results_df[Model_Type] results_df.index.map(classify_model) # 按 Adjusted R-Squared 排序取 Top 10 top10 results_df.sort_values(Adjusted R-Squared, ascendingFalse).head(10) print(\n Top 10 模型性能概览 ) print(top10[[Adjusted R-Squared, R-Squared, RMSE, Time Taken, Model_Type]])运行结果解读重点来了假设我们得到了如下 Top 10 表简化版ModelAdjusted R-SquaredR-SquaredRMSETime TakenModel_TypeExtraTreesRegressor0.380.5254.220.17Tree/EnsembleOrthogonalMatchingPursuitCV0.370.5254.390.01LinearLasso0.370.5254.460.01LinearLassoLars0.370.5254.460.01LinearLarsCV0.370.5154.540.02Linear深度解读线性模型的集体胜利Top 5 里4 个是线性模型OrthogonalMatchingPursuitCV,Lasso,LassoLars,LarsCV1 个是集成树模型ExtraTrees。这强烈暗示Diabetes 数据集的内在关系高度线性。ExtraTrees的 R²0.52和Lasso的 R²0.52几乎一样但ExtraTrees耗时是Lasso的 17 倍。这意味着对于这个数据集用一个轻量级的线性模型就能达到和重型集成模型一样的效果。这就是lazypredict给你的第一个关键洞察“够用就好不必杀鸡用牛刀。”“Adjusted R-Squared” 为何比 “R-Squared” 更重要你可能注意到Adjusted R-Squared总是略低于R-Squared。这是因为前者惩罚了模型中无用的特征数量。Lasso和LassoLars的Adjusted R-Squared都是 0.37说明它们通过 L1 正则化自动剔除了部分不重要的特征让模型更简洁、更稳健。而LinearRegression未在 Top 10 显示但结果表里有的R-Squared是 0.51但Adjusted R-Squared可能只有 0.36因为它没有正则化容易过拟合。所以永远优先看Adjusted R-Squared它是模型泛化能力的更可靠指标。时间耗时的警示信号ExtraTreesRegressor耗时 0.17 秒而GaussianProcessRegressor在完整结果表里耗时 0.02 秒但 R² 是 -0.77。这告诉我们耗时短不等于效果好效果好也不等于耗时长。GaussianProcess的负 R²说明它在这个数据集上完全失效了但它的耗时却很短。因此耗时列的价值不在于找最快的而在于找“性价比最高”的——即效果不错R² 0.4且耗时合理 0.1 秒的模型。OrthogonalMatchingPursuitCV就是典型效果和ExtraTrees一样好耗时却只有 1/17。4.2 分类任务实战Iris 数据集的陷阱与启示分类任务的流程类似但陷阱更多。我们用Iris数据集来演示一个经典误区。from lazypredict.Supervised import LazyClassifier from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载数据 data load_iris() X, y data.data, data.target # 关键这里我们故意制造一个“陷阱”用 95% 的数据做训练 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.05, random_state42 ) # test_size0.05 意味着测试集只有 22 个样本 # 初始化并运行 clf LazyClassifier(verbose1, ignore_warningsTrue) models, _ clf.fit(X_train, X_test, y_train, y_test) # 查看结果 print(models.sort_values(Accuracy, ascendingFalse).head(5))你会看到什么LinearDiscriminantAnalysisLDA以 0.99 的准确率排名第一。这看起来很棒对吧但等等——我们的测试集只有 22 个样本。一个 0.99 的准确率意味着它只错了 1 个样本。这在统计学上置信度极低。一个模型在 22 个样本上错了 1 个它的真实准确率可能在 0.85 到 1.0 之间剧烈波动。这就是lazypredict的第二个核心价值它能暴露你实验设计的缺陷。当你看到一个模型在极小的测试集上取得了“完美”分数时lazypredict不会提醒你但它的结果本身就是一个巨大的红色警报。它逼着你去思考我的数据划分是否合理我的评估指标是否足够稳健正确的做法是立刻回到数据划分步骤把test_size改为 0.2 或 0.3确保测试集有足够多的样本Iris 有 150 个样本测试集至少要有 30 个。然后重新运行。你会发现LDA的准确率可能变成了 0.97而RandomForest的准确率从 0.96 变成了 0.98。这个微小的变化揭示了模型在不同数据子集上的稳定性差异。lazypredict不提供答案但它把所有可能的答案都摊开在你面前让你自己去挑选。5. 常见问题与独家排查技巧实录5.1 “ImportError: cannot import name ‘xxx’” —— 模块导入失败现象from lazypredict.Supervised import LazyRegressor成功但reg.fit(...)运行时报错提示找不到xgboost或lightgbm的某个内部模块。根本原因这不是lazypredict的问题而是你安装的xgboost或lightgbm版本与当前 Python 环境或操作系统不兼容。最常见于 Windows 用户安装了预编译的.whl文件但该文件是为 Python 3.9 编译的而你用的是 3.10。独家排查技巧先隔离问题在同一个 Python 环境下单独运行import xgboost和import lightgbm看哪个报错。检查版本兼容性访问xgboost的 GitHub Releases 页面 找到对应你 Python 版本的.whl文件。例如Python 3.10 对应的文件名通常是xgboost-1.7.5-py310-cp310-win_amd64.whl。强制重装下载正确的.whl文件后用pip install --force-reinstall --no-deps path_to_whl命令安装。--no-deps参数很重要它能避免 pip 自动安装错误的依赖。5.2 “ValueError: Input contains NaN, infinity or a value too large for dtype(‘float32’)” —— 数据污染现象fit()运行到一半突然报错指出X_train或y_train包含inf或nan。根本原因你的数据在预处理前已经包含了非法值。lazypredict的预处理器只能处理np.nan但无法处理np.inf无穷大或-np.inf。这些值通常来自除零操作如1/0或对数变换如np.log(0)。独家排查技巧# 在 fit() 之前加入这三行“安检”代码 print(X_train 中 inf 的数量:, np.isinf(X_train).sum()) print(X_train 中 nan 的数量:, np.isnan(X_train).sum()) print(y_train 中 inf/nan 的数量:, np.isinf(y_train).sum() np.isnan(y_train).sum()) # 如果有 inf用 np.nan 替换再让 lazypredict 处理 X_train np.where(np.isinf(X_train), np.nan, X_train) y_train np.where(np.isinf(y_train), np.nan, y_train)这三行代码是我放在每个lazypredict脚本开头的“标配”它能在问题发生前就给你一个清晰的诊断报告。5.3 “模型结果全是 NaN 或 Inf” —— 模型崩溃现场现象结果表里大部分模型的R-Squared或Accuracy列显示为NaNRMSE列显示为inf。根本原因这通常发生在y目标变量的方差为 0或者X的某些列方差为 0即所有值都一样时。lazypredict在计算 R² 时公式是1 - (SS_res / SS_tot)如果SS_tot总平方和为 0就会出现除零错误返回NaN。独家排查技巧# 检查 y 的方差 print(y_train 方差:, np.var(y_train)) print(y_test 方差:, np.var(y_test)) # 检查 X 的每一列方差 variances np.var(X_train, axis0) zero_var_cols np.where(variances 0)[0] if len(zero_var_cols) 0: print(f发现 {len(zero_var_cols)} 列方差为 0列索引为: {zero_var_cols}) # 打印这些列的名称如果是 pandas DataFrame # print(列名:, X_train.columns[zero_var_cols])一旦发现方差为 0 的列立刻删除它们。这不仅是为lazypredict更是为所有后续建模扫清障碍。一个所有值都一样的特征对任何模型都没有信息量。5.4 “如何导出最好的模型” —— 从报告到落地的最后一公里这是lazypredict用户最常问也是官方文档最模糊的问题。lazypredict本身不提供save_best_model()方法但这不意味着你无法落地。我的标准三步法从结果表中选出最佳模型名称best_model_name models.sort_values(Adjusted R-Squared, ascendingFalse).index[0] print(f最佳模型: {best_model_name})从provide_models()方法中获取该模型的实例# provide_models 返回一个字典key 是模型名value 是已训练好的模型对象 model_dict reg.provide_models(X_train, X_test, y_train, y_test) best_model model_dict[best_model_name]用标准joblib保存import joblib joblib.dump(best_model, fbest_{best_model_name.replace( , _)}.pkl) # 之后加载 # loaded_model joblib.load(best_ExtraTreesRegressor.pkl)注意provide_models()方法会重新训练所有模型所以它比fit()更耗时。因此不要在每次需要模型时都调用它。我的做法是在fit()之后立刻调用一次provide_models()把所有模型都存进一个字典然后从中挑选并保存。这样你既拿到了报告也拿到了可部署的模型一步到位。6. 为什么你不该在生产环境中直接使用它以及你该用什么替代lazypredict的 GitHub 主页上写着“A library that allows you to run all sklearn algorithms with a line of code.” 这句话本身就是一个巨大的、善意的误导。它“允许”你这么做但绝不“推荐”你这么做。原因有三而且每一条都直指数据科学的

相关新闻