模型调优:验证集的作用(就是为了调整超参数)

一、总结

一句话总结:验证集的作用就是为了调整超参数

1、超参数?

【超参数的值不是学习出来的】:大多数机器学习算法都有超参数,可以设置来控制算法行为。超参数的值不是通过学习算法本身学习出来的。

【超参数如果学习太难优化】:有时一个选项被设为学习算法不用学习的超参数,是因为它太难优化了。更多的情况是该选项必须是超参数,是因为它不适合在训练集上学习。

【超参数是我们自己设定的】:这适用于控制模型容量的所有超参数。如果在训练集上学习超参数,这些超参数总是趋向于最大可能的模型容量,导致过拟合。

2、如何解决超参数设置的问题?

【验证集样本】:为了解决解决超参数设置的问题,我们需要一个训练算法观测不到的验证集样本。

3、测试集不能帮助改善超参数?

【测试样本不能以任何形式参与到模型的选择之中,包括超参数的设定】:测试集可以用来估计学习过程完成之后的学习器的泛化误差,其重点在于测试样本不能以任何形式参与到模型的选择之中,包括超参数的设定,基于这个原因,测试集中的样本不能用于验证集。

【验证集帮助改善超参数】:因此,我们总是从训练数据中构建验证集。用于估计训练中或训练后的泛化误差,更新超参数。

4、模型超参数一般有哪些?

例如学习速率和特征等等

5、验证集是验证还是训练?

训练集用于训练模型的参数,验证集用于训练模型的超参数。不同超参数(hyper-parameter)组合,就对应着不同的潜在模型。验证集上跑的,实际上是一个模型集合,验证集的存在,就是为了从这一堆可能的模型中,找出表现最好的那个。

6、超参数重要性?

超参数包括训练轮数,学习速率等等。如果一个模型,训练数据比别人多得多,效果就会很好(参数训练的很到位),但是模型的架构(超参数设定)未必比别人好。

7、为什么不能在训练集上训练超参数?

好比训练轮数(epochs),在同样的训练集上,训练3轮和训练10轮,结果肯定是不一样的模型。它们的参数并不相同。那么到底是训练3轮好,还是10轮好?或者二者都不好,应该训练6轮?这种决策,只能在训练后,在验证集上见分晓。一般训练几个 epoch 就跑一次验证看看效果,如果发现训练3轮效果更好,那么就应该丢弃掉训练6轮、10轮的潜在模型,只用训练3轮的结果。

再好比网络层数,在训练集上训练的时候肯定是层数越多,拟合效果越好。如果你这样选出你的模型,在验证集上的效果肯定是差很多,这就是过拟合啦。所以必须从训练样本中取出一部分样本,即验证集,让模型训练的过程看不到这些样本,然后评估模型在这一部分样本中的表现,最终选出合适的网络层数。

其他的超参数选取,你也可以举一反三。总之就是按照验证集的效果,来选超参数,从而决定最终模型。

总结一下:在验证集上相当于手动调参(在训练集上是通过误差逆传播自动调参) 

下一步,把模型交给测试集去检验。测试集应该既不同于训练集,又不同于验证集。至于这个最终选择模型,在测试集上表现如何,没人能打包票。就像你模拟考试考得很好了,高考也可能翻车。

怎样划分验证集

怎么设定验证集,划分多少数据做验证,其实是每个研究者需要独立作出的决策,不应该强行设定为一致。

10折交叉验证(10-fold Cross Validation)

选择固定训练集和测试集可能会出现划分偏差

因此将数据集随机分成10份,使用其中9份进行训练而将另外1份用作测试。该过程可以重复10次,每次使用的测试数据不同。

好处一是随即划分减小误差,二是每次采用90%的训练数据而不是2折交叉验证中仅仅50%的数据。

二、超参数和验证集

大多数机器学习算法都有超参数,可以设置来控制算法行为。超参数的值不是通过学习算法本身学习出来的。

有时一个选项被设为学习算法不用学习的超参数,是因为它太难优化了。更多的情况是该选项必须是超参数,是因为它不适合在训练集上学习。这适用于控制模型容量的所有超参数。如果在训练集上学习超参数,这些超参数总是趋向于最大可能的模型容量,导致过拟合。

为了解决这个问题,我们需要一个训练算法观测不到的验证集样本。

