【模式识别与人工智能】【实验报告合集】Bayes + Fisher + PCA + Decision Tree + KNN + K 您所在的位置:网站首页 非线性时间序列模型识别实验报告 【模式识别与人工智能】【实验报告合集】Bayes + Fisher + PCA + Decision Tree + KNN + K

【模式识别与人工智能】【实验报告合集】Bayes + Fisher + PCA + Decision Tree + KNN + K

2024-07-15 21:20| 来源: 网络整理| 查看: 265

目录

实验一  Bayes分类器设计

一、实验目的

二、实验原理

三、实验内容

四、实验要求

五、实验结果 

六、实验分析

实验二  基于Fisher准则的线性分类器设计

一、实验目的

二、实验原理

三、实验内容

四、实验要求

五、实验结果

六、实验分析

实验三 基于PCA变换的特征提取

一、实验目的

二、实验原理

三、实验内容

四、实验要求

五、实验结果

六、实验分析

实验四  决策树

一、实验目的

二、实验原理

1.决策树的基本概念

2.如何生成决策树

3. ID3算法

三、实验内容

四、实验要求

五、实验要求

六、实验分析

实验五   K近邻与基于K-means的动态聚类

一、实验目的

二、实验原理

三、实验内容

四、实验要求

五、实验结果

 六、实验分析

实验六 SVM支持向量机

一、实验目的

二、实验原理

三、实验内容

四、实验要求

五、实验结果

六、实验分析

这些实验在我的B站上有专门的视频演示:

【模式识别与人工智能】【实验报告合集】Bayes + Fisher + PCA + Decision Tree + KNN + K-Means + SVM_哔哩哔哩_bilibili

实验一  Bayes分类器设计 一、实验目的

对模式识别有一个初步的认识,能够根据自己的设计对贝叶斯决策理论算法有深刻地理解,掌握利用贝叶斯公式,进行设计两种分类器的方法,并加强对MATLAB等语言的运用。

二、实验原理

       要估计正态分布下的概率密度函数,假设身高随机变量为X,体重随机变量为Y,二维随机变量(X,Y)的联合概率密度函数是:

其中-∞a1,a2,…,aV},如果使用特征a来对数据集D进行划分,则会产生V个分支结点, 其中第v(小v)个结点包含了数据集D中所有在特征a上取值为av的样本总数,记为Dv。因此可以根据上面信息熵的公式计算出信息熵,再考虑到不同的分支结点所包含的样本数量不同,给分支节点赋予权重|Dv|D,即样本数越多的分支节点的影响越大,因此,能够计算出特征a对样本集D进行划分所获得的“信息增益”:

        一般而言,信息增益越大,则表示使用特征a对数据集划分所获得的“纯度提升”越大。所以信息增益可以用于决策树划分属性的选择,其实就是选择信息增益最大的属性,ID3算法就是采用的信息增益来划分属性。C4.5算法则采样信息增益率,CART决策树则采用基尼指数。

(2)剪枝:

        首先剪枝(pruning)的目的是为了避免决策树模型的过拟合。因为决策树算法在学习的过程中为了尽可能的正确的分类训练样本,不停地对结点进行划分,因此这会导致整棵树的分支过多,也就导致了过拟合。决策树的剪枝策略最基本的有两种:预剪枝(pre-pruning)和后剪枝(post-pruning):

        预剪枝(pre-pruning):预剪枝就是在构造决策树的过程中,先对每个结点在划分前进行估计,若果当前结点的划分不能带来决策树模型泛华性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。

        后剪枝(post-pruning):后剪枝就是先把整颗决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛华性能的提升,则把该子树替换为叶结点。

(3) 连续值处理:

因为连续属性的可取值数目不再有限,因此不能像前面处理离散属性枚举离散属性取值来对结点进行划分。因此需要连续属性离散化,常用的离散化策略是二分法,这个技术也是C4.5中采用的策略。下面来具体介绍下,如何采用二分法对连续属性离散化:

给定训练集D和连续属性a,假定a在D上出现了n个不同的取值,先把这些值从小到大排序,记为{a1,a2,…,an}基于划分点t可将D分为子集Dt-和Dt+,其中Dt-是包含那些在属性a上取值不大于t的样本,Dt+则是包含那些在属性a上取值大于t的样本。显然,对相邻的属性取值ai与ai+1来说, t在区间[ai , ai+1)中取任意值所产生的划分结果相同。因此,对连续属性a,我们可考察包含n -1个元素的候选划分点集合 

