【Python机器学习】SVM——线性模型与非线性特征

这篇具有很好参考价值的文章主要介绍了【Python机器学习】SVM——线性模型与非线性特征。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SVM(核支持向量机)是一种监督学习模型,是可以推广到更复杂模型的扩展,这些模型无法被输入空间的超平面定义。

线模型在低维空间中可能非常受限,因为线和平面的灵活性有限,但是有一种方式可以让线性模型更加灵活,那就是添加更多特征,比如输入特征的交互式或多项式。

以下面的数据集为例:

from sklearn.datasets import make_blobs
import mglearn
import matplotlib.pyplot as plt
from sklearn.svm import LinearSVC

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
X,y=make_blobs(centers=4,random_state=8)
y=y%2
line_svc=LinearSVC().fit(X,y)

mglearn.plots.plot_2d_separator(line_svc,X)
mglearn.discrete_scatter(X[:,0],X[:,1],y)
plt.xlabel('特征0')
plt.ylabel('特征1')
plt.show()

【Python机器学习】SVM——线性模型与非线性特征,Python机器学习,机器学习,支持向量机,python,人工智能,分类,分类算法

用于分类的线性模型只能用一条直线来划分数据点,对这个数据集无法给出较好的结果。

现在,对输入特征进行扩展,比如添加一个特征的平方作为一个新特征,那么每个数据点可以表示为三维点,而不是二维点,这样就可以做一个新的三维散点图:

import numpy as np
from sklearn.datasets import make_blobs
import mglearn
import matplotlib.pyplot as plt
from sklearn.svm import LinearSVC
from mpl_toolkits.mplot3d import Axes3D,axes3d

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
X,y=make_blobs(centers=4,random_state=8)
y=y%2
#line_svc=LinearSVC().fit(X,y)
X_new=np.hstack([X,X[:,1:]**2])
figure=plt.figure()

#3D可视化
ax=figure.add_subplot(projection='3d')
#首先画出所有y==0,然后画出所有y==1的点
mask=y==0

ax.scatter(X_new[mask,0],X_new[mask,1],X_new[mask,2],c='blue',marker='o',cmap=mglearn.cm2,s=60)
ax.scatter(X_new[~mask,0],X_new[~mask,1],X_new[~mask,2],c='red',marker='^',cmap=mglearn.cm2,s=60)
ax.set_xlabel('特征0')
ax.set_ylabel('特征1')
ax.set_zlabel('特征1**2')
plt.show()

 【Python机器学习】SVM——线性模型与非线性特征,Python机器学习,机器学习,支持向量机,python,人工智能,分类,分类算法

在数据新的可视化中,可以用线性模型(三维平面将这两个类别区分开)

import numpy as np
from sklearn.datasets import make_blobs
import mglearn
import matplotlib.pyplot as plt
from sklearn.svm import LinearSVC
from mpl_toolkits.mplot3d import Axes3D,axes3d

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
X,y=make_blobs(centers=4,random_state=8)
y=y%2
X_new=np.hstack([X,X[:,1:]**2])
line_svc_3d=LinearSVC().fit(X_new,y)
coef,intercept=line_svc_3d.coef_.ravel(),line_svc_3d.intercept_

figure=plt.figure()

#3D可视化
ax=figure.add_subplot(projection='3d')
#首先画出所有y==0,然后画出所有y==1的点
xx=np.linspace(X_new[:,0].min()-2,X_new[:,0].max()+2,50)
yy=np.linspace(X_new[:,1].min()-2,X_new[:,1].max()+2,50)
XX,YY=np.meshgrid(xx,yy)
ZZ=(coef[0]*XX+coef[1]*YY+intercept)/-coef[2]
mask=y==0
ax.plot_surface(XX,YY,ZZ,rstride=8,cstride=8,alpha=0.3)
ax.scatter(X_new[mask,0],X_new[mask,1],X_new[mask,2],c='blue',marker='o',cmap=mglearn.cm2,s=60)
ax.scatter(X_new[~mask,0],X_new[~mask,1],X_new[~mask,2],c='red',marker='^',cmap=mglearn.cm2,s=60)
ax.set_xlabel('特征0')
ax.set_ylabel('特征1')
ax.set_zlabel('特征1**2')
plt.show()

【Python机器学习】SVM——线性模型与非线性特征,Python机器学习,机器学习,支持向量机,python,人工智能,分类,分类算法

如果将线性SVM模型看做原始特征的函数,那么它实际上已经不是线性的了,它不再是一条直线,而是一个椭圆:

import numpy as np
from sklearn.datasets import make_blobs
import mglearn
import matplotlib.pyplot as plt
from sklearn.svm import LinearSVC
from mpl_toolkits.mplot3d import Axes3D,axes3d

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
X,y=make_blobs(centers=4,random_state=8)
y=y%2
X_new=np.hstack([X,X[:,1:]**2])
line_svc_3d=LinearSVC().fit(X_new,y)
coef,intercept=line_svc_3d.coef_.ravel(),line_svc_3d.intercept_
xx=np.linspace(X_new[:,0].min()-2,X_new[:,0].max()+2,50)
yy=np.linspace(X_new[:,1].min()-2,X_new[:,1].max()+2,50)
XX,YY=np.meshgrid(xx,yy)
ZZ=YY**2

