我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SVM算法的理解及其Python实现多分类和二分类问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SVM算法的理解及其Python实现多分类和二分类问题

原理

SVM被提出于1964年,在二十世纪90年代后得到快速发展并衍生出一系列改进和扩展算法,在人像识别、文本分类等模式识别(pattern recognition)问题中有得到应用。

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

SVM可以通过核方法(kernel method)进行非线性分类,是常见的核学习(kernel learning)方法之一。

分类理论

在分类问题中给定输入数据和学习目标:X = { X1, X2,…Xn },Y = { y1,y2,…yn}。

其中输入数据的每个样本都包含多个特征并由此构成特征空间(feature space):Xi = { x1,x2…xn} ,而学习目标为二元变量 y { − 1 , 1 } y\{-1,1\} y{−1,1}表示负类(negative class)和正类(positive class)

若输入数据所在的特征空间存在作为决策边界(decision boundary)的超平面将学习目标按正类和负类分开,并使任意样本的点到平面距离大于等于1,则称该分类问题具有线性可分性,参数 w,b分别为超平面的法向量和截距。

满足该条件的决策边界实际上构造了2个平行的超平面作为间隔边界以判别样本的分类:

所有在上间隔边界上方的样本属于正类,在下间隔边界下方的样本属于负类。

两个间隔边界的距离 d = 2 ∥ w ∥ d=\frac{2}{\|w\|} d=∥w∥2​被定义为边距(margin),位于间隔边界上的正类和负类样本为支持向量(support vector)。

确定最大间距

SVM多分类

SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。

目前,构造SVM多类分类器的方法主要有两类:

  • 一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;
  • 另一类是间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。

a.一对多法(one-versus-rest,简称1-v-r-SVMs)。

  • 训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。

b.一对一法(one-versus-one,简称1-v-1 SVMs)。

  • 其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。

Python实现

多分类

  	X_train, X_test, y_train, y_test = train_test_split(feature, label, test_size=.2,random_state=0)
    # 训练模型
    model = OneVsRestClassifier(svm.SVC(kernel='linear',probability=True,random_state=random_state))
    print("[INFO] Successfully initialize a new model !")
    print("[INFO] Training the model…… ")
    clt = model.fit(X_train,y_train)
    print("[INFO] Model training completed !")
    # 保存训练好的模型,下次使用时直接加载就可以了
    joblib.dump(clt,"F:/python/model/conv_19_80%.pkl")
    print("[INFO] Model has been saved !")
  
    y_test_pred = clt.predict(X_test)
    ov_acc = metrics.accuracy_score(y_test_pred,y_test)
    print("overall accuracy: %f"%(ov_acc))
    print("===========================================")
    acc_for_each_class = metrics.precision_score(y_test,y_test_pred,average=None)
    print("acc_for_each_class:\n",acc_for_each_class)
    print("===========================================")
    avg_acc = np.mean(acc_for_each_class)
    print("average accuracy:%f"%(avg_acc))

二分类

>>> import numpy as np
>>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
>>> y = np.array([1, 1, 2, 2])
>>> from sklearn.svm import SVC
>>> clf = SVC()
>>> clf.fit(X, y) 
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
    decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
    max_iter=-1, probability=False, random_state=None, shrinking=True,
    tol=0.001, verbose=False)
>>> print(clf.predict([[-0.8, -1]]))
[1]

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SVM算法的理解及其Python实现多分类和二分类问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SVM算法的理解及其Python实现多分类和二分类问题

这篇文章主要介绍了SVM算法的理解及其Python实现多分类和二分类问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-01

Python实现支持向量机(SVM)分类:算法原理详解

在机器学习中,支持向量机(SVM)常被用于数据分类和回归分析,是由分离超平面的判别算法模型。换句话说,给定标记的训练数据,该算法输出一个对新示例进行分类的最佳超平面。支持向量机(SVM)算法模型是将示例表示为空间中的点,经过映射后,不同类
Python实现支持向量机(SVM)分类:算法原理详解
2024-01-24

Python基于纹理背景和聚类算法实现图像分割详解

这篇文章将详细讲解Python图和基于纹理背景的图像分割和聚类算法实现图像分割效果,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
2023-01-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录