快速入门Python机器学习(13)

简介: 快速入门Python机器学习(13)

8 支持向量机


8.1 原理


8.1.1 线性可分与线性可分

image.png


  • 在左边的图,我们可以用一条直线区分不同的两类事件;叫做线性可分;
  • 在右边的图,我们找不到一条直线区分不同的两类事件;叫做线性不可分。

在线性不可分的情形下,我们可以将它投射到三维空间不同高度达到线性可分。


image.png

8.1.2 支持向量机原理

在2维空间中

y=kx+b:为一条直线
y1=kx+b+t
y2=kx+b-t

  • 为两条平行,位于y两侧,与y距离相等的两条直线我们如果可以通过一种算法把需要进行二分法的事件映射到y1上侧与y2下侧,就达到二分类目的了。

image.png


3维空间中

z=kx+b:为一个直面
z1=kx+b+t
z2=kx+b-t

  • 为两个直面,位于z两侧,与z距离相等的两个直面,我们如果可以通过一种算法把需要进行二分法的事件映射到z1上侧与z2下侧,就达到二分类目的了。

image.png


同样在n维空间中

xn=kx1+b:为一个直n-1维空间中
xn1=kx1+b+t
xn2=kx1+b-t


为两个直n-1维空间中,位于xn两侧,与xn距离相等的两个n-1维空间,我们如果可以通过一种算法把需要进行二分法的事件映射到xn 1上侧与xn 2下侧,就达到二分类目的了。


8.1.3 支持向量机原理的代码实验

下面我们来用2维情形,通过代码来实现支持向量机原理。

def svm_base():
       myutil = util()
       PI = 3.1415926
       x = np.linspace(0,50,100)
       y = 0 * x
       y0 = 0 * x
       y1 = y + 20
       y2 = y - 20
       plt.plot(x,y,c='black',linestyle='dashdot')
       plt.plot(x,y0,c='black')
       plt.plot(x,y1,c='green')
       plt.plot(x,y2,c='green')
       a = np.random.random([50,1])*50
       c = np.random.random([50]).reshape(-1,1)
       b =np.array([[0 for col in range(2)] for row in range(50)])
       for i in range(50):
              b[i][0] = int(a[i])
              b[i][1] = 0
              if int(a[i]) % 2 ==0:
                     c[i] = 0
              else:
                     c[i] = 1
       plt.scatter(b[:,0],b[:,1],c=c,cmap=plt.cm.spring,s=30)
       title = u"一维空间内的奇偶数是不可以进行线性分割的"
       myutil.show_pic(title)
       #################################################
       # 分离
       x = np.linspace(0,50,100)
       y = 0 * x
       y0 = 0 * x
       y1 = y + 20
       y2 = y - 20
       plt.plot(x,y,c='black')
       plt.plot(x,y0,c='black',linestyle='dashdot')
plt.plot(x,y1,c='green')
       plt.plot(x,y2,c='green')
       for i in range(50):
              if c[i] == 0:
                     b[i][1] = 20+random.randint(0,40)
              else:
                     b[i][1] = -20-random.randint(0,40)
       plt.scatter(b[:,0],b[:,1],c=c,cmap=plt.cm.spring,s=30)
       title = u"分离到二维空间中可以进行线性分割的"
       myutil.show_pic(title)
       ############################################
       # 旋转
       for i in range(50):
              x = b[i][0]
              y = b[i][1]
              b[i][0] = x*math.cos(PI/4) - y*math.sin(PI/4)
              b[i][1] = x*math.sin(PI/4) + y*math.cos(PI/4)
       plt.scatter(b[:,0],b[:,1],c=c,cmap=plt.cm.spring,s=30)
       x = np.linspace(min(b[:,0])-5,max(b[:,0])+5,100)
       yx = np.linspace(-60,100,100)
       xx = np.linspace(0,0,100)
       y = x
       y0 = 0 * x
       y1 = x + 20
       y2 = x - 20
       plt.plot(x,y,c='black')
       plt.plot(x,y0,c='black',linestyle='dashdot') # X轴
       plt.plot(xx,yx,c='black',linestyle='dashdot')# Y轴
       plt.plot(x,y1,c='green')
       plt.plot(x,y2,c='green')
       title = u"为了更普遍性,进行旋转"
       myutil.show_pic(title)
       ##########################################
       # 移动
       for i in range(50):
              y = b[i][1]
              b[i][1] = y + 40
       plt.scatter(b[:,0],b[:,1],c=c,cmap=plt.cm.spring,s=30)
       x = np.linspace(min(b[:,0])-5,max(b[:,0])+5,100)
       yx = np.linspace(-20,140,100)
       xx = np.linspace(0,0,100)
       y = x+ 40
       y0 = 0 * x
       y1 = x + 20 + 40
       y2 = x - 20 + 40
       plt.plot(x,y,c='black')
       plt.plot(x,y0,c='black',linestyle='dashdot') # X轴
       plt.plot(xx,yx,c='black',linestyle='dashdot')# Y轴
       plt.plot(x,y1,c='green')
       plt.plot(x,y2,c='green')
       title = u"进一步更普遍性,进行平移"
       myutil.show_pic(title)

image.png

image.png

image.png

image.png


8.1.4 支持向量机的分类

最大边界超平面: Maximum Margin Separating Hyperplane。中间这条线到和所有支持向量的距离都是最大的。


离这个超平面最近的点就是"支持向量",点到超平面的距离叫做间隔,支持向量机的意思就是使超平面和支持向量之间的间隔尽可能的大。


支持向量机分为:

  • SVM=Support Vector Machine:支持向量机
  • SVC=Support Vector Classification :支持向量机用于分类
  • SVR=Support Vector Regression :支持向量机用于回归分析

