首页 > 其他分享 >什么是SVM

什么是SVM

时间:2023-05-31 23:57:43浏览次数:48  
标签:SVM 什么 train 超平面 test 数据 向量


支持向量机(Support Vector Machine,SVM)

 

概念:

  在支持向量机中,样本数据被看作是在空间中的点,不同类别的样本被尽可能大的间隔分开。超平面是一个划分空间的决策边界,具有最大间隔,使得离超平面最近的样本点称为支持向量

原理:

  支持向量机可以用于线性可分和线性不可分的数据集。对于线性可分数据集,支持向量机可以找到一个线性超平面将数据完全分开。对于线性不可分数据集,支持向量机使用核函数来将数据映射到高维空间,从而使其线性可分。

  1. 最大间隔分类:SVM的目标是找到一个超平面,能够在不同类别的样本之间保持最大的间隔。间隔是指从超平面到最近的样本点的距离,最大化间隔可以提高分类器的鲁棒性和泛化能力。

  2. 支持向量:在最大间隔超平面的确定过程中,只有少数样本点对于定义超平面起决定作用,它们被称为支持向量。支持向量决定了超平面的位置和方向。

  3. 核函数:SVM可以使用核函数将数据映射到高维特征空间,从而使非线性可分的问题线性可分化。常用的核函数有线性核、多项式核和径向基函数(RBF)核等。

  4. 对偶问题和凸优化:SVM的训练过程可以通过解决对偶问题来实现,这样可以将原始问题转化为凸优化问题。通过求解对偶问题,可以得到支持向量的权重和超平面的参数。

  5. 软间隔和惩罚因子:SVM可以处理部分线性可分的问题,引入软间隔和惩罚因子来容忍一定的错误分类。

用途:

  二分类或者多分类

输入数据:

  通常使用一个特征矩阵X来表示输入样本的特征,以及一个目标向量y来表示样本的分类标签

算法库:

  sklearn

数据集划分:

  train_test_split是一个用于将数据集拆分为训练集和测试集的函数。它可以帮助我们评估机器学习模型在未见过的数据上的性能

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建一个支持向量机分类器
clf = svm.SVC()

# 在训练集上训练分类器
clf.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = clf.predict(X_test)

# 计算预测准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)

函数的返回值包括:

  • X_train:拆分后的训练集特征数据,用来训练
  • X_test:拆分后的测试集特征数据,用来预测
  • y_train:拆分后的训练集目标变量数据,用来训练
  • y_test:拆分后的测试集目标变量数据,和X_test的预测结果进行对比,评估模型的准确性

案例:

from sklearn import svm

# 训练数据集
X = [[160], [165], [170], [175], [180]]  # 身高(单位:厘米)
y = [0, 0, 1, 1, 1]  # 标签:0表示低于阈值,1表示高于阈值

# 创建支持向量机模型
model = svm.SVC(kernel='linear')

# 使用训练数据拟合模型
model.fit(X, y)

# 创建新样本
new_samples = [[168], [172]]  # 待预测的身高

# 使用训练好的模型进行预测
predictions = model.predict(new_samples)

# 输出预测结果
for sample, prediction in zip(new_samples, predictions):
    if prediction == 0:
        print(f"身高 {sample[0]} 厘米,预测为低于阈值")
    else:
        print(f"身高 {sample[0]} 厘米,预测为高于阈值")

输出结果:

   身高 168 厘米,预测为低于阈值

     身高 172 厘米,预测为高于阈值

 

标签:SVM,什么,train,超平面,test,数据,向量
From: https://www.cnblogs.com/mxleader/p/17447701.html

