K 折交叉验证
本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 37 课,共 58 课。
本章将让你的评分结果更可靠。学完后,你将使用这样的图表来调整模型:
一次测试划分可能只是运气好。K 折交叉验证会将行分成若干折,这里分成 5 折,然后依次在每一折上进行测试,并用其余部分训练:
一次调用即可运行全部 5 次交叉验证,这里使用鸢尾花数据集训练决策树:
from sklearn.model_selection import cross_val_score
tree = DecisionTreeClassifier(random_state=0)
scores = cross_val_score(tree, X, y, cv=5)
print(np.round(scores, 3))
print(f"{scores.mean():.3f} {scores.std():.3f}")这会打印:
[0.967 0.967 0.9 0.967 1. ]
0.960 0.033将均值作为分数,将标准差作为波动程度。
挑战
中等一家康普茶酿造厂根据 5 项实验室读数预测批次是否变质。它的模型有多稳定?程序会读取折数,起始代码会生成数据和模型。
- 用指定的折数对模型进行交叉验证。
- 打印每一折的准确率,然后打印平均值和标准差,所有数值都保留 3 位小数。
- 打印最弱一折的编号,从 1 开始计数。
对于其他批次和 4:
Fold 1: 0.917
Fold 2: 0.933
Fold 3: 0.883
Fold 4: 0.917
Mean 0.912, std 0.018
Weakest fold: 3亲手试试
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
n_folds = int(input())
# 不要修改下面的代码:共有 240 批康普茶,每批有 5 项实验室检测数据;标签 1 表示已变质。
X, y = make_classification(n_samples=240, n_features=5, n_informative=3, n_redundant=0,
flip_y=0.08, class_sep=0.9, random_state=2)
model = LogisticRegression(max_iter=1000)
# 在下方编写你的代码。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
监督学习中的所有课
自己练习: Python 在线编译器