支持向量分类器(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的博客,原文内容也很简单,翻译加了一点点解释说明。
原文地址