Ta={ai+ai+12|1≤i≤n-1}

即把区间[ai , ai+1)的中位点ai+ai+12作为候选划分点。然后,我们就可以像前面处理离散属性值那样来考虑这些划分点,选择最优的划分点进行样本集合的划分,使用的公式如下:

其中GainD,a,t是样本集D基于划分点t二分后的信息增益。划分的时候,选择使GainD,a,t最大的划分点。

(4)缺失值处理

在决策树中处理含有缺失值的样本的时候,需要解决两个问题:

如何在属性值缺失的情况下进行划分属性的选择?(比如“色泽”这个属性有的样本在该属性上的值是缺失的,那么该如何计算“色泽”的信息增益?)

给定划分属性,若样本在该属性上的值是缺失的,那么该如何对这个样本进行划分?(即到底把这个样本划分到哪个结点里?)

这在周志华《机器学习》(西瓜书)里面有详细的介绍并且给了例程,这里不过多写。

3. ID3算法

(1)ID3算法特点:

        1)决策树中每一个非叶结点对应着一个非类别属性,树枝代表这个属性的值。一个叶

        结点代表从树根到叶结点之间的路径对应的记录所属的类别属性值。

        2)每一个非叶结点都将与属性中具有最大信息量的非类别属性相关联。

        3)采用信息增益来选择能够最好地将样本分类的属性。

        信息增益基于信息论中熵的概念。ID3总是选择具有最高信息增益(或最大熵压缩)的属性作为当前结点的测试属性。该属性使得对结果划分中的样本分类所需的信息量最小,并反映划分的最小随机性或“不纯性”。

(2) 模型求解

构造决策树的方法是采用自上而下的递归构造,其思路是:

        1)以代表训练样本的单个结点开始建树(步骤1)。

        2)如果样本都在同一类,则该结点成为树叶,并用该类标记(步骤2和3)。

        3)否则,算法使用称为信息增益的机遇熵的度量为启发信息,选择能最好地将样本分类的属性(步骤6)。该属性成为该结点的“测试”或“判定”属性(步骤7)。值得注意的是,在这类算法中,所有的属性都是分类的,即取离散值的。连续值的属性必须离散化。

        4)对测试属性的每个已知的值,创建一个分支,并据此划分样本(步骤8~10)。

        5)算法使用同样的过程,递归地形成每个划分上的样本决策树。一旦一个属性出现在一个结点上,就不必考虑该结点的任何后代(步骤13)。

        6)递归划分步骤,当下列条件之一成立时停止:

                (a)给定结点的所有样本属于同一类(步骤2和3)。

                (b)没有剩余属性可以用来进一步划分样本(步骤4)。在此情况下,采用多数表决 (步骤5)。这涉及将给定的结点转换成树叶,并用samples中的多数所在类别标记它。换一种方式,可以存放结点样本的类分布。

                (c)分支test_attribute=ai 没有样本。在这种情况下,以samples中的多数类创建一个树叶(步骤12)。

(3)算法步骤:

Decision_Tree(samples,attribute_list)

输入    由离散值属性描述的训练样本集samples;

候选属性集合attribute_list。

输出    一棵决策树。

(1) 创建节点N;

(2) if samples 都在同一类C中then

(3) 返回N作为叶节点,以类C标记;

(4) if attribute_list为空then

(5) 返回N作为叶节点,以samples 中最普遍的类标记;//多数表决

(6) 选择attribute_list 中具有最高信息增益的属性test_attribute;

(7) 以test_attribute 标记节点N;

(8) for each test_attribute 的已知值v   //划分 samples

(9) 由节点N分出一个对应test_attribute=v的分支;

(10)令Sv为 samples中 test_attribute=v 的样本集合;//一个划分块

(11)if Sv为空 then

(12)加上一个叶节点,以samples中最普遍的类标记;

(13)else 加入一个由Decision_Tree(Sv,attribute_list-test_attribute)返回节点值

三、实验内容

基于张加州大学数据集里面的威斯康辛州乳腺癌数据集( Breast Cancer癌症数据集),用MATLAB编写一个分类器,采用决策树。

