【代码】机器学习算法—K折交叉验证汇总
在我们平时跑代码的时候,机器学习中的算法多种多样,想必大家常常会纠结哪种算法更加适合文中的情况,后面了解到了K折交叉验证这种测算方法,介绍给大家,希望对大家有所帮助。
K 折交叉验证是一种在机器学习中广泛应用的评估模型性能和选择最优模型的技术。
一、原理
将数据集随机平均分成 K 份,每次选择其中一份作为测试集,其余 K - 1 份作为训练集,重复进行 K 次实验,得到 K 次实验的评估结果,最终取这 K 个结果的平均值作为模型性能的估计。
这种方法的优势在于,它充分利用了数据集中的所有样本,每个样本都在不同的轮次中被用于测试和训练。通过多次的训练和测试,能够更准确地评估模型在不同数据分布下的性能表现,降低了由于单次数据划分导致的偏差和不确定性。
在实际应用中,K 的选择通常需要权衡计算成本和评估的准确性。较小的 K 值(如 K = 2 或 3)计算速度较快,但评估结果的方差可能较大;较大的 K 值(如 K = 10 或 20)能够提供更稳定和准确的评估,但计算成本相对较高。一般来说,常见的选择是 K = 5 或 10,10折交叉验证法。
二、代码
(一)代码
from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.datasets import make_classification
# 生成仿真数据集
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=42)
# 创建决策树分类器,使用gini系数作为划分标准
clf = DecisionTreeClassifier(criterion="gini")
#创建交叉验证
kf = KFold(n_splits=10, shuffle=True, random_state=42)
# 进行 10 折交叉验证并计算准确率
scores = cross_val_score(clf, X, y, cv=kf,scoring='accuracy')
# 输出平均准确率
print("平均准确率: ", scores.mean())
(二)解释
cross_val_score 函数和 KFold函数都是scikit-learn 库中用于交叉验证的工具。
1.cross_val_score 函数
它用于计算交叉验证的得分。它接受一个估计器(模型)、数据集和交叉验证策略等参数,并返回每次交叉验证的得分。其主要参数包括:
(1)estimator :要评估的估计器对象。
(2)X :特征数据(输入变量)。
(3)y :目标变量(输出变量)。
(4)scoring :评估指标,例如准确率、均方误差等,accuracy表示准确率,。
(5)cv :交叉验证策略,可以是整数表示折数,也可以是 KFold 等交叉验证生成器对象,例如kf。
2.KFold函数
它是一种交叉验证的生成器。它将数据集分割为指定数量的折(fold),每次选择其中一折作为测试集,其余折作为训练集。其主要参数包括:
(1)n_splits :要分割的折数。
(2)shuffle :是否在分割前打乱数据顺序。
(3)random_state :随机数种子,用于可重复性。
以上的是全部的内容!如有任何问题或想法,请在评论区与我进行分享与讨论。谢谢大家的支持