【问题标题】:Pre train a model (classifier) in scikit learn在 scikit learn 中预训练模型(分类器)
【发布时间】:2022-01-05 18:48:33
【问题描述】:

我想预训练一个模型,然后用另一个模型训练它。

我有模型Decision Tree Classifer,然后我想用模型LGBM Classifier 进一步训练它。有没有可能在 scikit learn 中做到这一点? 我已经阅读了这篇关于它的帖子https://datascience.stackexchange.com/questions/28512/train-new-data-to-pre-trained-model.。在帖子中它说

根据官方文档,多次调用 fit() 会 覆盖之前任何 fit() 学到的内容

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1) 

# Train Decision Tree Classifer
clf = DecisionTreeClassifier()
clf = clf.fit(X_train,y_train)

lgbm = lgb.LGBMClassifier()
lgbm = lgbm.fit(X_train,y_train)

#Predict the response for test dataset
y_pred = lgbm.predict(X_test)

【问题讨论】:

    标签: python scikit-learn model classification pre-trained-model


    【解决方案1】:

    也许您正在寻找堆叠分类器。

    在这种方法中,早期模型的预测可用作后期模型的特征。

    查看StackingClassifiers

    改编自文档:

    from sklearn.ensemble import StackingClassifier
    
    estimators = [
         ('dtc_model', DecisionTreeClassifier()),
     ]
    
    clf = StackingClassifier(
                    estimators=estimators, 
                    final_estimator=LGBMClassifier()
          )
    

    【讨论】:

      【解决方案2】:

      很遗憾,目前这是不可能的。根据https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.LGBMClassifier.html?highlight=init_model 的文档,如果模型来自 lightgbm,您可以继续训练模型。

      我确实尝试过这个设置:

      # dtc
      dtc_model = DecisionTreeClassifier()
      dtc_model = dtc_model.fit(X_train, y_train)
          
      # save
      dtc_fn = 'dtc.pickle.db'
      pickle.dump(dtc_model, open(dtc_fn, 'wb'))
          
      # lgbm
      lgbm_model = LGBMClassifier()
      lgbm_model.fit(X_train_2, y_train_2, init_model=dtc_fn)
      

      我得到:

      LightGBMError: Unknown model format or submodel type in model file dtc.pickle.db
      

      【讨论】:

        【解决方案3】:

        正如@Ferdy在他的帖子中解释的那样,没有简单的方法来执行这个操作,这是可以理解的。

        Scikit-learn DecisionTreeClassifier 只接受数字特征,不能处理 nan 值,而 LGBMClassifier 可以处理这些。

        通过查看scikit-learn 的决策函数,您可以看到它所能执行的只是基于feature <= threshold 的拆分。

        相反LGBM 可以执行以下操作:

        • feature is na
        • feature <= threshold
        • feature in categories

        在每一步都选择决策树中的拆分,因为它们最好地拆分项目集。他们试图最小化节点杂质(giny)或熵。

        进一步训练 DecisionTreeClassifier 的风险在于,您不确定在原始树中执行的拆分是最好的,因为您拥有 LGBM 的新拆分功能,可能/应该会带来更好的性能。

        我建议您仅使用 LGBMClassifier 重新训练模型,因为拆分可能与原始 scikit-learn 树不同。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-10-13
          • 2021-04-19
          • 2013-07-04
          • 2023-04-09
          • 1970-01-01
          • 2016-01-04
          • 1970-01-01
          • 2017-06-21
          相关资源
          最近更新 更多