鸢尾花数据分类-SVM分类与交叉验证案例

本章将讲解如何用py实现SVM分类操作;
要明确的是:SVM一开始是由二分类问题提出的,但不代表其只能处理二分类问题;
原生 SVM 数学只能区分两类(A / 非 A),遇到 3 类、4 类数据,必须拆成一堆二分类小模型再整合结果,两种拆分方案:OVO 一对一、OVR 一对多。
拿鸢尾花 3 类举例:类别 0 (setosa)、1 (versicolor)、2 (virginica)

  1. OVO 一对一 One vs One(SVC 默认)
    规则:任意两个类别单独拉出来训练一个二分类器,两两对比。3 个类别组合数量:C_3 ^2个小 SVM
    分类器 1:只学 0 VS 1
    分类器 2:只学 0 VS 2
    分类器 3:只学 1 VS 2
  2. OVR 一对多 One vs Rest(One vs All)
    规则:每次拿一类当正样本,剩下所有其他类合并当成一大类负样本。3 个类别对应3 个独立二分类器
    分类器 1:正 = 0,负 =(1+2)
    分类器 2:正 = 1,负 =(0+2)
    分类器 3:正 = 2,负 =(0+1)

一、加载对应的库

from sklearn.svm import SVC #(SVC就是分类问题,SVR是回归问题)
from sklearn.preprocessing import StandardScaler #标准化
from sklearn import datasets # 数据集函数
from sklearn.model_selection import train_test_split # 用于划分数据集

二、读数据

通过dataset提取的数据是一个类,因此可以用.data和.target的方式提取数据;X是159行,4列,也就是150个样本,4个特征;而y是150行1列,代表150个样本;

iris = datasets.load_iris() #读取鸢尾花数据
X = iris.data
y = iris.target

三、标准化与拆分训练集

std = StandardScaler()
X_std = std.fit_transform(X)
X_train,X_test,y_train,y_test=train_test_split(X_std,y,test_size=0.3)

四、SVM建模

这里SVC的核心参数分别为:
1.C=1.0, # 错误样本的惩罚参数
2.kernel='rbf', # 使⽤何种核算法。linear线性、poly多项式、rbf⾼斯、sigmod、precomputed⾃定义
3.degree=3, # 多项式核函数的阶数
4.gamma='auto', # 当kernel为‘rbf’, ‘poly’或‘sigmoid’时的kernel系数。

svm_classification = SVC()
svm_classification.fit(X_train,y_train)

五、查看模型效果

svm_classification.score(X_test,y_test)
print(svm_classification.predict(X_test))

六、交叉验证

1.导入相关的库

from sklearn.model_selection import GridSearchCV

2.定义参数组合

参数组合需要用一个字典来填写,SVM常用的参数就是核函数kernel与惩罚系数C

params = {
    'kernel': ['linear', 'poly', 'rbf'],# 分别是线性核,多项式核,高斯核
    'C':[0.01,0.1,0.5,1,2,10,100]
}

3.模型训练

model = GridSearchCV(svm_classification,param_grid=params,cv = 10)
model.fit(X_train,y_train)

4.查看参数最好的参数组合

print(f'最好的参数组合是:{model.best_params_}')
print(f'最好的socre:{model.best_score_}')

5.用最优模型对测试集预测

GridSearchCV 内部会自动保存参数最优、训练完成的模型,直接调用model.predict()即可:

y_pred = model.predict(X_test)
print("最优参数模型预测结果:", y_pred)
# 测试集真实准确率
test_acc = model.score(X_test, y_test)
print("测试集准确率:", test_acc)
posted @ 2026-06-15 12:31  王新文  阅读(16)  评论(0)    收藏  举报