网站建设与运营 市场分析,网站qq弹窗代码,外包公司能长期干吗,啤酒网站建设文章目录 sklearn学习(30) 模型选择与评估-验证曲线: 绘制分数以评估模型30.1. 验证曲线30.2. 学习曲线 sklearn学习(30) 模型选择与评估-验证曲线: 绘制分数以评估模型
文章参考网站#xff1a; https://sklearn.apachecn.org/ 和 https://scikit-learn.org/stable/
每种估… 文章目录 sklearn学习(30) 模型选择与评估-验证曲线: 绘制分数以评估模型30.1. 验证曲线30.2. 学习曲线 sklearn学习(30) 模型选择与评估-验证曲线: 绘制分数以评估模型
文章参考网站 https://sklearn.apachecn.org/ 和 https://scikit-learn.org/stable/
每种估计器都有其优势和缺陷。它的泛化误差可以用偏差、方差和噪声来分解。估计值的 偏差 是不同训练集的平均误差。估计值的 方差 用来表示它对训练集的变化有多敏感。噪声是数据的一个属性。
在下面的图中我们可以看到一个函数 f ( x ) cos ( 3 2 π x ) f(x) \cos (\frac{3}{2} \pi x) f(x)cos(23πx) 和这个函数的一些噪声样本。 我们用三个不同的估计来拟合函数 多项式特征为1,4和15的线性回归。我们看到第一个估计最多只能为样本和真正的函数提供一个很差的拟合 因为它太简单了(高偏差第二个估计几乎完全近似最后一个估计完全接近训练数据 但不能很好地拟合真实的函数即对训练数据的变化高方差)非常敏感。 偏差和方差是估计所固有的属性我们通常必须选择合适的学习算法和超参数以使得偏差和 方差都尽可能的低参见偏差-方差困境。 另一种降低方差的方法是使用更多的训练数据。不论如何如果真实函数过于复杂并且不能用一个方 差较小的估计值来近似则只能去收集更多的训练数据。
在一个简单的一维问题中我们可以很容易看出估计值是否存在偏差或方差。然而在高维空间中 模型可能变得非常难以具象化。 出于这种原因使用以下工具通常是有帮助的。 示例: Underfitting vs. OverfittingPlotting Validation CurvesPlotting Learning Curves
30.1. 验证曲线
我们需要一个评分函数参见模型评估模型评估: 量化预测的质量来验证一个模型 例如分类器的准确性。 选择估计器的多个超参数的正确方法当然是网格搜索或类似方法 参见调优估计的超参数 调整估计器的超参数 其选择一个或多个验证集上的分数最高的超参数。 请注意如果我们基于验证分数优化了超参数则验证分数就有偏差了并且不再是一个良好的泛化估计。 为了得到正确的泛化估计我们必须在另一个测试集上计算得分。
然而绘制单个超参数对训练分数和验证分数的影响有时有助于发现该估计是否因为某些超参数的值 而出现过拟合或欠拟合。
本例中,下面的方程 validation_curve 能起到如下作用: import numpy as npfrom sklearn.model_selection import validation_curvefrom sklearn.datasets import load_irisfrom sklearn.linear_model import Ridge np.random.seed(0)iris load_iris()X, y iris.data, iris.targetindices np.arange(y.shape[0])np.random.shuffle(indices)X, y X[indices], y[indices] train_scores, valid_scores validation_curve(Ridge(), X, y, alpha,
... np.logspace(-7, 3, 3),
... cv5)train_scores
array([[0.93..., 0.94..., 0.92..., 0.91..., 0.92...],[0.93..., 0.94..., 0.92..., 0.91..., 0.92...],[0.51..., 0.52..., 0.49..., 0.47..., 0.49...]])valid_scores
array([[0.90..., 0.84..., 0.94..., 0.96..., 0.93...],[0.90..., 0.84..., 0.94..., 0.96..., 0.93...],[0.46..., 0.25..., 0.50..., 0.49..., 0.52...]])如果训练得分和验证得分都很低则估计器是不合适的。如果训练得分高验证得分低则估计器过拟合 否则估计会拟合得很好。通常不可能有较低的训练得分和较高的验证得分。所有三种情况都可以 在下面的图中找到其中我们改变了数字数据集上 SVM 的参数 γ \gamma γ 。 30.2. 学习曲线
学习曲线显示了对于不同数量的训练样本的估计器的验证和训练评分。它可以帮助我们发现从增加更多的训 练数据中能获益多少以及估计是否受到更多来自方差误差或偏差误差的影响。如果在增加训练集大小时验证分数和训练 分数都收敛到一个很低的值那么我们将不会从更多的训练数据中获益。在下面的图中看到一个示例朴素贝叶斯大致收敛到一个较低的分数。 我们可能需要使用评估器或者一个当前评估器的参数化形式来学习更复杂概念例如有一个较低的偏差。 如果训练样本的最大时训练分数比验证分数得分大得多那么增加训练样本很可能会增加泛化能力。 在下面的图中可以看到支持向量机SVM可以从更多的训练样本中获益。 我们可以使用:learning_curve函数来绘制这样一个学习曲线所需的值已使用的样本数量训练集 上的平均分数和验证集上的平均分数: from sklearn.model_selection import learning_curvefrom sklearn.svm import SVC train_sizes, train_scores, valid_scores learning_curve(
... SVC(kernellinear), X, y, train_sizes[50, 80, 110], cv5)train_sizes
array([ 50, 80, 110])train_scores
array([[0.98..., 0.98 , 0.98..., 0.98..., 0.98...],[0.98..., 1. , 0.98..., 0.98..., 0.98...],[0.98..., 1. , 0.98..., 0.98..., 0.99...]])valid_scores
array([[1. , 0.93..., 1. , 1. , 0.96...],[1. , 0.96..., 1. , 1. , 0.96...],[1. , 0.96..., 1. , 1. , 0.96...]])