SVC与SVR又分为线性向量机分类算法LinearSVCLinearSVR


下表为sklearn中支持SVC、SVR、LinearSVCLinearSVR用到的类。


方法

解释

sklearn.svm.SVC

支持向量机分类算法

sklearn.svm.SVR

支持向量机回归算法

sklearn.svm.LinearSVC

线性向量机分类算法

sklearn.svm.LinearSVR

线性向量机回归算法


8.1.5 支持向量机的核

支持向量机还有一个很重要的概念:核

def sigmoid(x):
    return 1. / (1 + np.exp(-x))
def kernel():
        myutil = util()
        fig = plt.figure()
        ax = fig.gca(projection='3d')
        x = np.linspace(-40, 40, 100)
        y = np.linspace(-40, 40, 100)
        z = x*y + 40
        ax.plot(x, y, z, label=u"线性核")
        ax.legend()
        title = u"线性核"
        myutil.show_pic(title)
        fig = plt.figure()
        ax = fig.gca(projection='3d')
        x = np.linspace(-40, 40, 100)        
        y = np.linspace(-40, 40, 100)
        z = (5*x*y+4)**3
        ax.plot(x, y, z, label=u"多项式核")
        ax.legend()
        title = u"多项式核"
        myutil.show_pic(title)
        fig = plt.figure()
        ax = fig.gca(projection='3d')
        x = np.linspace(-40, 40, 100)
        y = np.linspace(-40, 40, 100)
        z = sigmoid(5*x*y+4)
        ax.plot(x, y, z, label=u"Sigmoid核")
        ax.legend()
        title = u"Sigmoid核"
        myutil.show_pic(title)

image.png

image.png

image.png



包括线性核、多项核和和Sigmoid核。


1.线性核(Linear Kernel)

image.png

线性核,主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,在原始空间中寻找最优线性分类器,具有参数少速度快的优势。对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的。


2.多项式核(Polynomial Kernel)

image.png

多项式核函数可以实现将低维的输入空间映射到高纬的特征空间多项式核适合于正交归一化(向量正交且模为1)数据。属于全局核函数,允许相距很远的数据点对核函数的值有影响。参数d越大,映射的维度越高,计算量就会越大。但是多项式核函数的参数多,当多项式的阶数d比较高的时候,由于学习复杂性也会过高,易出现“过拟合"现象,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。


3,Sigmoid核(Sigmoid Kernel)

Sigmoid核函数来源于神经网络,被广泛用于深度学习和机器学习中

image.png

采用Sigmoid函数作为核函数时,支持向量机实现的就是一种多层感知器神经网络。

还有径向基核函数(Radial Basis Function)/ 高斯核(Gaussian Kernel)、字符串核函数、傅立叶核和样条核。

目录
相关文章
|
13天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
43 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
13天前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
在数据驱动时代,Python 以强大的生态系统成为数据科学的首选语言,而 Scikit-learn 则因简洁的 API 和广泛的支持脱颖而出。本文将指导你使用 Scikit-learn 进行机器学习模型的训练与评估。首先通过 `pip install scikit-learn` 安装库,然后利用内置数据集进行数据准备,选择合适的模型(如逻辑回归),并通过交叉验证评估其性能。最终,使用模型对新数据进行预测,简化整个流程。无论你是新手还是专家,Scikit-learn 都能助你一臂之力。
64 8
|
9天前
|
机器学习/深度学习 数据可视化 数据挖掘
数据可视化大不同!Python数据分析与机器学习中的Matplotlib、Seaborn应用新视角!
在数据科学与机器学习领域,数据可视化是理解数据和优化模型的关键。Python凭借其强大的可视化库Matplotlib和Seaborn成为首选语言。本文通过分析一份包含房屋面积、卧室数量等特征及售价的数据集,展示了如何使用Matplotlib绘制散点图,揭示房屋面积与售价的正相关关系;并利用Seaborn的pairplot探索多变量间的关系。在机器学习建模阶段,通过随机森林模型展示特征重要性的可视化,帮助优化模型。这两个库在数据分析与建模中展现出广泛的应用价值。
25 2
|
14天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
20 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
15天前
|
机器学习/深度学习 数据采集 算法
机器学习新纪元:用Scikit-learn驾驭Python,精准模型选择全攻略!
在数据爆炸时代,机器学习成为挖掘数据价值的关键技术,而Scikit-learn作为Python中最受欢迎的机器学习库之一,凭借其丰富的算法集、简洁的API和高效性能,引领着机器学习的新纪元。本文通过一个实际案例——识别垃圾邮件,展示了如何使用Scikit-learn进行精准模型选择。从数据预处理、模型训练到交叉验证和性能比较,最后选择最优模型进行部署,详细介绍了每一步的操作方法。通过这个过程,我们不仅可以看到如何利用Scikit-learn的强大功能,还能了解到模型选择与优化的重要性。希望本文能为你的机器学习之旅提供有价值的参考。
17 0
|
24天前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
18 0
|
2月前
|
机器学习/深度学习 算法 数据挖掘
8个常见的机器学习算法的计算复杂度总结
8个常见的机器学习算法的计算复杂度总结
8个常见的机器学习算法的计算复杂度总结
|
28天前
|
机器学习/深度学习 数据采集 算法
数据挖掘和机器学习算法
数据挖掘和机器学习算法
|
1月前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
163 1
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
基于python 机器学习算法的二手房房价可视化和预测系统
文章介绍了一个基于Python机器学习算法的二手房房价可视化和预测系统,涵盖了爬虫数据采集、数据处理分析、机器学习预测以及Flask Web部署等模块。
基于python 机器学习算法的二手房房价可视化和预测系统
下一篇
无影云桌面