四、实验要求

 把数据集按照7:3的比例作为训练集和测试集,将通过训练得到的决策树模型应用在测试数据集上,得到最终的分类结果,并试着得到决策树的分类错误率。

五、实验要求

1.通过训练集创建的树结点结构体

2.绘制出的决策树模型

中文属性名版本

 英文属性名版本

3.运行过程

 3.运行过程

  4.将模型应用在测试数据集后分类的结果

  5.运行结果

最终错误率为7.100592%。

六、实验分析

1. 基于决策树的分类算法的一个最大的优点就是它在学习过程中不需要使用者了解很多背景知识(这同时也是它的最大的缺点),只要训练例子能够用属性-结论式表示出来,就能使用该算法来学习。

2.在ID3算法的假设空间包含所有的决策树,它是关于现有属性的有限离散值函数的一个完整空间。因为每个有限离散值函数可被表示为某个决策树,所以ID3算法避免了搜索不完整。假设空间的一个主要风险:假设空间可能不包含目标函数。

3.如何通俗地理解决策树中的熵&条件熵&信息增益?

答:(1)熵:表示一个随机变量的复杂性或者不确定性。

假如双十一我要剁手买一件衣服,但是我一直犹豫着要不要买,我决定买这件事的不确定性(熵)为2.6。

(2)条件熵:表示在直到某一条件后,某一随机变量的复杂性或不确定性。

我在看了这件衣服的评价后,我决定买衣服这件事的不确定性是1.2。

我在线下实体店试穿衣服后,我决定买衣服这件事的不确定性是0.9。

(3)信息增益:表示在知道某一条件后,某一随机变量的不确定性的减少量。

上面条件熵给出了两个:

一个是看了网上的评价,此时的信息增益是Gain1=2.6−1.2=1.4Gain1=2.6−1.2=1.4。

另一个是线下试穿了衣服,此时的信息增益Gain2=2.6−0.9=1.7Gain2=2.6−0.9=1.7。

很显然我在线下试穿衣服之后对于决定买这件衣服的不确定度下降更多,更通俗的说就是我试穿衣服之后买这件衣服的可能性更大了。

4.对本实验的想法?

答:决策树这一个实验是我对模式识别这门课程最感兴趣,同时也是收获最大的一个实验,他的优点和缺点都很明显,虽然在模式识别中的地位和影响力可能远远不及SVM或SVM,但是通过决策树,我加深了机器学习中对数据挖掘中分类这一部分的认识,一直以来我对数据挖掘的认识一直停留在python通过爬虫获得数据这一数据采集部分。

决策树这个实验我自认为做的很完美,代码基本都是自己写的,但也花费了大量精力时间去找参考文献,其中遇到的最大的两个问题:

ID3算法如何处理连续值?

这个问题打从上决策树这一部分时,老师在讲典型的例题根据天气好坏决策商场是否促销时,我就产生了疑问,而这个问题一直想不通,以至于拿到breast-cancer数据集时,看着这么庞大的数据,完全不知道从何下手,后来在CSDN看到了周志华的《机器学习》中关于决策树的部分,其中利用西瓜数据集对决策树进行了讲解,被称为“西瓜书”,而这也彻底使我豁然开朗,这是那个博主的博客网站:

决策树(decision tree)(三)——连续值处理_天泽28的博客-CSDN博客_决策树连续值处理

如何创建决策树模型的结点?

这个确实是决策树的一个关键,也是难点,特此我自学了MATLAB中结构体的写法,但遗憾的是,因为如果用递归,自己写代码会很难实现,因此我自己画了一个草图后,发现深度最多只有6层,于是自己手写了全过程。 下面是我的草图,可以看出和最终结果完全一样,以及我手写递归实现的全过程。

 (3)遗憾的是我找到了JAVA实现的例程,但是没有MATLAB自带的这种库难度挺大,最终没有用JAVA写,此外我没有进行剪枝操作和分类精度验证(如十次十折交叉验证)。

实验五   K近邻与基于K-means的动态聚类 ​​​​​​​一、实验目的

通过KNN分类(K近邻)与K-Means聚类(K均值)两种非线性分类方法二合一的实验,加深对近邻算法和聚类分析算法基本思想、特点、方法的理解和掌握,并能区分两种算法的不同,编写能对实际模式样本正确分类的算法程序。

