SVM实现多分类,SVM核函数为径向基核函数,使用网格搜索法参数寻优,使用OneVsOneClassifier()并输出tn, fp, fn, tp
时间: 2024-02-11 16:08:40 浏览: 79
好的,以下是一个使用径向基核函数实现多分类的例子,并使用网格搜索法进行参数寻优,同时输出混淆矩阵的代码:
```python
from sklearn.datasets import make_classification
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.multiclass import OneVsOneClassifier
from sklearn.metrics import confusion_matrix
# 生成数据集
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_classes=4, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 建立SVM分类器
svm_clf = SVC(kernel='rbf', decision_function_shape='ovr')
# 设置参数搜索范围
param_grid = {
'C': [0.1, 1, 10],
'gamma': [0.01, 0.1, 1]
}
# 使用网格搜索法进行参数寻优
grid_search = GridSearchCV(svm_clf, param_grid, cv=5)
grid_search.fit(X_train, y_train)
# 输出最佳参数
print('Best Parameters:', grid_search.best_params_)
# 使用最佳参数进行训练
svm_clf = SVC(kernel='rbf', C=grid_search.best_params_['C'], gamma=grid_search.best_params_['gamma'], decision_function_shape='ovr')
ovr_clf = OneVsOneClassifier(svm_clf)
ovr_clf.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = ovr_clf.predict(X_test)
# 输出混淆矩阵
tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()
print('True Negative:', tn)
print('False Positive:', fp)
print('False Negative:', fn)
print('True Positive:', tp)
```
其中,`SVC`的`kernel`参数设置为`'rbf'`表示使用径向基核函数,`GridSearchCV`可以进行参数寻优,`OneVsOneClassifier`可以实现SVM在多类别分类中的应用,`confusion_matrix`函数可以计算混淆矩阵,`.ravel()`可以将混淆矩阵展平成一维数组,最后输出tn, fp, fn, tp即可。
阅读全文