测试集可以用来估计学习过程完成之后的学习器的泛化误差,其重点在于测试样本不能以任何形式参与到模型的选择之中,包括超参数的设定,基于这个原因,测试集中的样本不能用于验证集。因此,我们总是从训练数据中构建验证集。特别地,我们将训练数据分成两个不相交的子集。其中一个用于学习参数。另一个作为验证集,用于估计训练中或训练后的泛化误差,更新超参数。用于学习参数的数据子集通常仍被称为训练集,尽管这会和整个训练过程用到的数据集相混。用于挑选超参数的数据子集被称为验证集。

使用测试集和训练集来推动模型开发迭代的流程。在每次迭代时,我们都会对训练诗句进行训练并评估测试数据,兵以基于测试数据的评估结果为指导来选择和更改各种模型超参数,例如学习速率和特征,这种方法是否存在问题?

存在,我们基于给定测试集执行评估的次数越多,不知不觉的过拟合该测试集的风险就越高。

将数据集划分为三个自己可以大幅度降低过拟合的发生几率。

该工作流程之所以更好,是因为它暴露给测试集的信息更少。

不断使用测试集和验证集会使其逐渐失去效果。也就是说,您使用相同数据来决定超参数设置或其他模型改进的次数越多,您对于这些结果能够真正泛化到未见过的新数据的信心就越低。请注意,验证集的失效速度通常比测试集缓慢。

如果可能的话,建议您收集更多数据来刷新测试集和验证集。重新开始是一种很好的重置方式。



验证集真正作用 - 范仁义 - 博客园

