• 注册
  • 机器学习 机器学习 关注:0 内容:546

    Lazy Predict:一行代码完成Scikit-Learn所有模型的训练与评价

  • 查看作者
  • 打赏作者
  • 当前位置: 职业司 > 人工智能 > 机器学习 > 正文
    • 机器学习
    • 在开始处理监督学习问题时,我们常常不确定哪些模型能够很好地处理手头的数据集。一种可能的解决方案是,从一个对许多数据集(如Random Forest)都运行良好的模型开始,然后进行迭代。这样,我们就可以建立一个我们想要改进的基准。

      进步不是由早起的人取得的。它是懒人为了找到更简单的方法来做某事而做出来的。”
      ——罗伯特·海因莱茵

      很有可能,在某个时间点,您还考虑将所有模型扔到数据集上,看看会发生什么。然而,编码起来并不简单(或者说,相当乏味),所以您可能放弃了这个想法,只是尝试了过去使用过的一些模型。但现在,有一个方便的图书馆叫lazypredict,你可以用它来训练所有可用的模型scikit-learn(以及更多,如XGBoost和LightGBM),只需要一行代码。听起来不错,对吧?让我们看看这在实践中是如何实现的!

      实际的例子

      首先,你需要通过运行以下命令来安装库:

      pip install lazypredict

      最可能的情况是,您会遇到一些关于缺少库的错误,所以只需使用以下命令分别安装它们piporconda我稍后会提到这一点,作为一种可能的改进。然后,加载所需的库:

      from lazypredict.Supervised import LazyClassifier, LazyRegressor
      from sklearn.model_selection import train_test_split
      from sklearn import datasets

      lazypredict支持分类和回归问题,因此我将简要介绍这两个问题。

      分类任务

      由于本文的思想是快速展示这个库是如何工作的,所以我不使用任何花哨的数据集,只使用来自scikit-learn的示例数据集。对于分类任务,我使用乳腺癌数据集。我加载数据并将其分成训练集和测试集。

      # load data
      data = datasets.load_breast_cancer()
      X, y = data.data, data.target
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2, random_state=42)# fit all models
      clf = LazyClassifier(predictions=True)
      models, predictions = clf.fit(X_train, X_test, y_train, y_test)

      使用lazypredict对任何熟悉的人来说都非常简单和直观scikit-learn我们首先创建一个估计量的实例,LazyClassifier在这种情况下,然后使用fit方法。通过指定predictions=True的实例创建时LazyClassifier,我们还将收到所有模型对每一次观测的预测。以防我们以后想用它们做别的事。此外,我们可以使用custom_metric参数传递一个我们想用来评估模型性能的自定义度量。

      • 注意:通过看code,,您可以看到哪些评估人员被排除在可用模型列表之外。对于分类,我们收到以下4个指标,以及将模型拟合到我们的数据集需要多长时间的指示。

      • 另一件对用户相当隐蔽的重要事情是库自动对数据集应用预处理。首先,它将使用缺失的值输入SimpleImputer(数字特征使用平均值和常量‘missing’值为分类值)。然后,它使用StandardScaler用于数字特性和两者之一OneHotEncoderOrdinalEncoder对于分类特性(取决于基数-唯一值的数量)。虽然这很方便,并确保模型实际运行,但有些用户可能更喜欢预处理数据集的不同方法。这就是为什么在我看来,这应该是图书馆的自愿特性,而不是强制性的。

        注意:要将一个特性视为分类的,它必须在底层数据框架中表示为对象类型。虽然这不是这个数据集的情况,但它在下面描述的回归问题中很重要。在那里,数据集包含一些分类特征(例如,CHAS和RAD特征)。如果不将类型转换为对象,标准库将把它们视为数字特性,并应用不正确的预处理!

        modelsDataFrame包含所有分类器的性能摘要,而predictions(这里没有显示,因为数据帧相当大)包含每个模型的所有预测。

        Lazy Predict:一行代码完成Scikit-Learn所有模型的训练与评价Lazy Predict:一行代码完成Scikit-Learn所有模型的训练与评价

        回归的任务

        如前所述,回归任务与分类问题非常相似。我使用Boston Housing数据集并实例化一个不同的类-LazyRegressor。其余的都是类似的。
        # load data
        boston = datasets.load_boston()
        X, y = boston.data, boston.target
        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2, random_state=42)# fit all models
        reg = LazyRegressor(predictions=True)
        models, predictions = reg.fit(X_train, X_test, y_train, y_test)

        自然,包含模型性能的表格对于回归任务有不同的度量,即r平方和RMSE。我们可以添加更多(例如,MAPE)使用custom_metric论点。为了保持本文的简洁,下面的表被截断了,但是可用的回归量的列表要长得多。

        Lazy Predict:一行代码完成Scikit-Learn所有模型的训练与评价Lazy Predict:一行代码完成Scikit-Learn所有模型的训练与评价

        可能的改进

        • 在简单地玩了一会之后lazypredict library,我相信有几件事会有显著的改进:

          • 这是一个简单的方法,但是要确保库有正确的依赖项列表,这样用户就不必根据他们得到的错误手动安装每个库,

          • 允许访问最好的/所有训练过的模型,现在我们只能看到带有结果和预测的表格,

          • 并行训练模型——对于小数据集来说不是问题,但是,对于大数据集来说,加速训练是很好的,

          • 创建一个专门的predict预测的方法,

          • 让默认的预处理是可选的,并且有清晰的文档记录,

          • 允许一些超参数调优。

        结论

        lazypredict是一个方便的包装器库,它使我们能够快速地将所有模型适合我们的数据集,并比较它们的性能。这样,我们就可以看到什么是“开箱即用”的。然而,这并不是模型训练和选择的灵丹妙药,因为只训练了默认的变量。正如我们所知,超参数调优可以极大地改变性能。

        您可以在my . com上找到本文使用的代码GitHub.一如既往,我们欢迎任何建设性的反馈。你可以联系我Twitter或者在评论中。

        请登录之后再进行评论

        登录

        手机阅读天地(APP)

        • 微信公众号
        • 微信小程序
        • 安卓APP
        手机浏览,惊喜多多
        匿名树洞,说我想说!
        问答悬赏,VIP可见!
        密码可见,回复可见!
        即时聊天、群聊互动!
        宠物孵化,赠送礼物!
        动态像框,专属头衔!
        挑战/抽奖,金币送不停!
        赶紧体会下,不会让你失望!
      • 实时动态
      • 签到
      • 做任务
      • 发表内容
      • 偏好设置
      • 到底部
      • 帖子间隔 侧栏位置:
      • 还没有账号?点这里立即注册