MATLAB验证LDA降维前后k近邻准确率
一、概念
1.最近邻法:对于未知样本x,比较x与N个已知类别的样本之间的欧式距离,并决策x与距离它最近的样本同类。
2.K近邻法:取未知样本x的k个近邻,看这k个近邻中多数属于哪一类,就把x归为哪一类。K取奇数,为了是避免k1=k2的情况。
3.欧式距离公式:
二维的公式 d = sqrt ( (x1 - x2) ^2 + (y1 - y2) ^2)
三维的公式 d = sqrt ( (x1 - x2) ^2 + (y1 - y2) ^2 + (z1 - z2) ^2)
推广到n维空间,欧氏距离的公式 d = qrt( ∑ (xi1 - xi2) ^2 ) i=1,2..n
xi1表示第一个点的第i维坐标,xi2表示第二个点的第i维坐标.
二、分析
1、算法分析
若要判别x属于哪一类,关键要求得与x最近的k个样本(当k=1时,即是最近邻法),然后判别这k个样本的多数属于哪一类。采用欧式距离公式,对 UCI 数据集进行处理。
在k近邻中先在sonar和iris数据中进行交叉验证,划分出训练样本与测试样本,然后分别计算出测试样本到每个训练样本的欧氏距离,选出与测试样本最近的k个训练样本并分类,与原始数据比较得出准确率。
在进行降维操作的实验中,先将数据分类,分别计算各类的类均值向量和类内离散度,然后算总均值向量、总类内和类间离散度和Fisher投影方向。取特征向量的前k维组成投影矩阵,将样本在投影矩阵上降维至 k维,然后再进行k近邻运算。
2、数据分析
Sonar:共有208个样本,特征数为60,样本分为97和111两类
Iris:共有150个数据集,每个数据有4个属性,分为3类,每类数据数为50
Usps:共有7291个训练样本和2007个测试样本,每个样本特征数为256
三、核心代码
sonar
最近邻
1 | clear all; |
k近邻
1 | clear all; |
先降维再k近邻
1 | clear all |
Iris
1 | clear all |
k近邻
1 | clear all |
先降维再k近邻
1 | clear all |
usps
1 | clear all; |
四、结果数据
soner
K取值 | 降维前准确率 | 降维后准确率 |
---|---|---|
1 | 0.8221 | 0.8077 |
3 | 0.8365 | 0.8029 |
5 | 0.7788 | 0.8125 |
7 | 0.7500 | 0.7356 |
9 | 0.7115 | 0.7309 |
11 | 0.6779 | 0.6683 |
13 | 0.6442 | 0.6635 |
15 | 0.6394 | 0.6683 |
17 | 0.6490 | 0.6394 |
19 | 0.6587 | 0.6683 |
Iris
K取值 | 降维前准确率 | 降维后准确率 |
---|---|---|
1 | 0.9600 | 0.9667 |
3 | 0.9600 | 0.9600 |
5 | 0.9533 | 0.9600 |
7 | 0.9667 | 0.9667 |
9 | 0.9733 | 0.9800 |
11 | 0.9733 | 0.9800 |
13 | 0.9733 | 0.9800 |
15 | 0.9800 | 0.9800 |
17 | 0.9667 | 0.9800 |
19 | 0.9800 | 0.9733 |
usps
K取值 | 准确率 |
---|---|
1 | 0.9502 |
3 | 0.9482 |
5 | 0.9502 |
7 | 0.9467 |
9 | 0.9442 |
11 | 0.9402 |
13 | 0.9372 |
15 | 0.9352 |
17 | 0.9332 |
19 | 0.9317 |