sklearn的机器学习之路:支持向量机(SVM)

1. 基础概念

什么是SVM:支持向量机就是使用一条直线(二维)或超平面(多维)将数据分成两类,同时保证离超平面最近的点与超平面的间隔尽可能小。
支持向量:离超平面最近的几个训练样本,且满足
sklearn的机器学习之路:支持向量机(SVM)_第1张图片
间隔(margin):分类不同的支持向量之间的距离 γ=2w γ = 2 ‖ w ‖
sklearn的机器学习之路:支持向量机(SVM)_第2张图片
对偶问题:在求解分类器时过于复杂,为了简化问题,我们将目标函数和约束函数融入新的函数,即使用拉格朗日乘子法得到“对偶问题”。
核函数:当训练样本不是线性可分时,需要使用到核函数。核函数将样本维数映射到更高维的空间,使得样本在高维空间中线性可分。核函数 k(,)=ϕ(xi)Tϕ(xj) k ( ⋅ , ⋅ ) = ϕ ( x i ) T ϕ ( x j ) ϕ(x) ϕ ( x ) 表示x映射后的特征向量。
常用核函数
sklearn的机器学习之路:支持向量机(SVM)_第3张图片
软间隔:在现实生活中很难找到合适的核函数使得训练样本线性可分,因此需要引入“软间隔”。软间隔是指允许某些样本出错,但是要让错误尽可能小。三种常见的替代损失函数:
sklearn的机器学习之路:支持向量机(SVM)_第4张图片
支持向量回归(SVR):传统的回归模型是计算模型输出 f(x) f ( x ) 与真实值输出y之间的差别来计算损失,而支持向量回归有个容忍偏差 ϵ ϵ ,即仅当 f(x) f ( x ) 与y差值大于 ϵ ϵ 时才计算损失。
sklearn的机器学习之路:支持向量机(SVM)_第5张图片

2. sklearn实战

选取了机器学习实战第6课的数据进行实验,相关数据和代码可前往:
https://github.com/AugusXJ/scikit_learn/tree/master/SVM

from sklearn import metrics
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt
import numpy as np

# 读取数据
X = []
Y = []
fr = open("testSetRBF.txt")
index = 0
for line in fr.readlines():
    line = line.strip()
    line = line.split('\t')
    X.append(line[:2])
    Y.append(line[-1])

plt.scatter(np.array(X)[:,0],np.array(X)[:,1])
plt.show()
#归一化
scaler = MinMaxScaler()
X = scaler.fit_transform(X)

# 交叉分类
train_X,test_X, train_y, test_y = train_test_split(X,
                                                   Y,
                                                   test_size=0.2) # test_size:测试集比例20%

# KNN模型,选择3个邻居
model = SVC(kernel='rbf', degree=2, gamma=1.7)
model.fit(train_X, train_y)
print(model)

expected = test_y
predicted = model.predict(test_X)
print(metrics.classification_report(expected, predicted))       # 输出分类信息
label = list(set(Y))    # 去重复,得到标签类别
print(metrics.confusion_matrix(expected, predicted, labels=label))  # 输出混淆矩阵信息

你可能感兴趣的:(机器学习)