人工智能算法大全:基于MATLAB
上QQ阅读APP看书,第一时间看更新

3.3 特征规约算法实例分析

PCA是MATLAB自带的算法,并且根据参数选择不同,可以任选PCA、SVD、ALS。本案例以slice数据和红酒等级数据为例,进行特征规约,然后将规约和未规约的特征数据分别代入KNN分类算法,从而比较出特征规约在分类算法中的应用价值。

3.3.1 数据集介绍

本次测试使用的是slice数据集和红酒等级数据集。slice数据集有许多0维,可以用于测试数据规约算法对于0维的处理能力。红酒等级数据则是离散数据和连续数据都有的一个案例。这两种数据集都有一定的特点,是较好的算法测试对象。

1. slice数据集

该训练数据集有50000条“切片”数据,测试数据集有3500条数据。每一条数据是一个386维的向量,其中最后1维数据是待回归的标签。在图3-1的slice数据集中,每一行为一条数据,最后一列为标签,其他列都是属性。

图3-1 slice数据集

2.“红酒等级”数据集

该训练数据集有1000条红酒数据,测试数据集有599条数据。每一条数据是一个12维的向量,其中最后1维数据是待回归的属性值(红酒评分)。在图3-2的红酒等级数据中,第一行是维度名称,其余每一行为一条数据。

图3-2 红酒等级数据

3.3.2 函数介绍

PCA算法的输入和输出较为简单,且该算法内部集成了多个数据规约的不同方法。下面详细介绍该函数的使用。

函数的输入X为np列的数据矩阵,每一行是一个样本,每一列代表一个属性字段。

函数的输出COEFF是pr列的矩阵,每一列是一个新的属性字段。SCORE是原数据X在COEFF空间中的坐标表示,为nr列矩阵。

我们也可在调用pca()时加入一些控制参数,以name/value对的形式作为函数输入,具体如下。

其中PARAM1和PARAM2都是参数名称,val1和val2是参数对应的值。

1. svd的输出量

svd最多的输出量有6个,调用方式如下。

当采用的Algorithm为svd(默认,可不输入)时,函数的输出分别如下。

· COEFF:右奇异矩阵,即转换矩阵,为pr列的矩阵,每一列是一个新的属性字段。r为指定的新坐标空间中的维度(由'NumComponents'参数指定)。

· SCORE是原数据XCOEFF空间中的坐标表示,为nr列矩阵。

· LATENT是一个p行1列的向量,代表新坐标中各个主成分方向的重要程度。由LATENTi=i=1,2,…,p) 计算得到, 其中DOF为自由度, 一般取n-1。

· TSQUARED是一个n行1列的向量,由localTSquared函数得到,该函数的作用是计算每一个样本的霍特林T平方统计量。

· EXPLAINED是一个p行1列的向量,代表新坐标中各个主成分方向的方差占总方差的比例, 由EXPLAINEDi =i=1,2,…,p) 计算得到。

· MU为一个1行p列的行向量,代表所有n个样本的均值。

2. eig的输出量

当采用的Algorithm为eig时,函数的输出分别如下。

· COEFF:对输入数据X经中心化后的协方差矩阵求特征向量得到为pr列的矩阵,每一列是一个新的属性字段。r为指定的新坐标空间中的维度(由NumComponents参数指定)。

· SCORE是原数据XCOEFF空间中的坐标表示,为nr列矩阵,经过SCORE=X×COEFF计算得到。

· LATENT是一个p行1列的向量,代表新坐标中各个主成分方向的重要程度。通过对输入数据X经中心化后的协方差矩阵求特征值得到。

· TSQUARED是一个n行1列的向量,由localTSquared函数得到,该函数的作用是计算每一个样本的霍特林T平方统计量。

EXPLAINED是一个p行1列的向量, 代表新坐标中各个主成分方向的方差占总方差的比例, 由EXPLAINEDi =i=1,2,…,p) 计算得到。

· MU为一个1行p列的行向量,代表所有n个样本的均值。

3. als的输出量

当采用的Algorithm为ls时,采用了一个[L,R]=alsmfX)函数来获得原数据矩阵X的左因子矩阵Lnr列)和右因子矩阵Rpr列),主函数的输出分别如下。

