支持向量分类器的scikit-learn 实现(Support Vector Classifier)

本文介绍了支持向量分类器(SVC)中的超参数C的作用及其如何影响模型的偏差和方差。通过调整C值来平衡分类间隔与错误分类之间的关系,并通过Python代码示例展示了如何使用scikit-learn实现SVC并预测数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述

支持向量分类器(SVC)在最大化分类间隔(margin)和最小化错误分类(misclassification)上需要一个平衡。

在SVC分类器中,用超参数C作为误差的惩罚项

C比较小时,可以接受一些数据点的误分类,模型的偏差高而方差低(high bias low variance)

C比较大时,对错误分类的点惩罚严重,分类器会尽力避免错误的分类,得到的模型偏差小但方差高(low bias high variance)

在scikit-learn中,C由参数 c 决定,默认取值 c = 1.0

C作为算法的超参数,在我们进行模型选择时,需要对其进行调整选择

0.准备工作

# 导入库
from sklearn.svm import LinearSVC
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
import numpy as np

1.加载数据集Iris Flower

# 加载特征和标签数据
iris = datasets.load_iris()
X = iris.data
y = iris.target
#Iris数据集共150组数据,每组数据包括四个特征值,y包含三种类别,用0,1,2 表示
X.shape
(150, 4)
X[1:5,:]
array([[4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2],
       [4.6, 3.1, 1.5, 0.2],
       [5. , 3.6, 1.4, 0.2]])
y
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

2.特征标准化

# 特征取值标准化
scaler = StandardScaler()
X_std = scaler.fit_transform(X)
X_std[1:5,:]
array([[-1.14301691, -0.1249576 , -1.3412724 , -1.31297673],
       [-1.38535265,  0.33784833, -1.39813811, -1.31297673],
       [-1.50652052,  0.10644536, -1.2844067 , -1.31297673],
       [-1.02184904,  1.26346019, -1.3412724 , -1.31297673]])

3.训练支持向量分类器

# 创建支持向量分类器(SVC)
svc = LinearSVC(C=1.0)

# 训练模型
model = svc.fit(X_std, y)

4.创造新的观察数据

# 创建新的数据
new_observation_1 = [[-0.7, 1.1, -1.1 , -1.7]]
new_observation_2 = [[0.7, 1.1, 1.2 , -1.5]]

5.预测观察数据的分类结果

#预测数据集内的结果
svc.predict([X[140]])
array([2])
# 预测新数据的分类结果
svc.predict(new_observation_1)
array([0])
svc.predict(new_observation_2)
array([1])

5.说明

翻译自Chris Albon的博客,原文内容也很简单,翻译加了一点点解释说明。
原文地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值