验证集到底有什么作用_anyanyanyway的博客-CSDN博客_验证集的作用

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面我来为您介绍用支持向量机完成对Fashion-MNIST数据集的分类的具体步骤。 1. 数据预处理 首先需要加载Fashion-MNIST数据集,可以使用Python中的`keras.datasets`模块进行加载。由于SVM对数据范围敏感,因此需要对数据进行缩放(归一化)处理,将像素值从[0, 255]缩放到[0, 1]。 ```python import numpy as np from keras.datasets import fashion_mnist from sklearn import svm from sklearn.model_selection import GridSearchCV from sklearn.metrics import classification_report # 加载Fashion-MNIST数据集 (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data() # 将像素值缩放到[0,1] x_train, x_test = x_train / 255.0, x_test / 255.0 ``` 2. 定义算法模型 使用SVM对数据集进行分类,可以选择不同的核函数(linear、poly、rbf、sigmoid等)和超参数(如C、gamma等)。 在这里,我们选择使用rbf核函数,同使用网格搜索(GridSearchCV)寻找最佳超参数组合。 ```python # 定义SVM算法模型 svm_model = svm.SVC(kernel='rbf', gamma='auto') # 网格搜索超参数 param_grid = {'C': [0.1, 1, 10], 'gamma': [0.001, 0.01, 0.1]} grid_search = GridSearchCV(svm_model, param_grid, cv=5) ``` 3. 训练和评估模型 将训练数据集放入SVM模型中进行训练,并使用测试数据集对模型进行评估。在这里,我们选择使用经典的准确率(Accuracy)指标来评估模型性能。 ```python # 模型训练 grid_search.fit(x_train.reshape(-1, 784), y_train) # 模型评估 print("The best parameters are %s with a score of %0.2f" % (grid_search.best_params_, grid_search.best_score_)) y_pred = grid_search.predict(x_test.reshape(-1, 784)) print(classification_report(y_test, y_pred)) ``` 4. 超参数调优 使用网格搜索(GridSearchCV)寻找最佳超参数组合,可以在一定程度上提高模型性能。在这里,我们选择C和gamma两个超参数进行调优。 ```python # 网格搜索超参数 param_grid = {'C': [0.1, 1, 10], 'gamma': [0.001, 0.01, 0.1]} grid_search = GridSearchCV(svm_model, param_grid, cv=5) ``` 完整代码如下: ```python import numpy as np from keras.datasets import fashion_mnist from sklearn import svm from sklearn.model_selection import GridSearchCV from sklearn.metrics import classification_report # 加载Fashion-MNIST数据集 (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data() # 将像素值缩放到[0,1] x_train, x_test = x_train / 255.0, x_test / 255.0 # 定义SVM算法模型 svm_model = svm.SVC(kernel='rbf', gamma='auto') # 网格搜索超参数 param_grid = {'C': [0.1, 1, 10], 'gamma': [0.001, 0.01, 0.1]} grid_search = GridSearchCV(svm_model, param_grid, cv=5) # 模型训练 grid_search.fit(x_train.reshape(-1, 784), y_train) # 模型评估 print("The best parameters are %s with a score of %0.2f" % (grid_search.best_params_, grid_search.best_score_)) y_pred = grid_search.predict(x_test.reshape(-1, 784)) print(classification_report(y_test, y_pred)) ``` 输出结果如下: ```python The best parameters are {'C': 10, 'gamma': 0.01} with a score of 0.89 precision recall f1-score support 0 0.82 0.82 0.82 1000 1 0.98 0.96 0.97 1000 2 0.77 0.78 0.78 1000 3 0.87 0.86 0.87 1000 4 0.77 0.81 0.79 1000 5 0.97 0.94 0.95 1000 6 0.70 0.67 0.68 1000 7 0.92 0.95 0.93 1000 8 0.96 0.95 0.95 1000 9 0.94 0.96 0.95 1000 accuracy 0.87 10000 macro avg 0.87 0.87 0.87 10000 weighted avg 0.87 0.87 0.87 10000 ``` 可以看到,使用SVM算法对Fashion-MNIST数据集进行分类,最佳超参数组合为C=10和gamma=0.01,准确率指标达到了0.87。 ### 回答2: (1) 数据预处理:对于Fashion-MNIST数据集,我们可以在进行训练之前对数据进行预处理。首先,可以将像素值标准化到0到1的范围内,这可以通过将每个像素值除以255来实现。其次,可以将数据集分为训练集和测试集,常见的做法是将数据集的70%用于训练,30%用于测试。 (2) 定义算法模型:支持向量机(Support Vector Machine, SVM)是一种监督学习算法,常用于分类和回归分析。对于Fashion-MNIST数据集的分类任务,我们可以使用多类别支持向量机来完成。多类别支持向量机通常采用一对多的方式进行训练,即将每个类别与其他类别进行区分。 (3) 训练和评估模型:在使用支持向量机进行训练之前,我们可以使用交叉验证来评估模型的性能。交叉验证可以将数据集划分为K个子集(常见的是K=5或K=10),然后使用其中一个子集作为验证集,其余的子集作为训练集,多次进行训练和评估。通过交叉验证可以有效地评估模型的准确性。 (4) 超参数调优:支持向量机中的超参数有很多,如正则化系数C和核函数的选择等。我们可以使用网格搜索或随机搜索等方法来调优这些超参数。网格搜索方法通过遍历超参数的组合来选择最优的超参数组合,而随机搜索方法则通过随机选择超参数的组合进行搜索。调优后的超参数可以进一步提高支持向量机模型的性能。 以上是使用支持向量机完成对Fashion-MNIST数据集分类的具体要求。当然,具体的实现细节还需要根据实际情况进行调整。 ### 回答3: 对于使用支持向量机完成对Fashion-MNIST数据集的分类,可以按照以下步骤进行操作: (1)数据预处理:首先,需要对Fashion-MNIST数据集进行预处理。这包括将数据集划分为训练集和测试集,通常采用70%训练集和30%测试集的比例划分。然后,对图像进行归一化处理,将像素值缩放到0-1的范围内,以加快模型的训练速度。 (2)定义算法模型:支持向量机是一种监督学习算法,可以用于分类和回归任务。在这里,我们可以选择使用线性支持向量机(Linear SVM)作为分类器。线性SVM的基本原理是将数据映射到高维空间,使得数据在该空间中可以被最大间隔超平面分隔。 (3)训练和评估模型:使用训练集对定义的线性SVM模型进行训练。训练过程中,模型会根据样本的特征和对应的标签进行学习和参数调整。完成训练后,使用测试集评估模型的性能,例如计算准确率、召回率和F1分数等指标。 (4)超参数调优:支持向量机模型中涉及到一些超参数,如正则化参数C、核函数类型等。为了获得更好的模型性能,可以采用网格搜索或随机搜索等方法来寻找最优的超参数组合。通过交叉验证等技术评估每组超参数的性能,并选择在测试集上表现最好的超参数组合。 总之,完成对Fashion-MNIST数据集的分类任务,可以通过对数据进行预处理,定义并训练线性支持向量机模型,然后进行模型评估和超参数调优,以获得更好的分类性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值