机器学习支持向量机SVM算法分类简析

本文介绍了支持向量机(SVM)的基本原理,包括其如何寻找最大间隔的决策边界。通过调整超参数cc,探讨了它对分类边界的影响。接着,介绍了使用多项式特征和高斯核函数实现非线性分类,特别是高斯核函数中γ参数对决策边界形状的控制。最后,简述了SVM在回归问题中的应用及其拟合度评估。
摘要由CSDN通过智能技术生成

支持向量机算法简介

支持向量机SVM是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。
除了进行线性分类之外,SVM还可以使用所谓的核技巧有效地进行非线性分类,将其输入隐式映射到高维特征空间中。
支持向量机在高维或无限维空间中构造超平面或超平面集合,其可以用于分类、回归或其他任务。直观来说,分类边界距离最近的训练数据点越远越好,因为这样可以缩小分类器的泛化误差。
在这里插入图片描述
H1不能把类别分开,H2可以,但是只有很小的间隔,H3以最大的间隔将点分为两类。H2的泛化能力不好。两类别中离H3最近的点到H3的距离是一样远的。
在这里插入图片描述
支持向量机就是要找到一条线是让距离这条线最近的两类的点的距离相等还要使其尽可能的大。就是让上图的d尽可能的大。

超参数cc对SVM分类划分决策边界

首先准备数据,

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC 
iris = datasets.load_iris()
X = iris.data
y = iris.target
X = X [y<2,:2] #只取y<2的类别,也就是0 1 并且只取前两个特征
y = y [y<2] # 只取y<2的类别 # 分别画出类别0和1的点
plt.scatter(X[y==0,0],X[y==0,1],color='red')
plt.scatter(X[y==1,0],X[y==1,1],color='blue')
plt.show()
# 标准化
standardScaler = StandardScaler()
standardScaler.fit(X)
#计算训练数据的均值和方差
X_standard = standardScaler.transform(X)
#再用scaler中的均值和方差来转换X,使X标准化
svc = LinearSVC(C=1e9)#线性SVM分类器
svc.fit(X_standard,y)# 训练svm

结果显示:
在这里插入图片描述
绘制出这两类的决策边界,此时cc=1e9

from matplotlib.colors import ListedColormap
def plot_decision_boundary(model,axis):
    x0,x1 = np.meshgrid(np.linspace(axis[0],axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),np.linspace(axis[2],axis[3],int((axis[3]-axis[2])*100)).reshape(-1,1))
    X_new = np.c_[x0.ravel(),x1.ravel()]
    y_predict = model.predict(X_new)
    zz = y_predict.reshape(x0.shape)
    custom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])
    plt.contourf(x0,x1,zz,linewidth=5, cmap=custom_cmap)# 绘制决策边界
plot_decision_boundary(svc,axis=[-3,3,-3,3])# x,y轴都在-3到3之间
# 绘制原始数据
plt.scatter(X_standard[y==0,0],X_standard[y==0,1],color='red')
plt.scatter(X_standard[y==1,0],X_standard[y==1,1],color='blue')
plt.show()

结果显示:
在这里插入图片描述
cc=0.01时的决策边界

svc2 = LinearSVC(C=0.01)
svc2.fit(X_standard,y)
plot_decision_boundary(svc2,axis=[-3,3,-3,3]) # x,y轴都在-3到3之间 # 绘制原始数据
plt.scatter(X_standard[y==0,0],X_standard[y==0,1],color='red')
plt.scatter(X_standard[y==1,0],X_standard[y==1,1],color='blue')
plt.show()

结果显示:
在这里插入图片描述
经过上面两个图的对比,可以明显看出决策边界划分的不同,第二个图中,有一个红点&

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值