设计线性(非线性)可分的数据集

实验目的

了解线性可分,设计线性可分的数据集与非线性可分的数据集。

采用线性可分数据集,对比PLA算法与Pocket PLA算法的性能。

采用非线性可分数据集,验证Pocket PLA算法的性能。

实验步骤

数据集的设计

线性可分数据集的设计

随机生成一组权值w = (w0 , w1 ,…, wn ),随机生成设定个数 d的输入 x = (x1 , x2 ,…, xn ),

根据公式

python中pulp库非线性规划 python 非线性_python


计算输出,组合成包含 d 个样本的线性可分数据集,如图 2-1 为正负 样本数都为 20 时的样本分布。

图2-1 线性可分数据集

非线性可分数据集的设计

采用噪音的方式,将输入的线性可分数据集中的一定比例的样本的标签修改为相反标签,如图 2-2为噪音比为 10%时的样本分布。

python中pulp库非线性规划 python 非线性_机器学习_02

图2-2 噪音后的非线性可分数据集

线性可分数据集上,不同条件下 PLA与 Pocket PLA的性能比较

python中pulp库非线性规划 python 非线性_设计线性非线性_03

单次实验

假设正负样本数目均为 100,特征维度为 2,Pocket的最大迭代为一百次,进行实验。实验代码见图 4-1。

图 2-3 单次实验结果图

图 2-3为样本分布与 PLA算法和 PocketPLA算法所求得的线性分类器,图 2-4为本次实验的性能报告,从迭代次数、耗时的开销来看,PocketPLA算法大约是 PLA算法的 5倍,PLA算法的准确率为 100%,而 PocketPLA的准确率为 99.5%。

python中pulp库非线性规划 python 非线性_算法_04

图 2-4 单次实验性能比较

重复实验

为了减小偶然性,在同样的设置下,进行 100次的重复实验。从实验结果中选取了运行时间和准确率作为比较标准,PLA平均运行时间为 0.02s,命中率为 100%,PocketPLA平均运行时间为 0.05s,命中率为 99%,比较结果折线图如图 2-5,图 2-6所示。

在重复实验中,发现 PLA比 PocketPLA的平均消耗要小,准确率要高。但是由于 PocketPLA的最大迭代次数以及数据集的分布情况等因素的影响,在单次实验中,PLA的消耗不一定比PocketPLA低,但是准确率一定大于等于 PocketPLA的准确率。

python中pulp库非线性规划 python 非线性_机器学习_05

图2-5 100次重复实验运行时间比较图

python中pulp库非线性规划 python 非线性_python中pulp库非线性规划_06

图 2-6 100次重复实验命中率比较图

非线性可分数据集上,不同条件下 pocket PLA的性能分析

单次实验

假设正负样本数目均为 100,特征维度为 2,噪声比为 10%,Pocket的最大迭代为 100次,进行实验。每次迭代随机选择一个错误点进行修正,修正后的分类线错误率与之前的分类线比较,若错误率较低,则选择修正后的分类线。继续进行下一次迭代。迭代完毕后,得到更新后的权重系数 w ,实验代码见图 4-2。

python中pulp库非线性规划 python 非线性_设计线性非线性_07

图 2-7 单次实验结果图

图 2-7为样本分布与 PocketPLA算法所求得的线性分类器,图 2-8为本次实验的性能报告,从迭代次数、耗时的开销来看,PocketPLA的准确率为 84.5%,耗时为 0.06s。

python中pulp库非线性规划 python 非线性_python中pulp库非线性规划_08

图 2-8 单次实验性能报告

重复实验

为了减小偶然性,在同样的设置下,进行 100次的重复实验。

从实验结果中选取了运行时间和准确率作为比较标准,PocketPLA 平均运行时间为0.065s,命中率为 89%,比较结果折线图如图 2-9,图 2-10所示。

图2-9 100次重复实验运行时间图

python中pulp库非线性规划 python 非线性_机器学习_09


python中pulp库非线性规划 python 非线性_python_10

图 2-10 100次重复实验命中率图

实验结论

PLA的算法局限性比较大,一定要针对线性可分的数据,且只能用来做二元分类,如果是多元分类,还要进一步学习其他算法。

Pocket算法可以解决 PLA线性可分的未知性,但是自身缺点也比较大,如果设定的迭代字数太少,可能找到的解不够好,太多又可能给计算带来太大开销。假设数据一开始就是线性可分,那么这个算法找出来的未必是最好解,且时间花费也可能比较大。

伪代码

图 4-1 PLA伪代码

python中pulp库非线性规划 python 非线性_python_11

图 4-2 PocketPLA伪代码

python中pulp库非线性规划 python 非线性_机器学习_12