Py学习  »  机器学习算法

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

古月居 • 1 周前 • 29 次点击  

前言


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


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




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/187639