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

一、训练集

训练集是用来训练模型的数据集合,通常我们会把数据集分成 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 创建了一个堆叠分类器,将分类器进行堆叠,并使用元分类器进行加权平均。然后使用测试集对模型进行评估。

原创文章,作者:QJEQY,如若转载,请注明出处:https://www.506064.com/n/368590.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
QJEQY的头像QJEQY
上一篇 2025-04-12 01:13
下一篇 2025-04-12 01:13

相关推荐

发表回复

登录后才能评论