二、实验原理

1. KNN分类(K近邻):

        K近邻就是在N个样本中,找出x的K个近邻。

设这N个样本中,来自Wc类的样本有Nc个,若K1,K1,…,Kc分别是K个近邻中属于W1,W1,…,Wc类的样本数,则我们可以定义判别函数为:

决策规则为:        若

则决策

这就是K近邻的基本规则。

从方法论角度出发, KNN 认为,待分类对象的类别可以通过在它附近的训练数据的类别来确定,所以采取的策略就是找到离待分类对象最近的 K 个邻居进行分析。

实际应用中,可以根据需要选择不同的距离度量,当然也可以利用相似性度量,即把未知样本的类别决策为已知样本中与之最相似的那个样本的类别(也就是相似度最大),当然也有可能出现由不同类别算出的相似度相同的情况,这个时候可以采取随机决策(如取决于最近邻),或者给训练集中数量占优的那一类(以贝叶斯观点来看,就是在似然函数相同情况下,采信先验概率较大的那一类)。

在 KNN 的设计过程中,有四个要点需要注意:

(1)用来对待分类对象所属类别进行评估的数据集合(不一定需要用到整个训练集);

(2)用来计算对象之间相似度的距离或者相似度矩阵(比如,欧式距离,马氏距离等);

(3)K 值的选取,若K=1时,即为最近邻算法;

(4)来确定待分类对象所属类别的方法(比如,距离加权与否)。

 2. K-Means聚类(K均值):

       K-均值算法的主要思想是先在需要分类的数据中寻找K组数据作为初始聚类中心,然后计算其他数据距离这三个聚类中心的距离,将数据归入与其距离最近的聚类中心,之后再对这K个聚类的数据计算均值,作为新的聚类中心,继续以上步骤,直到新的聚类中心与上一次的聚类中心值相等时结束算法。

算法流程:

(1) 首先确定一个k值,即我们希望将数据集经过聚类得到k个集合。

(2) 从数据集中随机选择k个数据点作为质心。

(3) 对数据集中每一个点,计算其与每一个质心的距离(如欧式距离),离哪个质心近,就划分到那个质心所属的集合。

(4) 把所有数据归好集合后,一共有k个集合。然后重新计算每个集合的质心。

(5) 如果新计算出来的质心和原来的质心之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),我们可以认为聚类已经达到期望的结果,算法终止。

(6) 如果新质心和原质心距离变化很大,需要迭代3~5步骤。

数学原理:

如果用数据表达式表示,假设簇划分为(C1,C1,…,Ck),则我们的目标是最小化平方误差

其中μ是簇Ci的均值向量,有时也称为质心,表达式为∶

如果我们想直接求上式的最小值并不容易,这是一个NP难的问题,因此只能采用启发式的迭代方法。

K-Means采用的启发式方式很简单,用下面一组图就可以形象的描述:

 上图a表达了初始的数据集,假设k=2。在图b中,我们随机选择了两个k类所对应的类别质心,即图中的红色质心和蓝色质心,然后分别求样本中所有点到这两个质心的距离,并标记每个样本的类别为和该样本距离最小的质心的类别,如图c所示,经过计算样本和红色质心和蓝色质心的距离,我们得到了所有样本点的第一轮迭代后的类别。此时我们对我们当前标记为红色和蓝色的点分别求其新的质心,如图d所示,新的红色质心和蓝色质心的位置已经发生了变动。图e和图f重复了我们在图c和图d的过程,即将所有点的类别标记为距离最近的质心的类别并求新的质心。最终我们得到的两个类别如图f。

三、实验内容

编程实现K-近邻分类算法和K-均值聚类算法,并在之前PCA特征人脸识别实验中得到的orl_faces_112x92.mat (40类,每类10个样本,10304维特征)数据集上验证其性能。

四、实验要求

1. 利用MATLAB实现K-近邻分类算法时,使用三近邻算法,虽然KNN理论上不需要训练集,但为了计算错误率,把人脸数据集orl_faces随机排序,然后分成200个训练样本和200个测试样本,运行过程中显示出待分类人脸图像和其最近的三个近邻人脸图像,打印出每组测试集数据的最终分类结果,最后计算分类错误率。

