社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【机器学习从0到1】机器学习中的验证方式详解

新机器视觉 • 10 月前 • 264 次点击  

前言


在机器学习中,模型的性能不仅仅取决于算法本身,还与 数据集的划分方式 和 验证方法 密切相关。如果验证方式选择不当,可能会导致模型出现 过拟合  欠拟合,从而在真实应用中表现不佳。因此,掌握常见的验证方法和调参技巧,是每一个机器学习入门者必须具备的基本能力。


本文将系统介绍机器学习中的验证方式,包括过拟合与欠拟合问题、交叉验证的基本原理与变体方法,以及超参数调优中的网格搜索与随机搜索。


图片



1 什么是过拟合?产生过拟合的原因?


过拟合(Overfitting) 指的是模型在训练集上表现极好,但在测试集或新数据上表现较差的现象。


其本质原因在于:模型过于“记住”训练数据的细节和噪声,从而丧失了对新数据的泛化能力。


产生过拟合的常见原因包括:


1)模型复杂度过高(例如深度神经网络层数过多、决策树深度过大);

2)训练数据量不足;

3)训练集噪声较多;

4)缺乏正则化手段。



2 如何避免过拟合问题?


常见的解决方法有:


1)增加数据量:更多的数据可以帮助模型学习到更稳健的规律;


2)正则化:在损失函数中加入正则项(如 L1、L2)限制模型复杂度;


图片


3)剪枝(针对决策树):限制最大深度或最小样本数;


4)Dropout(针对神经网络):在训练过程中随机丢弃部分神经元,避免过度依赖;


5)交叉验证:合理选择模型参数,避免模型在训练集上“过度拟合”。



3 什么是欠拟合?


欠拟合(Underfitting) 指的是模型在训练集和测试集上都表现很差,说明模型没有学到数据的有效模式。


原因通常是:


1)模型复杂度太低(例如用线性模型拟合非线性数据);

2)特征工程不足,没有提取有效特征;

3)训练时间不足,模型未收敛。



4 如何避免欠拟合问题?


1)增加模型复杂度(例如用更复杂的模型);

2)增加特征维度,进行更好的特征提取;

3)训练更多轮次,直到损失收敛;

4)减少正则化强度,允许模型更充分地学习。



5 什么是交叉验证?

交叉验证的作用是什么?


交叉验证(Cross Validation, CV) 是一种评估模型泛化能力的方法。其基本思想是:将数据集划分为多个子集,反复进行训练与验证,从而更客观地评估模型性能。


作用包括:


1)避免过拟合和欠拟合;

2)更合理地利用有限数据集;

3)在调参时帮助选择最优超参数。



6 交叉验证主要有哪几种方法?


1)留出法(Hold-Out)


将数据集随机分为训练集和测试集,例如 7:3 或 8:2。

缺点:结果依赖于划分方式,可能不稳定。


2)留一法(LOO-CV, Leave-One-Out)


每次留下一个样本作为验证,其余作为训练,重复 m 次(m 为样本数)。


优点:利用数据最充分;缺点:计算开销大。


3)K 折交叉验证(K-Fold CV)


将数据分为 K 份,每次用其中一份作为验证,其余作为训练,重复 K 次。

这是最常用的方法。


4)重复 K 折交叉验证


在 K 折交叉验证的基础上,重复多次随机划分,得到更稳健的结果。



7 什么是 K 折交叉验证?


图片


K 折交叉验证(K-Fold CV) 是最常见的一种交叉验证方法。具体步骤:


1)将数据集划分为 K 个大小相近的子集;


2)每次选取其中 1 个子集作为验证集,其余 K-1 个子集作为训练集;


3)重复 K 次,计算平均性能指标。


例如,若 K=5,那么我们会得到 5 个模型,最终结果是这 5 次验证的平均值。


优点:结果较稳定,充分利用了数据。


缺点:计算成本比留出法高。



8 如何在 K 折交叉验证中选择 K?


常见取值:K=5 或 K=10;


K 值大:偏差更小,但计算成本更高;


K 值小:计算更快,但结果可能波动较大。


通常情况下,K=5 或 10 被认为是折中选择。



9 网格搜索(GridSearchCV)


图片


在实际应用中,很多算法有超参数(例如 SVM 的 C、γ;随机森林的树数等)。为了找到最优超参数组合,我们可以使用 网格搜索(Grid Search)。


其基本思想是:枚举所有超参数组合,在交叉验证中逐一尝试,选择性能最好的参数。


缺点:计算开销大,尤其是参数组合较多时。


Python 示例:


from sklearn.model_selection import GridSearchCVfrom sklearn.svm import SVC
param_grid = {'C':[0.1,1,10], 'kernel':['linear','rbf']}grid = GridSearchCV(SVC(), param_grid, cv=5)grid.fit(X_train, y_train)
print("最佳参数:", grid.best_params_)print("最佳得分:", grid.best_score_)



10 随机搜索(RandomizedSearchCV)


图片


与网格搜索不同,随机搜索(Random Search) 并不遍历所有参数组合,而是随机选择一部分组合进行搜索。


优点:


对于参数空间很大的情况,效率更高;


有时随机搜索的效果甚至优于网格搜索。


from sklearn.model_selection import RandomizedSearchCVfrom sklearn.ensemble import RandomForestClassifierfrom scipy.stats import randint
param_dist = {'n_estimators': randint(50,200), 'max_depth': randint(3,10)}random_search = RandomizedSearchCV(RandomForestClassifier(),                                   param_dist, cv=5, n_iter=10)random_search.fit(X_train, y_train)
print("最佳参数:", random_search.best_params_)



11. 总结


验证方式是机器学习中至关重要的一环。


过拟合:训练效果好但泛化能力差,可以通过正则化、交叉验证等方式避免;


欠拟合:模型过于简单,表现不佳,可以通过增加复杂度解决;


交叉验证:是评估和调优的核心方法,尤其是 K 折交叉验证;


网格搜索和随机搜索:是常用的超参数调优手段。


掌握这些验证方法,能够帮助我们更科学地选择模型、调参,并提高泛化能力。



12.参考文献


https://www.cnblogs.com/chuqianyu/p/17684614.html


https://blog.csdn.net/WHYbeHERE/article/details/108192957


https://blog.csdn.net/weixin_41882890/article/details/107008400


https://blog.csdn.net/weixin_41960890/article/details/104891561



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/187700