SVM二分类建模代码,以及超参数优化的参数与取值
时间: 2024-10-01 07:12:19 浏览: 33
SVM (支持向量机) 用于二分类问题的Python代码通常会包括参数调整,特别是对于核函数、惩罚参数C和核函数的参数gamma(针对Radial Basis Function(RBF)核)。以下是一个基本的例子,同时引入了`GridSearchCV`来进行超参数优化:
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加载数据
iris = load_iris()
X = iris.data
y = iris.target
# 数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 划分数据
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# 定义超参数网格
param_grid = {
'C': [0.1, 1, 10], # 惩罚参数 C,控制误分类代价
'kernel': ['linear', 'rbf'], # 核函数,'linear'表示线性核,'rbf'表示径向基函数核
'gamma': [0.01, 0.1, 1] # 对于RBF核,gamma影响决策边界的形状
}
# 创建SVM模型并进行网格搜索优化
svc = SVC()
grid_search = GridSearchCV(svc, param_grid, cv=5) # 交叉验证次数设为5
grid_search.fit(X_train, y_train)
# 获取最优参数
best_params = grid_search.best_params_
print(f"Best parameters: {best_params}")
# 使用优化后的参数预测
y_pred = grid_search.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy with optimized params: {accuracy * 100:.2f}%")
```
在这个例子中,`GridSearchCV`遍历给定的参数网格,找到最佳参数组合。`C`、`kernel`和`gamma`都是常见的SVM超参数,它们分别控制模型的复杂度、非线性变换的类型和核函数的影响力。
阅读全文