机器学习笔记(五):西瓜书第六章——支持向量机

此篇文章只对几个细节进行讲解介绍,具体的详细内容参看西瓜书。

  • 间隔与支持向量

    • 两个异类支持向量到超平面的距离之和称为间隔。
    • 位于虚线上的点称为支持向量。

机器学习笔记(五):西瓜书第六章——支持向量机_第1张图片

  •  对偶问题

    • 自组织映射网络(SMO)
    • 简介:SOM网络将高维数据映射到低维空间中,一般是一维或者两维,并且映射过程中保持数据的拓扑结构不变,即高维空间中相似的数据在低维空间中接近。
    • 结构:SOM由两层神经元组成:输入层和输出层。
      • 输入层的每个神经元和输出层的所有神经元连接。
      • 输入层的神经元数量由输入空间决定。
      • 输出层神经元的数量由用户定义,每个输出神经元对应一个位置信息(可以是一维空间的坐标或者二维空间中的坐标),并且每个输出神经元拥有一个权重向量,权重向量的维度等于输入神经元数。
      • 对每个输入实例,计算其和所有输出神经元权重向量之间的距离,距离最小的输出神经元称为获胜神经元,也可以称为Best Match Unit,简写为BMU。该实例在低维空间中的位置就是获胜神经元所处的位置。
      • SOM训练的目的就是找到一组权重向量,使得输入数据在低维空间中拓扑结构不变。
    • SOM网络的学习过程包含6个步骤

    • 1、初始化所有的权重向量;
      2、从训练数据集中随机选择一个实例作为网络的输入;
      3、计算每个权重向量和输入向量之间的距离,取距离最小的权重向量对应的输出神经元作为当前输入的BMU;
      4、为BMU计算邻域半径:邻域半径开始比较大,随时间逐渐减小;
      5、对位于BMU邻域内的所有输出神经元,更新其权重向量;
      6、重复2-5直至N次。

    • SOM的具体过程介绍参见https://blog.csdn.net/VictoriaW/article/details/78033287

  • 核函数

    • 提出背景:如果原始空间是有限维,即属性数量有限,那么就可以将原始的二维空间映射到一个合适的三维空间,然后在三维空间找到一个合适的划分超平面,这样就可以解决异或问题,因为异或问题在原始样本空间并不存在能够正确划分两类样本的超平面。
    • 定义:什么是核函数?k函数,如下图所示。

      •   

      • 机器学习笔记(五):西瓜书第六章——支持向量机_第2张图片

    • 什么样的函数可以成为核函数?
      • 只要一个对称函数所对应的核矩阵半正定,它就能作为核函数使用。
      • 机器学习笔记(五):西瓜书第六章——支持向量机_第3张图片 
    • 核函数的选择有什么影响?
      • 任何一个核函数都隐式地定义了一个称为“再生核希尔伯特空间”的特征空间。 若核函数选择的不合适,则意味着将样本映射到了一个不合适的特征空间,很可能导致性能不佳。 
  • 软间隔与正则化

    • 背景:现实难题,很难确定合适的核函数使得训练样本在特征空间中线性可分,即使找到了合适的核函数,但是难以保证所谓的线性可分不是过拟合导致的。基于此,为了缓解以上难题,提出了软间隔的概念。
    • “硬间隔”的定义:所有样本都必须划分正确。软间隔的定义就是允许某些样本不满足约束。软间隔的目标是在最大化间隔的同时,使得不满足约束的样本尽可能的少。
  • 支持向量回归

    • 思想:允许预测值和真实值之间存在小偏差,只有当预测值和真实值之间的绝对偏差大于设定的值的时候,才计算损失。

机器学习笔记(五):西瓜书第六章——支持向量机_第4张图片

  •  核方法

    • 表示定理:对于一般的损失函数(损失函数不做任何要求)和正则化项(正则化项要求单调递增),优化问题的最优解都可以表示为核函数的线性组合。
    • 机器学习笔记(五):西瓜书第六章——支持向量机_第5张图片

    • 核方法:引入核函数将线性学习器拓展为非线性学习器,从而得到“核线性判别分析”(KLDA)
    • 使用线性判别分析求解方法即可得到投影函数。

课后习题

机器学习笔记(五):西瓜书第六章——支持向量机_第6张图片

部分习题答案(6.1、6.2、6.3 )

6.1 试证明样本空间中任意点x到超平面(w,b)的距离为式(6.2)。

机器学习笔记(五):西瓜书第六章——支持向量机_第7张图片

机器学习笔记(五):西瓜书第六章——支持向量机_第8张图片

6.2   试使用LIBSVM,在西瓜数据集3.0alpha上分别用线性核和高斯核训练一个SVM,并比较其支持向量的差别。 

第一步,首先,我们需要把 3.0alpha 西瓜数据集转换成libsvm需要的格式化文本。生成格式化数据的代码为:

"""
Author: Victoria
Created on 2017.9.30 15:30
"""

import xlrd

book = xlrd.open_workbook("3.0alpha.xlsx")
sheet = book.sheet_by_name("Sheet1")
x1s = sheet.row_values(0)
x2s = sheet.row_values(1)
ys = sheet.row_values(3)

with open("3.0alpha_train.txt", "w") as f:
    for x1, x2, y in zip(x1s, x2s, ys):
        f.write("{} 1:{} 2:{}\n".format(int(y), x1, x2))

第二步,依据 https://www.csie.ntu.edu.tw/~cjlin/libsvm/ 下载libsvm并且解压后,进入 /windows/ 文件夹,可以看到有svm-train.exe,这个是用于训练SVM的可执行程序。把3.0alpha_train.txt 文件复制到当前文件夹,然后在当前文件夹下打开命令行窗口,运行以下命令:

svm-train.exe -t 0 3.0alpha_train.txt #参数-t表示核函数,0代表线性核函数

CMD中会打印,并且会在当前目录下生成 3.0alpha_train.txt.model 文件。

第三步,高斯核训练的SVM。

svm-train.exe -t 2 3.0alpha_train.txt #参数-t表示核函数,2代表高斯核函数

CMD中会打印,并且会生成的3.0alpha_train.txt.model 。

具体可参考 https://blog.csdn.net/VictoriaW/article/details/78144161?spm=1001.2014.3001.5501

6.3   选择两个UCI数据集,分别用线性核和高斯核训练一个SVM,并与BP神经网络和C4.5决策树进行实验比较。 

https://blog.csdn.net/VictoriaW/article/details/78144714

其余课后题的答案可参看 https://blog.csdn.net/weixin_45775701/article/details/109726246?spm=1001.2014.3001.5501 写的很详细!

参考资料

http://www.ai-junkie.com/ann/som/som1.html 
Self-Organized Formation of Topologically Correct Feature Maps. Teuvo Kohonen. 1982.

https://blog.csdn.net/VictoriaW/article/details/78033287

你可能感兴趣的:(机器学习/吃瓜)