2. 利用MATLAB实现K-均值聚类算法时,最后的错误率并不是很好计算;可利用PCA主成分分析法将10304维度的人脸库降维到3维,k取3,并画出聚类完成后3个质心及其3类人脸三维空间中的分布情况。

五、实验结果

1.KNN运行过程:

2.K-Means运行结果:

第一类人脸

第二类人脸

 

第三类人脸

聚类完成后三维空间中的分布情况

 六、实验分析

1.KNN数据表格

运行次数

错误率

第一次实验

7.000000%

第二次实验

11.000000%

第三次实验

7.000000%

第四次实验

8.500000%

第五次实验

9.000000%

第六次实验

11.000000%

第七次实验

8.500000%

第八次实验

8.000000%

第九次实验

5.000000%

第十次实验

10.500000%

可以看出KNN分类算法的效果还是不错的。

2.KNN比较特殊的情况举例:

三近邻各不相同,取最近邻,最近邻和待分类图像相同,分类正确。

三近邻各不相同,取最近邻,最近邻和待分类图像不同,分类错误。

二、三近邻为同一人,但与待分类图像不是同一人,最近邻和待分类图像为同一人,此时根据数量占优原则,是分类错误的。

3.K-Means比较特殊的情况举例:

第34类完整的分类出了两个人的各自的10张人脸图像

第21类不都是同一个人,但是都很像

第37类第8个不是同一人,但是也戴眼镜。

K-Means聚类后的结果是不大好计算错误率的,但是从最后的聚类结果可以看出:

(1) 聚类后的人脸图像要么是同一人,要么虽然不是同一人但是相似度很高;

(2) 完整聚类出同一人10张人脸图像的比例不小,有的可能只有四五张,但都是同一人。

4.关于各种距离度量算法的选择;

欧氏距离是最容易直观理解的距离度量方法,我们小学、初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离。

这里找到了一篇很好的博客: k-近邻算法之距离度量_IT之一小佬的博客-CSDN博客_k-distance

5.实验过程中遇到的一个很关键的问题,卡住了自己很久:

Matlab中读取图片后保存的数据是uint8类型(取值范围0~255),但在图像矩阵运算的时候,使用的数据类型却是double类型。若使用uint8类型的数据进行矩阵运算,一旦数据超出255就会溢出。

这是帮助自己解决问题的那个博客: Debug:Matlab处理图像数据时超过255溢出_帅气的小白的博客-CSDN博客_灰度值超过255

6. KNN分类(K近邻)与K-Means聚类(K均值)的区别:

KNN

K-Means

目的是为了确定一个点的分类

目的是为了将一系列点集分成k类

KNN是分类算法

K-Means是聚类算法

监督学习,分类目标事先已知

非监督学习,将相似数据归到一起从而得到分类,没有外部分类

训练数据集有label,已经是完全正确的数据

训练数据集无label,是杂乱无章的,经过聚类后才变得有点顺序,先无序,后有序

没有明显的前期训练过程,属于memory-based learning

有明显的前期训练过程

K的含义:“k”是用来计算的相邻数据数。来了一个样本x,要给它分类,即求出它的y,就从数据集中,在x附近找离它最近的K个数据点,这K个数据点,类别c占的个数最多,就把x的label设为c

K的含义:“k”是类的数目。K是人工固定好的数字,假设数据集合可以分为K个簇,由于是依靠人工定好,需要一点先验知识

K值确定后每次结果固定

K值确定后每次结果可能不同,从 n个数据对象任意选择 k 个对象作为初始聚类中心,随机性对结果影响较大

时间复杂度:O(n)

时间复杂度:O(n*k*t),t为迭代次数

 

 

实验六 SVM支持向量机 一、实验目的

通过实验,加深对SVM的认识,其前身为感知机,学会libSVM的安装与使用,最后利用MATLAB,调用libSVM提供的库函数,基于支持向量机理论完成对 Breast Cancer数据集的二分分类器设计。

二、实验原理

1.背景:

支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中[10]。

支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力[14](或称泛化能力)。

——以上是经常被有关SVM 的学术文献引用的介绍。

上个世纪90年代,由于人工神经网络(RNN)的衰落,SVM在很长一段时间里都是当时的明星算法。被认为是一种理论优美且非常实用的机器学习算法。

SVM(support vector machine )是支持向量机,是一种可以训练的机器学习方法。

