验证集的作用和在sklearn中的实现
在机器学习中,数据一般分为训练集,验证集和测试集。
训练集用于训练模型参数,测试集用于估计模型对样本的泛化误差,验证集用于“训练”模型的超参数。
一个机器学习模型通常包括两个部分的参数:模型参数和超参数。其中超参数是用于控制模型行为的参数,这些参数不是通过模型本身学习而来的。想要获得超参数,并不能直接使用训练集进行,因为如果使用训练集来选择超参数,那么超参数总是会往增加模型容量的方向发展,容易出现过拟合,那么我们就需要单独取出一部分数据进行超参数的确定,而这一部分就是验证集。
参考文章:https://blog.csdn.net/jmh1996/article/details/79838917?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare
由于我在学习机器学习,所以使用sklearn中的神器:GridSearcherCV()
它使用交叉验证的方式,对某一分类器,你制定想要调参的名称和数值,作为一个字典传入进这个函数,然后它就会告诉你最佳的参数组合.(其实就是for for for都试试).
from sklearn.model_selection import GridSearchCV
def grid(clf, x_prove, y_prove):
tuned_parameter = [{'max_features': [2, 'auto', 'log2'], 'n_estimators': [100, 200, 1000]}]
rfc = GridSearchCV(estimator=clf, param_grid=tuned_parameter, cv=5, n_jobs=1)
rfc.fit(x_prove, y_prove)
return rfc.best_params_['max_features'], rfc.best_params_['n_estimators']
代码中参数:
clf 可以是很多机器学习算法的实例化对象,比如:clf = tree.DecisionTreeClassifier(criterion=‘gini’)
x_prove,y_prove:验证集的数据和标签。
注意一下这条语句:
tuned_parameter = [{'max_features': [2, 'auto', 'log2'], 'n_estimators': [100, 200, 1000]}]
由于当时不知道随机森林不需要交叉验证,所以使用了该方法,所以字典中的内容其实是随机森林,如果大家想试试这个GridSearchCV函数,就需要把字典进行修改,改为对应机器学习算法的参数进行一个最佳参数的选择。
提一句
:随机森林不需要单独的验证集交叉验证,他会使用bootstrap sampling方法从训练集中找到大约63.2%的数据进行训练,而剩下的约36.8%数据可以作为验证集来对泛化性能进行“包外估计”(和单独的验证集交叉验证我感觉功能一样,都是为了提升泛化性能),对应RandomForestClassifier函数中参数oob_score,默认为False,需要自己手动设置为True。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix