接着统计学习中knn算法实验(1)的内容

Problem:

  1. Explore the data before classification using summary statistics orvisualization
  2. Pre-process the data (such as denoising, normalization, feature selection, …)
  3. Try other distance metrics or distance-based voting
  4. Try other dimensionality reduction methods
  5. How to set the k value, if not using cross validation? Verify your idea
问题:
  1. 在对数据分类之前使用对数据进行可视化处理
  2. 预处理数据(去噪,归一化,数据选择)
  3. 在knn算法中使用不同的距离计算方法
  4. 使用其他的降维算法
  5. 如何在不使用交叉验证的情况下设置k值

使用Parallel coordinates plot做数据可视化,首先对数据进行归一化处理,数据的动态范围控制在[0,1]。注意归一化的处理针对的是每一个fearture。

通过对图的仔细观察,我们挑选出重叠度比较低的feature来进行fearture selection,feature selection实际上是对数据挑选出更易区分的类型作为下一步分类算法的数据。我们挑选出feature序号为(1)、(2)、(5)、(6)、(7)、(10)的feature。个人认为,feature selection是一种简单而粗暴的降维和去噪的操作,但是可能效果会很好。

根据上一步的操作,从Parallel coordinates上可以看出,序号为(1)、(2)、(5)、(6)、(7)、(10)这几个feature比较适合作为classify的feature。我们选取以上几个feature作knn,得到的结果如下:

当K=1 的时候,Accuracy达到了85.38%,并且相比于简单的使用knn或者PCA+knn的方式,Normalization、Featrure Selection的方法使得准确率大大提升。我们也可以使用不同的feature搭配,通过实验得到更好的结果。

MaxAccuracy= 0.8834 when k=17 (Normalization+FeartureSelection+KNN)

试验中,我们使用了两种不同的Feature Selection 策略,选用较少fearture的策略对分类的准确率还是有影响的,对于那些从平行坐标看出的不那么好的fearture,对分类还是有一定的帮助的。
在较小的k值下,Feature Selection的结果要比直接采用全部Feature的结果要好。这也体现了在相对纯净的数据下,较小的k值能够获得较好的结果,这和直观感觉出来的一致。
我们再尝试对数据进行进一步的预处理操作,比如denoising。
数据去噪的方法利用对Trainning数据进行一个去处最大最小边缘值的操作,我们认为,对于一个合适的feature,它的数据应该处于一个合理的范围中,过大或者过小的数据都将是异常的。

Denoising的代码如下:

function[DNData]=DataDenoising(InputData,KillRange)
DNData=InputData;
%MedianData=median(DNData);
for i=2:size(InputData,2)[temp,DNIndex]=sort(DNData(:,i));DNData=DNData(DNIndex(1+KillRange:end-KillRange),:);
end

采用LLE作为降维的手段,通过和以上的几种方案作对比,如下:

MaxAccuracy= 0.9376 when K=23 (LLE dimensionality reduction to 2)

关于LLE算法,参见这篇论文

  • Nonlinear dimensionality reduction by locally linear embedding.Sam Roweis & Lawrence Saul.Science, v.290 no.5500 , Dec.22, 2000. pp.2323--2326.
以及项目主页:
http://www.cs.nyu.edu/~roweis/lle/

源代码:

StatLearnProj.m

