繁体   English   中英

迭代地实例化 Sklearn 模型

[英]Instantiating Sklearn Models Iteratively

我正在尝试迭代地创建、训练和测试 sklearn 模型:

for min_samples_leaf in [1, 2, 3, 5]:
    for min_samples_split in [2, 3, 4, 10]:
        for n_estimators in [200, 500, 1000, 1500]:
                classifier = RandomForestClassifier(bootstrap=True, min_samples_leaf=min_samples_leaf, min_samples_split=min_samples_split, n_estimators=n_estimators, random_state=6, n_jobs=4)
                classifier.fit(X_train, y_train)
                print(accuracy_score(y_validate, classifier.predict(X_validate)))

但是,每次训练classifier器并针对验证集打印结果时,准确度得分都是相同的。

我的问题是(1)为什么会这样? (2)采取这种方法的正确方法是什么?

编辑:可能需要注意的是,我也在以其他方式测量准确性以及准确性分数,并且每次迭代的结果都完全相同。

那是因为你正在训练最后一个classifier变量值,它恰好是循环的最后一个配置。

为了解决这种情况,我建议您采用两种方法:

  1. 在分类器分配后立即运行classifier classifier.fit() function 并将结果以最适合您的方式存储到数组/字典中。
  2. 在第一个循环和 append 的顶部创建一个数组( classifiers =[] ),然后为您配置的每个新分类器创建一个数组,然后迭代该列表,并适合每个分类器。

更进一步

您要做的是超参数搜索,这不是最具可扩展性的方式。

您可以查看此博客条目以了解如何正确执行此操作: https://towardsdatascience.com/a-conceptual-explanation-of-bayesian-model-based-hyperparameter-optimization-for-machine-learning-b8172278050f

如果您很着急,需要立即了解如何实现超参数调整并需要示例,请参阅上述博客条目的笔记本。

https://github.com/WillKoehrsen/hyperparameter-optimization/blob/master/Bayesian%20Hyperparameter%20Optimization%20of%20Gradient%20Boosting%20Machine.ipynb

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM