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

Python中如何实现支持向量机数据分类和回归预测

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

Python中如何实现支持向量机数据分类和回归预测

这篇文章主要为大家展示了“Python中如何实现支持向量机数据分类和回归预测”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中如何实现支持向量机数据分类和回归预测”这篇文章吧。

支持向量机常用于数据分类,也可以用于数据的回归预测

1、Question?

我们经常会遇到这样的问题,给你一些属于两个类别的数据(如子图1),需要一个线性分类器将这些数据分开,有很多分法(如子图2),现在有一个问题,两个分类器,哪一个更好?为了判断好坏,我们需要引入一个准则:好的分类器不仅仅能够很好的分开已有的数据集,还能对为知的数据进行两个划分,假设现在有一个属于红色数据点的新数据(如子图3中的绿三角),可以看到此时黑色的线会把这个新的数据集分错,而蓝色的线不会。**那么如何评判两条线的健壮性?**此时,引入一个重要的概念——最大间隔(刻画着当前分类器与数据集的边界)(如子图4中的阴影部分)可以看到蓝色的线最大的间隔大于黑色的线,所以选择蓝色的线作为我们的分类器。(如子图5)此时的分类器是最优分类器吗?或者说,有没有更好的分类器具有更大的间隔?有的(如子图6)为了找到最优分类器,引入SVM

Python中如何实现支持向量机数据分类和回归预测

2、Answer!——SVM

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.datasets import make_blobsX, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.4)x_fit = np.linspace(0, 3)#使用SVMfrom sklearn.svm import SVC# SVM 函数clf = SVC(kernel='linear')clf.fit(X, y)# 最佳函数w = clf.coef_[0]a = -w[0] / w[1]y_p = a*x_fit - (clf.intercept_[0]) / w[1]# 最大边距 下边界b_down = clf.support_vectors_[0]y_down = a* x_fit + b_down[1] - a * b_down[0]# 最大边距 上届b_up = clf.support_vectors_[-1]y_up = a* x_fit + b_up[1] - a * b_up[0]# 画散点图X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.4)plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)# 画函数plt.plot(x_fit, y_p, '-c')# 画边距plt.fill_between(x_fit, y_down, y_up, edgecolor='none', color='#AAAAAA', alpha=0.4)# 画支持向量plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], edgecolor='b',            s=80, facecolors='none')

运行结果

Python中如何实现支持向量机数据分类和回归预测

其中带边线的是距离当前分类器最近的点,将这些点称之为支持向量,支持向量机为我们在众多可能的分类器之间进行选择的原则,从而确保对为知数据集具有更高的泛化性

3、软间隔

在很多时候,我们拿到是数据不想上述那样分明(如下图)这种情况并不容易找到上述那样的最大间隔。于是就有了软间隔,相对于硬间隔,我们允许个别数据出现在间隔带中。我们知道,如果没有一个原则进行约束,满足软间隔的分类器也会出现很多条。所以需要对分错的数据进行惩罚,SVM函数,有一个参数C就是惩罚参数。惩罚参数越小,容忍性就越大

Python中如何实现支持向量机数据分类和回归预测

——此处C设置为1

#%%软间隔X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.9)x_fit = np.linspace(-2, 4)# 惩罚参数:C=1,clf = SVC(C=1, kernel='linear')clf.fit(X, y)# 最佳函数w = clf.coef_[0]a = -w[0] / w[1]y_great = a*x_fit - (clf.intercept_[0]) / w[1]# 最大边距 下边界b_down = clf.support_vectors_[0]y_down = a* x_fit + b_down[1] - a * b_down[0]# 最大边距 上边界b_up = clf.support_vectors_[-1]y_up = a* x_fit + b_up[1] - a * b_up[0]# 画散点图plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)# 画函数plt.plot(x_fit, y_great, '-c')# 画边距plt.fill_between(x_fit, y_down, y_up, edgecolor='none', color='#AAAAAA', alpha=0.4)# 画支持向量plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], edgecolor='b',            s=80, facecolors='none')

运行结果

Python中如何实现支持向量机数据分类和回归预测

——当将C设置为0.2时,SVM会更有包容性,从而兼容更多的错分样本,结果如下:

Python中如何实现支持向量机数据分类和回归预测

4、超平面

有时,我们得到的数据是这样的(如下图),这时,可以将二维空间(低维)的数据映射到三维空间(高维)中,此时,可以通过一个超平面对数据进行划分,所以,映射的目的在于使用SVM在高维空间找到超平面的能力

Python中如何实现支持向量机数据分类和回归预测

#%%超平面from sklearn.datasets import make_circles# 画散点图X, y = make_circles(100, factor=.1, noise=.1, random_state=2019)plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)# 数据映射r = np.exp(-(X[:, 0] ** 2 + X[:, 1] ** 2))ax = plt.subplot(projection='3d')ax.scatter3D(X[:, 0], X[:, 1], r, c=y, s=50, cmap=plt.cm.Paired)ax.set_xlabel('x')ax.set_ylabel('y')ax.set_zlabel('z')x_1, y_1 = np.meshgrid(np.linspace(-1, 1), np.linspace(-1, 1))z =  0.01*x_1 + 0.01*y_1 + 0.5ax.plot_surface(x_1, y_1, z, alpha=0.3)

运行结果

Python中如何实现支持向量机数据分类和回归预测

使用高斯核函数实现这种情形的分类

#%%使用高斯核函数实现这种分类:kernel=‘rbf'# 画图X, y = make_circles(100, factor=.1, noise=.1, random_state=2019)plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)clf = SVC(kernel='rbf')clf.fit(X, y)ax = plt.gca()x = np.linspace(-1, 1)y = np.linspace(-1, 1)x_1, y_1 = np.meshgrid(x, y)P = np.zeros_like(x_1)for i, xi in enumerate(x):    for j, yj in enumerate(y):        P[i, j] = clf.decision_function(np.array([[xi, yj]]))ax.contour(x_1, y_1, P, colors='k', levels=[-1, 0, 0.9], alpha=0.5,linestyles=['--', '-', '--'])plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], edgecolor='b',s=80, facecolors='none');

运行结果

Python中如何实现支持向量机数据分类和回归预测

以上是“Python中如何实现支持向量机数据分类和回归预测”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

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

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

Python中如何实现支持向量机数据分类和回归预测

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

下载Word文档

猜你喜欢

Python中如何实现支持向量机数据分类和回归预测

这篇文章主要为大家展示了“Python中如何实现支持向量机数据分类和回归预测”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中如何实现支持向量机数据分类和回归预测”这篇文章吧。支持向量
2023-06-26

编程热搜

  • 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动态编译

目录