相关文章

  • 什么是非监督学习
    非监督学习(UnsupervisedLearning)是一种机器学习任务,其中算法从未标记的数据中学习模式、结构和关系,以发现数据中的隐藏信息和有意义的结构。与监督学习不同,非监督学习中没有标签或输出变量来指导学习过程,算法需要自行发现数据的内在模式。在非监督学习中,算法的目标是对数据进行......
  • 什么是监督学习
    监督学习(SupervisedLearning)是一种机器学习任务,其中算法通过从标记的训练数据中学习模式和关系,以进行预测或分类。在监督学习中,算法的目标是通过输入特征与其相应的标签之间的关联性,构建一个能够准确预测新数据标签的模型。在监督学习中,训练数据包含输入特征和相应的标签或输出......
  • 为什么 Microsoft Office 365 那么贵,还有那么多人用Microsoft 365?
    随着数字化办公的普及,越来越多的人开始使用各种办公软件来提高工作效率和便捷性。而Microsoft365作为全球领先的办公软件套件,拥有着丰富的功能和服务,深受全球用户的欢迎。下面将详细介绍Microsoft365的功能、版本、软件和适用人群等信息。Office365直装版:https://souurl.cn/FDa......
  • 什么是微服务中的断路器设计模式?如何实施?
    大家好,微服务设计模式是Java开发人员需要学习的非常重要的概念,不仅是为了创建一个健壮的、可扩展的、高性能的微服务架构,也是为了在Java开发人员面试中取得好成绩。过去,我分享了几种微服务设计模式,如eEventSourcing、SAGA、DatabasePerMicroservices、CQRS、APIGateway......
  • java 中字符型 和 字符串类型有什么区别
    在Java中,字符型和字符串类型都是常用的数据类型,但是它们有着本质的不同。字符型是基本数据类型,表示单个字符,使用char表示。例如:'A'、'1'、'中'等。字符串类型是引用数据类型,表示由多个字符组成的字符串,使用String表示。例如:"hello"、"world"、"你好"等。下面列举一些它们......
  • Bellman-Ford算法——为什么要循环n-1次?图有n个点,又不能有回路,所以最短路径最多n-1边
    单源最短路径给定一个图,和一个源顶点src,找到从src到其它所有所有顶点的最短路径,图中可能含有负权值的边。Dijksra的算法是一个贪婪算法,时间复杂度是O(VLogV)(使用最小堆)。但是迪杰斯特拉算法在有负权值边的图中不适用,Bellman-Ford适合这样的图。在网络路由中,该算法会被用作距......
  • 为什么代理ip价格不一
     代理ip作为一种保护网络安全和隐私的工具,可以有效且安全的帮助用户们浏览互联网上的信息。正是因为它对用户帮助很大,所以很快的出现在大众们的视线里,但用的多了代理商也随之变多,价格也不一,那究竟是什么原因使得价格不一呢?下面我们来分析一下。1、使用情况 不同的代理商他们......
  • 为什么一定要做集成测试?
    集成测试是软件开发中的一个重要阶段,也称为集成验证。它的主要目的是测试不同模块间的互操作性,以确保系统在整体上能够正常运行,并且符合预期的功能和性能要求。首先,集成测试可以帮助减少错误和缺陷,可以发现并解决因各种原因导致的模块间的集成问题。通过对软件进行完整性测试,开......
  • 当前软件测试的现状是什么?
    随着软件的普及化,软件测试已经成为现代软件开发过程中不可或缺的一部分。然而,当前软件测试的现状并非完美无缺,仍面临着许多挑战和困难。首先,软件测试工作对人力资源的需求量越来越大,但是市场上的测试人员数量却不足。因此,企业往往需要在技术、流程和人员方面付出更多的投入。同......
  • Java入门|文件扩展名是什么?看完就明白了
    什么是文件扩展名?每一个文件都有文件扩展名,扩展名决定了文件的类型,什么是文件扩展名,例如:a.doc,文件的扩展名是doc,说明该文件是一个word文件a.txt,文件扩展名是txt,说明该文件是一个普通文本文件a.java,文件扩展名是java,说明该文件是一个Java文件a.mp4,文件扩展名是mp4,说明该文......