在支持向量机(SVM)的应用中,选择合适的参数C和核函数参数γ至关重要。本文旨在演示如何选取最合适的参数组合,以优化模型性能。我们将采用两种方法:手动遍历和利用sklearn
中的工具来实现自动化。
目前我们有一个数据集,其所有变量已经定义。我们将数据集分为训练集和验证集,以便评估模型的泛化能力。
我们首先从数据集中提取训练集和验证集:
python
training_data = pd.DataFrame(mat.get('X'), columns=['X1', 'X2'])
training_data['y'] = mat.get('y')
validation_data = pd.DataFrame(mat.get('Xval'), columns=['X1', 'X2'])
validation_data['y'] = mat.get('yval')
接下来,我们需要搜索不同的C和γ组合,找到最优的参数组合。我们设定候选参数值,并生成所有可能的组合:
python
candidates = [0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30, 100]
combinations = [(C, gamma) for C in candidates for gamma in candidates]
对于每个参数组合,我们训练一个SVM模型,并在验证集上评估其性能: ```python accuracies = []
for C, gamma in combinations: svc = svm.SVC(C=C, gamma=gamma) svc.fit(trainingdata[['X1', 'X2']], trainingdata['y']) accuracy = svc.score(validationdata[['X1', 'X2']], validationdata['y']) accuracies.append(accuracy)
bestaccuracyindex = np.argmax(accuracies) bestparams = combinations[bestaccuracyindex] bestaccuracy = accuracies[bestaccuracyindex] ```
最终,我们确定了最佳参数组合及其相应的准确度:
python
print(f"Best Accuracy: {best_accuracy}")
print(f"Best Parameters: {best_params}")
在确定了最佳参数组合后,我们使用这些参数构建最终模型,并评估其在验证集上的表现:
python
best_svm = svm.SVC(C=best_params[0], gamma=best_params[1])
best_svm.fit(training_data[['X1', 'X2']], training_data['y'])
predictions = best_svm.predict(validation_data[['X1', 'X2']])
print(metrics.classification_report(validation_data['y'], predictions))
除了手动遍历外,我们还可以使用sklearn
提供的交叉验证功能来简化这一过程。这种方法可以自动搜索最佳参数组合:
python
if __name__ == "__main__":
parameters = {'C': candidates, 'gamma': candidates}
svc = svm.SVC()
clf = GridSearchCV(svc, parameters, n_jobs=-1)
clf.fit(training_data[['X1', 'X2']], training_data['y'])
print("Best Parameters:", clf.best_params_)
print("Best Score:", clf.best_score_)
predictions = clf.predict(validation_data[['X1', 'X2']])
print(metrics.classification_report(validation_data['y'], predictions))
通过以上步骤,我们可以有效地选择和评估SVM的最佳参数组合,从而提升模型的性能。