Vapnik等人在多年研究统计学习理论基础上对线性分类器提出了另一种设计最佳准则。其原理也从线性可分说起,然后扩展到线性不可分的情况。甚至扩展到使用非线性函数中去,这种分类器被称为支持向量机(SupportVectorMachine,简称SVM)。支持向量机的提出有很深的理论背景。

在理论方面,SVM算法涉及到了非常多的概念:间隔(margin)、支持向量(support vector)、核函数(kernel)、对偶(duality)、凸优化等。有些概念理解起来比较困难,例如kernel trick和对偶问题。在应用方法,SVM除了可以当做有监督的分类和回归模型来使用外,还可以用在无监督的聚类及异常检测。相对于现在比较流行的深度学习(适用于解决大规模非线性问题),SVM非常擅长解决复杂的具有中小规模训练集的非线性问题,甚至在特征多于训练样本时也能有非常好的表现(深度学习此时容易过拟合)。但是随着样本量m的增加,SVM模型的计算复杂度会呈m2或m3增加。

2.思想:

SVM的主要思想可以概括为两点:

⑴它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能。

⑵它基于结构风险最小化理论之上在特征空间中建构最优分割超平面,使得学习器得到

全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界。

在学习这种方法时,首先要弄清楚这种方法考虑问题的特点,这就要从线性可分的最简单情况讨论起,在没有弄懂其原理之前,不要急于学习线性不可分等较复杂的情况,支持向量机在设计时,需要用到条件极值问题的求解,因此需用拉格朗日乘子理论,但对多数人来说,以前学到的或常用的是约束条件为等式表示的方式,但在此要用到以不等式作为必须满足的条件,此时只要了解拉个朗日理论的有关结论就行。

3.原理:

传统的SVM做的事情其实就是找到一个超平面,实现二分类,一类+1,一类-1。如上所示。它的目的就是使得两类的间隔最大。黑色的块表示距离分割面最近的样本向量,称为支持向量。

如果我们在低维空间里找不到一个线性分类面把样本分开,SVM就为我们提供了一个思路:将数据从低维空间映射到高维空间后,就很可能使得这堆数据线性可分。比如说,我们要在猫科动物这个特征很局限的“低维空间”里去分猫和老虎,是比较困难的,因为他们很多特征比较相近。但是,如果我们有了更多的参考依据,从生物界的视角,即一个“高维空间”再去区分猫和老虎,我们就有了更多的理由来做出科学的辨别。至于如何低维映射到高维,就是一门数学上的学问了。

SVM方法是通过一个非线性映射p,把样本空间映射到一个高维乃至无穷维的特征空间中(Hilbert空间),使得在原来的样本空间中非线性可分的问题转化为在特征空间中的线性可分的问题.简单地说,就是升维和线性化.升维,就是把样本向高维空间做映射,一般情况下这会增加计算的复杂性,甚至会引起“维数灾难”,因而人们很少问津.但是作为分类、回归等问题来说,很可能在低维样本空间无法线性处理的样本集,在高维特征空间中却可以通过一个线性超平面实现线性划分(或回归).一般的升维都会带来计算的复杂化,SVM方法巧妙地解决了这个难题:应用核函数的展开定理,就不需要知道非线性映射的显式表达式;由于是在高维特征空间中建立线性学习机,所以与线性模型比,不但几乎不增加计算的复杂性,而且在某种程度上避免了“维数灾难”.这一切要归功于核函数的展开和计算理论。

K就是核函数,做一个内积的运算。SVM中核函数保证了低维空间里的计算量,输出到高维空间里。K相当于隐含层的神经元。核函数的输出乘上权重,进入激活函数处。

                               

 

选择不同的核函数,可以生成不同的SVM,常用的核函数有以下4种:

⑴线性核空间K(x,y)=x·y;

⑵多项式核函数K(x,y)=[(x·y)+1]d;

⑶径向基函数K(x,y)=exp(-|x-y|^2/d^2)

⑷二层神经网络核函数K(x,y)=tanh(a(x·y)+b)

4.特征:

⑴SVM学习问题可以表示为凸优化问题,因此可以利用已知的有效算法发现目标函数的全局最小值。而其他分类方法(如基于规则的分类器和人工神经网络)都采用一种基于贪心学习的策略来搜索假设空间,这种方法一般只能获得局部最优解。

