【机器学习】svm应用(代码)

本章着重对算法部分进行讲解,原理部分不过多叙述,有兴趣的小伙伴可以自行查阅其他文献/文章

一、什么是svm

支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解最大边距超平面(maximum-margin hyperplane)

1、支持向量与超平面

在了解svm算法之前,我们首先需要了解一下线性分类器这个概念。比如给定一系列的数据样本,每个样本都有对应的一个标签。为了使得描述更加直观,我们采用二维平面进行解释,高维空间原理也是一样。

举个例子,假设在一个二维线性可分的数据集中,如下图所示,我们要找到一条线(称为超平面)把两组数据分开,这条直线可以是图中的直线H1,也可以是直线H2,或者H3,但哪条直线才最好呢,也就是说哪条直线能够达到最好的分类效果呢?那就是一个能使两类之间的空间大小最大的一个超平面,即图二中的gap在两个分类之间所占空间最大

  • 这个超平面在二维平面上看到的就是一条直线,在三维空间中就是一个平面,高纬度下以此类推,因此,我们把这个划分数据的决策边界统称为超平面

  • 离这个超平面最近的点就叫做支持向量

  • 点到超平面的距离叫间隔。支持向量机就是要使超平面和支持向量之间的间隔尽可能的大,这样超平面才可以将两类样本准确的分开,而保证间隔尽可能的大就是保证我们的分类器误差尽可能的小,尽可能的健壮。

2、松弛变量

实际分类当中很多样本数据都不能够用一个超平面把数据完全分开。如果数据集中存在噪点的话,那么在求超平的时候就会出现很大问题。从图中课看出灰点和白点并不完全分布于直线两端,如果按正常逻辑去计算超平面,可能得到的间隙会很小甚至无法求出,这时候分类模型就起不到应有的作用,甚至会对新样本进行错误分类。因此我们需要引入一个松弛变量,来允许一些数据样本可以处于超平面错误的一侧。

松弛变量作用

3、核函数

以上讨论的都是在线性可分情况进行讨论的,但是实际问题中给出的数据并不是都是线性可分的,比如有些数据可能是如图样子。
非线性数据
而对于非线性的情况,SVM 的处理方法是选择一个核函数 κernel,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。

在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。

核函数作用

代码

1、sklearn简单例子


from sklearn import svm

X = [[2, 0], [1, 1], [2, 3]]

y = [0, 0, 1]

clf = svm.SVC(kernel='linear')

clf.fit(X, y)

print(clf)

# 打印支持向量

print(clf.support_vectors_)


# g打印支持向量在数组中的坐标

print(clf.support_ )


# 打印每一类里面有多少个是支持向量

print(clf.n_support_)

结果:

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)
  
[[1. 1.]
 [2. 3.]]
 
[1 2]

[1 1]

2、利用pylab画出图像

import numpy as np

import pylab as pl

from sklearn import svm


# 生成40个随机的离散点

np.random.seed(0)

X = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
支持向量机(Support Vector Machine,SVM)是一种常用的机器学习算法,它可以用于分类和回归分析。SVM能够找到一个超平面,将不同类别的数据点有效地分开。 实现一个简单的SVM代码,可以基于Python编程语言和scikit-learn库来实现。首先,需要导入所需的库和数据集。然后,对数据进行预处理,如标准化或归一化处理。接下来,使用svm模块中的SVC类来创建一个SVM分类器,并通过fit()方法对数据进行拟合。最后,可以使用该模型对新的数据进行预测,并评估模型的性能。 下面是一个Python实现的简单SVM代码示例: ```python # 导入所需的库 import numpy as np from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.metrics import accuracy_score # 载入数据集 iris = datasets.load_iris() X = iris.data y = iris.target # 数据预处理 scaler = StandardScaler() X = scaler.fit_transform(X) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建SVM分类svm_classifier = SVC(kernel='linear', C=1.0) # 拟合数据 svm_classifier.fit(X_train, y_train) # 预测测试集 y_pred = svm_classifier.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print("SVM模型的准确率为:", accuracy) ``` 以上是一个简单的SVM代码实现示例,该代码使用SVM算法对鸢尾花数据集进行分类,并计算了模型的准确率。通过学习和理解这个示例,可以更深入地理解SVM算法的实现原理和应用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值