svm的交叉验证和网格搜索调参代码
时间: 2024-11-24 08:10:42 浏览: 9
SVM (Support Vector Machine) 的交叉验证和网格搜索是用来优化模型参数、提高模型泛化能力的重要步骤。以下是使用Python scikit-learn库进行SVM模型的交叉验证和网格搜索的一个简单示例:
```python
# 导入必要的库
from sklearn import datasets
from sklearn.model_selection import GridSearchCV, cross_val_score
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
# 加载数据集,这里假设已经加载了一个分类数据集如Iris数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 数据预处理,通常对数值型特征做标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 定义SVM模型和参数网格
param_grid = {'C': [0.1, 1, 10, 100], 'kernel': ['linear', 'poly', 'rbf', 'sigmoid'], 'gamma': ['scale', 'auto']}
# 使用GridSearchCV进行网格搜索
svm_model = SVC()
grid_search = GridSearchCV(svm_model, param_grid, cv=5) # 交叉验证次数一般设置为5折
grid_search.fit(X_scaled, y)
# 输出最优参数和最佳分数
print("Best parameters: ", grid_search.best_params_)
print("Best score: ", grid_search.best_score_)
# 现在你可以使用best_params_得到的最佳参数训练最终的SVM模型
best_svm = grid_search.best_estimator_
best_svm.fit(X_scaled, y)
# 交叉验证评估
scores = cross_val_score(best_svm, X_scaled, y, cv=5)
print("Cross-validation scores: ", scores)
阅读全文