您的位置:

从多个方面详细阐述训练集、测试集与验证集

一、训练集

训练集是用来训练模型的数据集合,通常我们会把数据集分成 80% 的训练集和 20% 的测试集。训练集的质量直接关系到模型的训练效果,以下是几个训练集的相关要点:

1. 数据预处理

   import pandas as pd
   from sklearn.preprocessing import StandardScaler

   # load data
   data = pd.read_csv("dataset.csv")

   # separate features and labels
   X = data.iloc[:, :-1]
   y = data.iloc[:, -1]

   # standardize features
   scaler = StandardScaler()
   X = scaler.fit_transform(X)

数据预处理是一个至关重要的步骤,可以帮助我们处理缺失值、异常值、重复值等问题,并且标准化数据也有助于提高模型训练的效率。以上是一个示例代码,可以使用 sklearn 中的 StandardScaler 对数据进行标准化处理。

2. 数据增强

   import imgaug.augmenters as iaa

   # image augmentations
   augmentations = iaa.Sequential([
      iaa.Fliplr(p=0.5),
      iaa.GaussianBlur(sigma=(0, 3.0)),
      iaa.Sometimes(0.5, iaa.Affine(
        rotate=(-45, 45),
        shear=(-20, 20),
        mode='reflect'
      ))
   ])

数据增强是指通过各种技术手段,对原始数据进行一定的变换,生成新的数据样本,从而扩大训练集的规模,提高模型的泛化能力。示例代码中使用了 imgaug 库进行图像增强操作,包括水平翻转、高斯模糊、仿射变换等。

3. 模型训练

   from sklearn.svm import SVC

   # train model
   model = SVC(kernel='rbf', C=1, gamma='auto')
   model.fit(X_train, y_train)

   # evaluate model on training set
   train_acc = model.score(X_train, y_train)

模型训练是训练集的核心部分,通常我们会选择一种合适的模型,并设置相应的超参数进行训练。例子中使用了 sklearn 中的 SVM 进行训练,同时对训练集进行评估,计算出训练集的准确率。

二、测试集

测试集是用来评估模型性能的数据集合,通常我们会在训练集上训练好模型后,再用测试集来检测模型的泛化性能。以下是几个测试集的相关要点:

1. 数据评估

   # evaluate model on test set
   test_acc = model.score(X_test, y_test)

   print('Training Accuracy:', train_acc)
   print('Testing Accuracy:', test_acc)

模型评估是用来测量模型性能的一个重要指标。上述代码段中使用了测试集对模型进行评估,即计算测试集上的准确率。同时通过比较训练集的准确率和测试集的准确率,可以了解模型是否存在过拟合现象。

2. 超参数优化

   from sklearn.model_selection import GridSearchCV

   # define hyperparameters
   param_grid = {'C': [0.1, 1, 10, 100],
             'kernel': ['linear', 'rbf', 'poly', 'sigmoid'],
             'gamma': ['scale', 'auto']}

   # perform grid search
   grid = GridSearchCV(model, param_grid=param_grid, cv=5)
   grid.fit(X_train, y_train)

   # evaluate best model on test set
   best_model = grid.best_estimator_
   test_acc = best_model.score(X_test, y_test)

超参数优化是通过对模型的超参数进行搜索,找到最优参数,来提高模型性能的一种方式。使用 GridSearchCV 进行超参数搜索,示例代码中定义了 SVM 的超参数值,包括 C、kernel 和 gamma。然后使用 5 折交叉验证进行参数搜索,返回最优的模型,并使用测试集进行评估。

3. 模型集成

   from sklearn.ensemble import VotingClassifier

   # create submodels
   estimators = [
      ('svm', svm_model),
      ('rf', rf_model),
      ('knn', knn_model)
   ]

   # create voting classifier
   voting_clf = VotingClassifier(estimators=estimators, voting='hard')
   voting_clf.fit(X_train, y_train)

   # evaluate on test set
   test_acc = voting_clf.score(X_test, y_test)

模型集成是通过组合多个模型的预测结果,获得更加准确的预测结果的一种方式。使用 VotingClassifier 创建投票分类器,将多个分类器进行组合,使用硬投票策略进行组合。

三、验证集

验证集是用来对模型进行调整的数据集合,除了训练集和测试集之外,还需要一个额外的数据集合来验证模型的性能。以下是几个验证集的相关要点:

1. 数据划分

   from sklearn.model_selection import train_test_split

   # load data
   data = pd.read_csv("dataset.csv")

   # separate features and labels
   X = data.iloc[:, :-1]
   y = data.iloc[:, -1]

   # split data into train, validation, and test sets
   X_train, X_valtest, y_train, y_valtest = train_test_split(X, y, test_size=0.4, random_state=42)
   X_val, X_test, y_val, y_test = train_test_split(X_valtest, y_valtest, test_size=0.5, random_state=42)

数据划分是将整个数据集划分为训练集、测试集和验证集的过程。通常我们将数据集按照 6:2:2 或者 7:2:1 的比例进行划分。上述代码段中使用了 train_test_split 函数将数据集划分成了三份,其中 X_train 和 y_train 是训练集,X_val 和 y_val 是验证集,X_test 和 y_test 是测试集。

2. 模型调整

   from sklearn.model_selection import RandomizedSearchCV

   # define hyperparameters
   param_distribs = {'n_estimators': [50, 100, 150, 200],
             'max_depth': [3, 5, 7, 9],
             'min_samples_split': [2, 4, 6, 8],
             'bootstrap': [True, False]}

   # perform randomized search
   rf_model = RandomForestClassifier(random_state=42)
   rnd_search = RandomizedSearchCV(rf_model, param_distributions=param_distribs,
           cv=5, n_iter=20, random_state=42)
   rnd_search.fit(X_train, y_train)

   # evaluate best model on validation set
   best_model = rnd_search.best_estimator_
   val_acc = best_model.score(X_val, y_val)

模型调整是利用验证集对模型的超参数进行调整,从而提高模型的性能。示例代码中使用了随机搜索(RandomizedSearchCV)对随机森林模型(RandomForestClassifier)进行超参数搜索,得到最优的模型,并使用验证集进行评估。

3. 模型融合

   from mlxtend.classifier import StackingCVClassifier

   # create submodels
   estimators = [
      ('svm', svm_model),
      ('rf', rf_model),
      ('knn', knn_model)
   ]

   # create stacking classifier
   sc = StackingCVClassifier(classifiers=[model1, model2, model3],
           meta_classifier=meta_classifier)

   # fit and evaluate on test set
   sc.fit(X_train, y_train)
   test_acc = sc.score(X_test, y_test)

模型融合是将多个模型的预测结果进行加权平均或者组合,得到更加准确的预测结果的一种方式。示例代码中使用了 mlxtend 库中的 StackingCVClassifier 创建了一个堆叠分类器,将分类器进行堆叠,并使用元分类器进行加权平均。然后使用测试集对模型进行评估。