⑵SVM通过最大化决策边界的边缘来控制模型的能力。尽管如此,用户必须提供其他参数,如使用核函数类型和引入松弛变量等。

⑶通过对数据中每个分类属性引入一个哑变量,SVM可以应用于分类数据。

⑷SVM一般只能用在二类问题,对于多类问题效果不好。

三、实验内容

基于张加州大学数据集里面的威斯康辛州乳腺癌数据集( Breast Cancer癌症数据集),用MATLAB编写一个二分分类器,采用SVM支持向量机,可以使用libSVM的库函数。

四、实验要求

1)把数据集按照7:3的比例作为训练集和测试集,将通过训练得到的SVM支持向量机模型应用在测试数据集上,得到最终的分类结果,并试着得到决策树的分类正确率。

2)为什么一定要进行数据归一化处理, 如果不归一化, 程序错误率如何呢?

五、实验结果

1.libSVM的安装较为重要的事项

1.网址为:LIBSVM -- A Library for Support Vector Machines (ntu.edu.tw)

2. 在matlab命令行中输入mex -setup -v 查看一下电脑中有啥编译器

若是能找到c++编译器,可直接尝试在命令行窗口输入make,执行make.m程序进行编译,完成后出现4个后缀为.mexw64文件。如果没有则可去MATLAB官网下在MinGW-W64。

 

3.要在MATLAB添加libSVM的路径 

2.程序运行过程

3、程序运行结果(程序大概需运行3分钟)

可以看出最终得到的SVM支持向量机模型应用到训练集中正确率为99.25%,测试集中正确率为94.0828%。

可以看出测试集一共169个数据,真实类别红色线上的点不在蓝色预测线上的点很少,说明错误率很低。

六、实验分析

1. SVM 的优势:

(1) 处理解决了样本数据较少的机器学习问题;

(2) 提高了学习机的泛化性能;

(3) 少数支持向量决定了最后的决策函数,因此,某种程度上对高维问题有很好的辅助解决作用,提高了方法的鲁棒性;

(4) 完善改进了对于非线性数据分类研究的问题;

(5) 规避了神经网络在结构抉择问题和局部极小值问题。

SVM 的劣势:

(1) 缺乏对数据缺失的判断能力;

(2) 解决非线性数据还没有完善的方案和措施,只能靠慎重的选择核函数来解决。 另一方面, 所有传统分类方法中, SVM 的分类性能是最好的。

2. 为什么一定要进行数据归一化处理, 如果不归一化, 程序错误率如何呢?

答:因为归一化很有可能提高精度,例如一共特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖。而且归一化还可以提高求解最优解速度,更快地收敛。

如果不进行归一化处理, 程序错误率较高, 最后进行分类的时候也出现了大量的错误归类现象。

3. 这次的实验经过决策树以后,仍然继续参考了周志华的《机器学习》第六章中关于SVM的部分,这本出名的“西瓜书”对SVM的讲解确实很好,这里有一个参考网址:

支持向量机(SVM)和支持向量机回归(SVR) - 知乎

4.除了西瓜书之外,这个博客对SVM及SVR讲解的也非常全面:

模式识别之svm()---支持向量机svm 简介1995_weixin_34077371的博客-CSDN博客

关于libSVM的安装可参考这个博客:

MATLAB libsvm 安装和使用_qq:843375677的博客-CSDN博客_libsvm matlab

有关libSVM库函数的使用可参考这个网址:

关于libSVM的一些总结_sherry_gp的博客-CSDN博客_libsvmread

8. SVM 怎样能得到好的结果?

答:1) 对数据做归一化(simple scaling)

2)  应用 RBF kernel 

3)  用cross-validation和grid-search 得到最优的c和g

4)   用得到的最优c和g训练训练数据

5)   测试

9. SVM的改进:解决回归拟合问题的SVR

为了利用SVM解决回归拟合方面的问题,Vapnik等人在SVM分类的基础上引入了不敏感损失函数,从而得到了回归型支持向量机(Support Vector Machine for Regression,SVR)。

SVM应用于回归拟合分析时,其基本思想不再是寻找一个最优分类面使得两类样本分开,而是寻找一个最优分类面使得所有训练样本离该最优分类面的误差最小。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有