· COEFF:为pr列的坐标转换矩阵,每一列是一个新的属性字段。r为指定的新坐标空间中的维度(由NumComponents参数指定),COEFF=R

· SCORE是原数据XCOEFF空间中的坐标表示,为nr列矩阵,SCORE=L

· LATENT是一个r行1列的向量,代表新坐标中各个主成分方向的重要程度。

· TSQUARED是一个n行1列的向量,由localTSquared函数得到,该函数的作用是计算每一个样本的霍特林T平方统计量。

· EXPLAINED是一个r行1列的向量,代表新坐标中各个主成分方向的方差占总方差的比例, 由EXPLAINEDi =i=1,2,…,r) 计算得到。

· MU为一个1行p列的行向量,代表所有n个样本的均值。

3.3.3 结果分析

slice数据集有着大量的特征冗余,经过PCA处理后,最终提取了3个有效特征,大大减少了特征数量。将原始数据和PCA处理后的数据都用KNN算法比较,处理后的数据预测结果更加稳定。同样,将红酒等级数据也用PCA算法处理,用三种不同的特征规约算法处理,再用KNN算法测试,预测结果基本一致。

1. slice数据主成分分析

slice数据有着385维特征以及大量的特征冗余,所以对slice数据切分训练集和预测集以后,再进行svd分解规约,然后用KNN回归进行准确率预测,并将其可视化。特征规约算法的使用代码如下。

输入的train就是由训练数据集的前385列构成,train的每一行都是一个训练样本,每一列都是样本的一个属性字段,pca(train)就是对53500个样本的365个属性字段进行主成分分析。

在图3-3中,输出的coeff为385×3的矩阵,每一列都是一个主成分,即新空间中的每个主成分都是由原385维空间中的向量表示。

在图3-4中,输出的score为53500×3的矩阵,每一行是一个样本,即每个样本在主成分构成的新空间中都由一个1×3的行向量表示。

在图3-5中,函数的输出latent是385×1的列向量,每个元素代表x的协方差矩阵的一个特征值,而且这些特征值按从大到小排列,代表着每一个特征的重要度。

图3-3 规约后的主成分

图3-4 规约后的新样本

图3-5 特征重要度

在图3-6中,输出的tsquared是53500×1的列向量,其每个元素是每个样本的霍特林T平方统计量。

在图3-7中,explained是385×1的向量,其每个元素都是对应主成分上方差占所有主成分总方差的比率。

图3-6 霍特林T平方统计量

图3-7 主成分的方差占比

在图3-8中,mu是1×385的向量,其为样本均值。

图3-8 样本均值

2. slice数据主成分分析和KNN回归预测结果

下面先用原数据应用KNN回归预测,接着对slice数据的预测集进行PCA规约,然后再一次运用KNN回归进行预测,比较一下两次的差别。

首先,对原数据进行KNN回归,并代入测试集,观察回归结果,代码如下。

由图3-9和图3-10可以看出,回归结果不尽如人意,由于有大量特征冗余,耗费了91.87秒的时间,且拟合优度只有0.296。

图3-9 KNN原始数据KNN回归的预测结果

图3-10 原始数据KNN回归结果

接着,对PCA规约后的特征进行KNN回归,代码如下。

由图3-11和图3-12可以看出,slice数据经过PCA降维后再进行KNN回归得到的regression2,比直接应用KNN回归得到的regression效果提升显著,从运行效率和拟合优度上都有明显提升。

图3-11 PCA规约数据的KNN回归预测结果

图3-12 规约数据KNN回归结果

得到的KNN的回归结果和PCA+KNN的回归结果对比,如图3-13所示。可以看出PCA+KNN的结果更加稳健。

3. EVD、SVD和ALS方法的对比

在主成分分析中,调用pca()时该函数使用的默认算法是奇异值分解,如果想改变算法,则应当在调用时加入参数名和参数值。本小节利用红酒数据进行回归,代码如下。

图3-13 KNN与PCA+KNN回归结果对比

在对原始红酒数据上述主成分分析提取主成分后,再进行KNN回归分析。通过对比发现,三种方法得到的预测结果一致,如图3-14所示。

图3-14 三种规约方法对比