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