mlr包非常棒,创建ModelMultiplexer的想法也很有帮助.但ModelMultiplexer 从所使用的模型中" 选择 "了1个单一模型.
是否有任何支持或计划支持创建单个模型的Bagged或Boosted Ensemble?
bls = list(
makeLearner("classif.ksvm"),
makeLearner("classif.randomForest")
)
lrn = makeModelMultiplexer(bls)
ps = makeModelMultiplexerParamSet(lrn,
makeNumericParam("sigma", lower = -10, upper = 10, trafo = function(x) 2^x),
makeIntegerParam("ntree", lower = 1L, upper = 500L))
> print(res)
Tune result:
**Op. pars: selected.learner=classif.randomForest; classif.randomForest.ntree=197
mmce.test.mean=0.0333**
Run Code Online (Sandbox Code Playgroud) 对于分类任务,我使用投票分类器来集成逻辑回归和SVM,投票参数设置为soft.结果明显优于每个单独的模型.我不确定我是否理解它是如何工作的.模型如何才能在两个模型之间找到多数投票?
python classification machine-learning scikit-learn ensemble-learning
我正在尝试使用tidymodels stacks包来执行集成建模。按照他们的文章中提供的说明,我能够成功地重现该示例。
\n但是,当我在代码的“knn_res”部分的超参数调整期间添加并行化时:
\nlibrary(doParallel)\nlibrary(parallel)\nset.seed(2020)\ncls <- makePSOCKcluster(parallelly::availableCores())\nregisterDoParallel(cls)\nknn_res <- \n tune_grid(\n knn_wflow,\n resamples = folds,\n metrics = metric,\n grid = 4,\n control = ctrl_grid\n )\nstopCluster(cls)\n\nRun Code Online (Sandbox Code Playgroud)\n我在运行代码的“tree_frogs_model_st”部分时遇到错误:
\ntree_frogs_model_st <-\n tree_frogs_data_st %>%\n blend_predictions()\nRun Code Online (Sandbox Code Playgroud)\n错误消息指出:
\nError in summary.connection(connection) : invalid connection\nRun Code Online (Sandbox Code Playgroud)\n我相信这个问题可能与stacks::control_stack_grid()函数有关,但我不确定如何解决它。请指教。
\n更新(完整代表)
\n为了简洁起见,我排除了线性模型。
\nlibrary(doParallel)\nlibrary(parallel)\nset.seed(2020)\ncls <- makePSOCKcluster(parallelly::availableCores())\nregisterDoParallel(cls)\nknn_res <- \n tune_grid(\n knn_wflow,\n resamples = folds,\n metrics = metric,\n grid = 4,\n control = ctrl_grid\n )\nstopCluster(cls)\n\nRun Code Online (Sandbox Code Playgroud)\n由reprex 包于 2023 …
我正在此站点https://github.com/vsmolyakov/experiments_with_python/blob/master/chp01/ensemble_methods.ipynb上运行 Python 2 笔记本, 以使用 python 练习集成方法,并在运行这部分代码时出现错误Python 3:
plt.figure()
(_, caps, _) = plt.errorbar(num_est, bg_clf_cv_mean, yerr=bg_clf_cv_std, c='blue', fmt='-o', capsize=5)
for cap in caps:
cap.set_markeredgewidth(1)
plt.ylabel('Accuracy'); plt.xlabel('Ensemble Size'); plt.title('Bagging Tree Ensemble');
plt.show()
Run Code Online (Sandbox Code Playgroud)
错误是“matplotlib不支持生成器作为输入”解决方案是什么?
我查看了 scikit-learn 的文档,但我不清楚在 VotingClassifier 下使用了什么样的分类方法?它是逻辑回归、SVM 还是某种树方法?
我对改变引擎盖下使用的分类器方法的方法很感兴趣。如果 Scikit-learn 不提供这样的选项,是否有一个可以与提供此类功能的 scikit-learn 轻松集成的 python 包?
编辑:
我的意思是用于分类方法第二级模型。我非常清楚第一级分类器可以是 scikit-learn 支持的任何类型的分类器。
第二级分类器使用第一级分类器的预测作为输入。所以我的问题是 - 这个二级分类器使用什么方法?是逻辑回归吗?或者是其他东西?我可以改变它吗?
我是AdaBoost算法的新手.在sklearn中, SAMME算法的_boost_discrete()将分类器权重返回为" estimator_weight "
def _boost_discrete(self, iboost, X, y, sample_weight):
.......
return sample_weight, estimator_weight, estimator_error
Run Code Online (Sandbox Code Playgroud)
但是,对于SAMME.R算法,"_ boost_real()" 返回 "1"而不是返回估计量权重.
def _boost_real(self, iboost, X, y, sample_weight):
.......
return sample_weight, 1., estimator_error
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么SAMME.R算法将estimator_weight返回为'1'.我正在关注ref [1].请帮我理解算法.提前致谢.
参考:[1] J. Zhu,H.Zou,S.Rosset,T.Hastie,"Multi-class AdaBoost",2009.
是否有 Spark api 可以在 Spark 中构建堆叠集成,或者应该从头开始构建它们?我还没有\xe2\x80\x99t 在网上找到任何有关此主题的资源
\npython apache-spark ensemble-learning pyspark apache-spark-mllib
我正在尝试根据许多 GLM、GBM 和深度学习模型在 H2O 中创建一个集成模型。
这是我到目前为止所做的。
导入相关库:
import h2o
from h2o.estimators.glm import H2OGeneralizedLinearEstimator
from h2o.estimators.gbm import H2OGradientBoostingEstimator
from h2o.estimators.deeplearning import H2ODeepLearningEstimator
from h2o.estimators.stackedensemble import H2OStackedEnsembleEstimator
from h2o.grid.grid_search import H2OGridSearch
Run Code Online (Sandbox Code Playgroud)
数据可以从这里下载。进口:
airlines = h2o.import_file(path = "/Users/alexwoolford/h2o/allyears2k.csv", destination_frame = "airlines.hex")
Run Code Online (Sandbox Code Playgroud)
分为训练/测试集:
airlines_80,airlines_20 = airlines.split_frame(ratios=[.8], destination_frames=["airlines_80.hex", "airlines_20.hex"])
Run Code Online (Sandbox Code Playgroud)
定义变量(将 y 预测为 x 中所有列的函数):
x= airlines.columns
y= "ArrDelay"
x.remove(y)
Run Code Online (Sandbox Code Playgroud)
设置公共属性:
folds=5
assignment_type="Modulo"
search_criteria={'strategy': 'RandomDiscrete', 'max_models': 5, 'seed': 1}
Run Code Online (Sandbox Code Playgroud)
使用H2O的网格搜索来创建各种模型:
# GLM
glm_params = {"alpha": [0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, …Run Code Online (Sandbox Code Playgroud) 需要一段时间才能回答实际问题,所以请耐心等待。AdaBoost 文档指出,它“是一个元估计器,首先在原始数据集上拟合分类器,然后在同一数据集上拟合分类器的其他副本,但会调整错误分类实例的权重”。为此,必需的参数之一是base_estimator。为了与base_estimator一起使用AdaBoostClassifer,“需要支持样本加权”。
所以我的第一个问题是 - 哪些分类器为样本加权提供支持?我做了一些研究,幸运的是,比我聪明的人找到了答案。稍微更新一下,它的工作原理如下:通过运行
\n\nfrom sklearn.utils.testing import all_estimators \n\nprint(all_estimators(type_filter=\'classifier\'))\nRun Code Online (Sandbox Code Playgroud)\n\n您将获得所有分类器的列表(结果有 31 个!)。然后,如果你跑
\n\nimport inspect\n\nfor name, clf in all_estimators(type_filter=\'classifier\'):\n if \'sample_weight\' in inspect.getfullargspec(clf().fit)[0]:\n print(name)\nRun Code Online (Sandbox Code Playgroud)\n\n您可以获得为样本加权提供支持的所有分类器的列表(其中 21 个,出于好奇)。
\n\n到目前为止,一切都很好。但现在我们必须处理另一个 AdaBoostClassifer参数,即algorithm。您有两个选择:{\xe2\x80\x98SAMME\xe2\x80\x99, \xe2\x80\x98SAMME.R\xe2\x80\x99}, optional (default=\xe2\x80\x99SAMME.R\xe2\x80\x99)。我们被告知“使用 SAMME.R 真实提升算法 base_estimator必须支持类概率的计算”。这就是我陷入困境的地方。在线搜索,我只能找到两个与 \xe2\x80\x98SAMME.R\xe2\x80\x99 一起使用的分类器作为algorithm: DecisionTreeClassifier(这是默认值)和 的参数RandomForestClassifier。
那么问题来了 - 21 个兼容的其他分类器中还有哪些AdaBoostClassifer为类别概率的计算提供支持?
谢谢。
\npython ×4
scikit-learn ×4
adaboost ×2
python-3.x ×2
r ×2
apache-spark ×1
generator ×1
h2o ×1
matplotlib ×1
mlr ×1
pyspark ×1
r-parsnip ×1
tidymodels ×1