從多個方面詳細闡述訓練集、測試集與驗證集

一、訓練集

訓練集是用來訓練模型的數據集合,通常我們會把數據集分成 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/zh-tw/n/368590.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QJEQY的頭像QJEQY
上一篇 2025-04-12 01:13
下一篇 2025-04-12 01:13

相關推薦

發表回復

登錄後才能評論