python - 迭代地实例化 Sklearn 模型
问题描述
我正在尝试迭代地创建、训练和测试 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
变量值,它恰好是循环的最后一个配置。
为了解决这种情况,我建议您使用两种方法:
- 在分配后立即运行
classifier.fit()
函数classifier
并将结果以最适合您的方式存储到数组/字典中。 classifiers =[]
在第一个循环之上创建一个数组(
走得更远
您正在尝试做的是超参数搜索,这不是最具可扩展性的方式。
您可以查看此博客条目以了解如何正确执行此操作:https ://towardsdatascience.com/a-conceptual-explanation-of-bayesian-model-based-hyperparameter-optimization-for-machine-learning-b8172278050f
如果您着急,需要立即查看如何实现超参数调整并需要示例,请参阅上述博客条目的笔记本。
推荐阅读
- javafx - PseudoClass:设置自定义状态时状态中断的通知
- javascript - 我如何同步调用promise
- machine-learning - box-cox变换后是否需要对数据进行缩放
- javascript - 未捕获的类型错误:无法读取未定义的属性“包含”
- node.js - Tron 智能合约 web api 不适用于 docker quickstart network
- javascript - 切换到另一个视频并连续重复
- django - 注释返回的单个元素而不是分组
- c - 如何检查两个文件的内容是否相同?
- python - np.arange 不能按预期使用浮点参数
- c++ - 操作系统和编译器如何通信以启动程序编译