一、訓練集
訓練集是用來訓練模型的數據集合,通常我們會把數據集分成 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