dec=line_svc_3d.decision_function(np.c_[XX.ravel(),YY.ravel(),ZZ.ravel()])
plt.contourf(XX,YY,dec.reshape(XX.shape),levels=[dec.min(),0,dec.max()],cmap=mglearn.cm2,alpha=0.5)
mglearn.discrete_scatter(X[:,0],X[:,1],y)
plt.xlabel('特征0')
plt.ylabel('特征1')
plt.show()

【Python机器学习】SVM——线性模型与非线性特征,Python机器学习,机器学习,支持向量机,python,人工智能,分类,分类算法文章来源地址https://www.toymoban.com/news/detail-811201.html

到了这里,关于【Python机器学习】SVM——线性模型与非线性特征的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ML:机器学习中有监督学习算法的四种最基础模型的简介(基于概率的模型、线性模型、树模型-树类模型、神经网络模型)、【线性模型/非线性模型、树类模型/基于样本距离的模型】多种对比(假设/特点/决策形式等

    ML:机器学习中有监督学习算法的四种最基础模型的简介(基于概率的模型、线性模型、树模型-树类模型、神经网络模型)、【线性模型/非线性模型、树类模型/基于样本距离的模型】多种对比(假设/特点/决策形式等) 目录

    2024年02月09日
    浏览(64)
  • 数学模型:Python实现非线性规划

    上篇文章:整数规划 文章摘要:非线性规划的Python实现。 参考书籍:数学建模算法与应用(第3版)司守奎 孙玺菁。 PS:只涉及了具体实现并不涉及底层理论。学习底层理论以及底层理论实现:可以参考1.最优化模型与算法——基于Python实现 渐令 粱锡军2.算法导论(原书第3版)

    2024年02月08日
    浏览(56)
  • pytorch的卷积层池化层和非线性变化 和机器学习线性回归

    卷积层:   两个输出的情况 就会有两个通道 可以改变通道数的 最简单的神经网络结构: nn.Mudule就是继承父类 super执行的是 先执行父类函数里面的 forward执行的就是前向网络,就是往前推进的,当然也有反向转播,那就是用来就gradient dicent了,求导计算了。 卷积后的结果展

    2024年02月07日
    浏览(40)
  • 【数学建模】Python+Gurobi求解非线性规划模型

    目录 1 概述 2 算例  2.1 算例 2.2 参数设置 2.3 Python代码实现 2.4 求解结果 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。 参考:(非线性规划Python)计及动态约束及节能减排环保要求的经济调度 2.1 算例 2.2 参数设置 求解NLP/非凸问题时,

    2024年02月09日
    浏览(47)
  • 机器视觉【3】非线性求解相机几何参数

    上一章节介绍学习了(DLT)线性求解相机几何参数,了解到线性求解法当中比较明显的缺点: 没有考虑到镜头畸变的影响 不能引入更多的约束条件融入到DLT算法当中优化 最关键的是,代数距离并不是计算相机矩阵的最佳距离函数 基于以上问题点,提出非线性求解方法。 将

    2024年02月21日
    浏览(55)
  • 优化模型:MATLAB非线性规划

    1.1 非线性规划的定义 非线性规划(Nonlinear Programming,NLP) 是一种数学规划方法,用于解决含有非线性目标函数和/或非线性约束条件的优化问题。它是线性规划的一种扩展形式,更加广泛适用于复杂实际问题。 非线性规划的目标是最小化(或最大化)一个非线性目标函数,

    2024年02月04日
    浏览(45)
  • 【模型预测控制MPC】使用离散、连续、线性或非线性模型对预测控制进行建模(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 本文的

    2024年02月14日
    浏览(48)
  • 数学建模学习---非线性规划

    目录 前言 一、非线性规划问题是什么? 二、非线性规划的数学模型 1.一般形式 三、线性规划的 Matlab 解法 Matlab 中非线性规划的数学模型: 2.Matlab 中的命令: 本篇讲述非线性规划问题极其matlab解法 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规

    2024年02月06日
    浏览(58)
  • 自学SLAM(8)《第四讲:相机模型与非线性优化》作业

    小编研究生的研究方向是视觉SLAM,目前在自学,本篇文章为初学高翔老师课的第四次作业。 现实⽣活中的图像总存在畸变。原则上来说,针孔透视相机应该将三维世界中的直线投影成直线,但是当我们使⽤⼴⾓和鱼眼镜头时,由于畸变的原因,直线在图像⾥看起来是扭曲的

    2024年02月05日
    浏览(44)
  • 三种用python进行线性/非线性拟合的方法

    使用回归分析绘制拟合曲线是一种常见的方法,简单线性回归就是其中的一种。简单线性回归可以通过 最小二乘法 来计算回归系数。以下是一个使用简单线性回归来拟合数据的代码示例: 在该代码中,np.polyfit函数可以用来计算简单线性回归的回归系数。plot函数用来绘制拟

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包