clear;
data=load('wine.data.txt');
%calc 5-folder knn
Accuracy=[];
for i=1:5Test=data(i:5:end,:);TestData=Test(:,2:end);TestLabel=Test(:,1);Trainning=setdiff(data,Test,'rows');TrainningData=Trainning(:,2:end);TrainningLabel=Trainning(:,1);Accuracy=cat(1,Accuracy,CalcAccuracy(TestData,TestLabel,TrainningData,TrainningLabel));
end
AccuracyKNN=mean(Accuracy,1);%calc PCA
Accuracy=[];
%PCA
[Coeff,Score,Latent]=princomp(data(:,2:end));
dataPCA=[data(:,1),Score(:,1:6)];
Latent
for i=1:5Test=dataPCA(i:5:end,:);TestData=Test(:,2:end);TestLabel=Test(:,1);Trainning=setdiff(dataPCA,Test,'rows');TrainningData=Trainning(:,2:end);TrainningLabel=Trainning(:,1);Accuracy=cat(1,Accuracy,CalcAccuracy(TestData,TestLabel,TrainningData,TrainningLabel));
end
AccuracyPCA=mean(Accuracy,1);
BarData=[AccuracyKNN;AccuracyPCA];
bar(1:2:51,BarData');[D,I]=sort(AccuracyKNN,'descend');
D(1)
I(1)
[D,I]=sort(AccuracyPCA,'descend');
D(1)
I(1)%pre-processing data
%Normalization
labs1={'1)Alcohol','(2)Malic acid','3)Ash','4)Alcalinity of ash'};
labs2={'5)Magnesium','6)Total phenols','7)Flavanoids','8)Nonflavanoid phenols'};
labs3={'9)Proanthocyanins','10)Color intensity','11)Hue','12)OD280/OD315','13)Proline'};
uniData=[];
for i=2:size(data,2)uniData=cat(2,uniData,(data(:,i)-min(data(:,i)))/(max(data(:,i))-min(data(:,i))));
end
figure();
parallelcoords(uniData(:,1:4),'group',data(:,1),'labels',labs1);
figure();
parallelcoords(uniData(:,5:8),'group',data(:,1),'labels',labs2);
figure();
parallelcoords(uniData(:,9:13),'group',data(:,1),'labels',labs3);%denoising%Normalization && Feature Selection
uniData=[data(:,1),uniData];
%Normalization all featurefor i=1:5Test=uniData(i:5:end,:);TestData=Test(:,2:end);TestLabel=Test(:,1);Trainning=setdiff(uniData,Test,'rows');TrainningData=Trainning(:,2:end);TrainningLabel=Trainning(:,1);Accuracy=cat(1,Accuracy,CalcAccuracy(TestData,TestLabel,TrainningData,TrainningLabel));
end
AccuracyNorm=mean(Accuracy,1);%KNN PCA Normalization
BarData=[AccuracyKNN;AccuracyPCA;AccuracyNorm];
bar(1:2:51,BarData');%Normalization& FS 1 2 5 6 7 10 we select 1 2 5 6 7 10 feature
FSData=uniData(:,[1 2 3 6 7 8 11]);
size(FSData)
for i=1:5Test=FSData(i:5:end,:);Trainning=setdiff(FSData,Test,'rows');TestData=Test(:,2:end);TestLabel=Test(:,1);TrainningData=Trainning(:,2:end);TrainningLabel=Trainning(:,1);Accuracy=cat(1,Accuracy,CalcAccuracy(TestData,TestLabel,TrainningData,TrainningLabel));
end
AccuracyNormFS1=mean(Accuracy,1);%Normalization& FS 1 6 7
FSData=uniData(:,[1 2 7 8]);
for i=1:5Test=FSData(i:5:end,:);Trainning=setdiff(FSData,Test,'rows');TestData=Test(:,2:end);TestLabel=Test(:,1); TrainningData=Trainning(:,2:end);TrainningLabel=Trainning(:,1);Accuracy=cat(1,Accuracy,CalcAccuracy(TestData,TestLabel,TrainningData,TrainningLabel));
end
AccuracyNormFS2=mean(Accuracy,1);
figure();
BarData=[AccuracyNorm;AccuracyNormFS1;AccuracyNormFS2];
bar(1:2:51,BarData');[D,I]=sort(AccuracyNorm,'descend');
D(1)
I(1)
[D,I]=sort(AccuracyNormFS1,'descend');
D(1)
I(1)
[D,I]=sort(AccuracyNormFS2,'descend');
D(1)
I(1)
%denoiding
%Normalization& FS 1 6 7
FSData=uniData(:,[1 2 7 8]);
for i=1:5Test=FSData(i:5:end,:);Trainning=setdiff(FSData,Test,'rows');Trainning=DataDenoising(Trainning,2);TestData=Test(:,2:end);TestLabel=Test(:,1);     TrainningData=Trainning(:,2:end);TrainningLabel=Trainning(:,1);Accuracy=cat(1,Accuracy,CalcAccuracy(TestData,TestLabel,TrainningData,TrainningLabel));
end
AccuracyNormFSDN=mean(Accuracy,1);
figure();
hold on
plot(1:2:51,AccuracyNormFSDN);
plot(1:2:51,AccuracyNormFS2,'r');%other distance metricsDist='cityblock';
for i=1:5Test=uniData(i:5:end,:);TestData=Test(:,2:end);TestLabel=Test(:,1);Trainning=setdiff(uniData,Test,'rows');TrainningData=Trainning(:,2:end);TrainningLabel=Trainning(:,1);Accuracy=cat(1,Accuracy,CalcAccuracyPlus(TestData,TestLabel,TrainningData,TrainningLabel,Dist));
end
AccuracyNormCity=mean(Accuracy,1);BarData=[AccuracyNorm;AccuracyNormCity];
figure();
bar(1:2:51,BarData');[D,I]=sort(AccuracyNormCity,'descend');
D(1)
I(1)%denoising
FSData=uniData(:,[1 2 7 8]);
Dist='cityblock';
for i=1:5Test=FSData(i:5:end,:);TestData=Test(:,2:end);TestLabel=Test(:,1);Trainning=setdiff(FSData,Test,'rows');Trainning=DataDenoising(Trainning,3);TrainningData=Trainning(:,2:end);TrainningLabel=Trainning(:,1);Accuracy=cat(1,Accuracy,CalcAccuracyPlus(TestData,TestLabel,TrainningData,TrainningLabel,Dist));
end
AccuracyNormCityDN=mean(Accuracy,1);
figure();
hold on
plot(1:2:51,AccuracyNormCityDN);
plot(1:2:51,AccuracyNormCity,'r');%call lledata=load('wine.data.txt');
uniData=[];
for i=2:size(data,2)uniData=cat(2,uniData,(data(:,i)-min(data(:,i)))/(max(data(:,i))-min(data(:,i))));
end
uniData=[data(:,1),uniData];
LLEData=lle(uniData(:,2:end)',5,2);
%size(LLEData)
LLEData=LLEData';
LLEData=[data(:,1),LLEData];Accuracy=[];
for i=1:5Test=LLEData(i:5:end,:);TestData=Test(:,2:end);TestLabel=Test(:,1);Trainning=setdiff(LLEData,Test,'rows');Trainning=DataDenoising(Trainning,2);TrainningData=Trainning(:,2:end);TrainningLabel=Trainning(:,1);Accuracy=cat(1,Accuracy,CalcAccuracyPlus(TestData,TestLabel,TrainningData,TrainningLabel,'cityblock'));
end
AccuracyLLE=mean(Accuracy,1);
[D,I]=sort(AccuracyLLE,'descend');
D(1)
I(1)BarData=[AccuracyNorm;AccuracyNormFS2;AccuracyNormFSDN;AccuracyLLE];
figure();
bar(1:2:51,BarData');save('ProcessingData.mat');

CalcAccuracy.m

function Accuracy=CalcAccuracy(TestData,TestLabel,TrainningData,TrainningLabel)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%calculate the accuracy of classify
%TestData:M*D matrix D stand for dimension,M is sample
%TrainningData:T*D matrix
%TestLabel:Label of TestData
%TrainningLabel:Label of Trainning Data
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CompareResult=[];
for k=1:2:51ClassResult=knnclassify(TestData,TrainningData,TrainningLabel,k);CompareResult=cat(2,CompareResult,(ClassResult==TestLabel));
end
SumCompareResult=sum(CompareResult,1);
Accuracy=SumCompareResult/length(CompareResult(:,1));

CalcAccuracyPlus.m

function Accuracy=CalcAccuracyPlus(TestData,TestLabel,TrainningData,TrainningLabel,Dist)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%just as CalcAccuracy,but add distance metrics
%calculate the accuracy of classify
%TestData:M*D matrix D stand for dimension,M is sample
%TrainningData:T*D matrix
%TestLabel:Label of TestData
%TrainningLabel:Label of Trainning Data
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CompareResult=[];
for k=1:2:51ClassResult=knnclassify(TestData,TrainningData,TrainningLabel,k,Dist);CompareResult=cat(2,CompareResult,(ClassResult==TestLabel));
end
SumCompareResult=sum(CompareResult,1);
Accuracy=SumCompareResult/length(CompareResult(:,1));

转载于:https://www.cnblogs.com/pangblog/p/3402651.html

【StatLearn】统计学习中knn算法实验(2)相关推荐

  1. 机器学习与深度学习——通过knn算法分类鸢尾花数据集iris求出错误率并进行可视化

    什么是knn算法? KNN算法是一种基于实例的机器学习算法,其全称为K-最近邻算法(K-Nearest Neighbors Algorithm).它是一种简单但非常有效的分类和回归算法. 该算法的基本 ...

  2. Machine Learning In Action 第二章学习笔记: kNN算法

    本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数 ...

  3. 深度学习中的算法学习与记忆,利用故事联想帮助大家记忆,每个人都会

    大家好,我是微学AI,大家看过我的文章,想必是对深度学习有了一定的了解了,但是对于初学者来说,深度学习中有很多名词和数学知识.原理还是不太清楚,记忆的不牢固,用起来不熟练,今天就给大家讲一个故事,让大 ...

  4. 一句话简单总结李航统计学习法各算法

    K近邻: 选取样本集合中K个距离最近的数据中出现次数最多的分类,作为新数据的分类 native  bayes :利用训练数据计算类的先验概率P(Y)和特征向量对应每一类的条件概率P(X|Y),计算联合 ...

  5. 【机器学习算法专题(蓄力计划)】十二、机器学习中KNN算法

    文章目录 原理 基本步骤 算法关键点 K值的选择 距离的选择 决策原则 距离度量的实现方法 蛮力实现 KD 树 算法优缺点 优点 缺点 sklearn用法 应用举例 源码实现 K近邻法(KNN)是一种 ...

  6. 统计学习中感知机的C++代码

    感知机是古老的统计学习方法,主要应用于二类线性可分数据,策略是在给定的超平面上对误差点进行纠正,从而保证所有的点都是正确可分的. 用到的方法是随机梯度下降法,由于是线性可分的,可保证最终在有限步内收敛 ...

  7. 深度学习中的消融实验指的是什么?

    什么是消融实验: 当作者提出了一种新的方案时,这个方案同时改变了多个条件/参数,那么在消融实验中,作者会一一控制一个条件/参数不变,来看看结果,到底是哪个条件/参数对结果的影响更大. 举例:在目标检测 ...

  8. 基于KNN算法的少量数据分类实验

    一.实验目的 利用knn分类算法来对汽车碰撞声以及汽车鸣笛声进行识别,本次实验使用的声学特征是37维mfcc特征,其中包括前12维倒谱系数.12维一阶差分系数.12维二阶差分系数以及1维短时信号能量谱 ...

  9. 统计学习导论(ISLR)(五):重采样方法(交叉验证和bootstrap)

    统计学习导论(ISLR) 小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生. 参考资料: The Elements of Statistical Learning An Introdu ...

最新文章

  1. php自动分配,PHP上传文件时自动分配路径的方法_php技巧
  2. 数据结构与算法之花费铜板最小和利润最大题目
  3. c语言的报告一,C语言实验报告(一).doc
  4. Fail-fast 和 Fail-safe 机制
  5. Ext 介绍入门之 Templates(模板)
  6. java set collection_Java的Collection接口和Set接口?
  7. 关于打开NVIDIA控制面板闪退问题
  8. 创建google账号收费_谷歌GMS认证收费标准
  9. 怎样修改电脑时间同步北京时间
  10. win10 安装pytorch gpu 及 解决报错“OSError: [WinError 126] 找不到指定的模块
  11. nstrFetchProhibited,stack overflow,Task watchdog got triggered解决办法
  12. webflux之reactor-Publisher
  13. 从URDF到KDL(C++Python)
  14. 洛谷——P2706 巧克力
  15. 利用python爬取教务系统中成绩
  16. “80后”!顶尖985,迎新副校长!
  17. Powerdesinger使用心得
  18. 主要视频压缩技术在中国内地市场发展分析
  19. 遭遇“windows已经阻止此软件因为无法验证发行者”
  20. GD32F103C读写flash

热门文章

  1. 海报推广神器:活码加多级加密跳转防封双重保护
  2. Docker(swarm mode)在一段时间不用后无法启动
  3. 我理解的--java观察者模式
  4. iOS Ruby出现问题,导致无法安装Pod
  5. CCNP自学之路——eigrp--1
  6. DPM 2007升级到SP1的方法
  7. ASP.NET基础教程-SqlConnection对象-使用连接事件
  8. 黑马lavarel教程---7、文件上传
  9. [转]iis部署php项目
  10. Smali插桩打日志