✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
⛄ 内容介绍
KNN(k Nearest Neighbor)算法是1种简单、有效、非参数的文本分类法,但缺点是样本相似度的计算量大,故不适用于有大量高维样本的文本。一方面,本文分析了KNN算法的优点和缺陷,采用了1种应用特征词提取和特征词聚合的方法来改进KNN算法在特征词提取方面的不足。另一方面,本文又深入研究了模拟退火算法思想,采用退火模拟思想的典型优化组方法和模拟退火算法原理来加快KNN算法的分类速度。最后,通过2种方法的加入改进了KNN分类算法。实验结果表明,本文提出的方法大大提高了分类算法的效率和性能。
⛄ 部分代码
load lymphography
%%
% preprocess data to remove Nan entries
for ii=1:size(Tdata,2)
nanindex=isnan(Tdata(:,ii));
Tdata(nanindex,:)=[];
end
labels=Tdata(:,end); %classes
attributesData=Tdata(:,1:end-1); %wine data
% for ii=1:size(attributesData,2) %normalize the data
% attributesData(:,ii)=normalize(attributesData(:,ii));
% end
[rows,colms]=size(attributesData); %size of data
%% seprate the data into training and testing
[trainIdx,~,testIdx]=dividerand(rows,0.8,0,0.2);
trainData=attributesData(trainIdx,:); %training data
testData=attributesData(testIdx,:); %testing data
trainlabel=labels(trainIdx); %training labels
testlabel=labels(testIdx); %testing labels
%% KNN classification
Mdl = fitcknn(trainData,trainlabel,'NumNeighbors',5,'Standardize',1);
predictedLables_KNN=predict(Mdl,testData);
cp=classperf(testlabel,predictedLables_KNN);
err=cp.ErrorRate;
accuracy=cp.CorrectRate;
%% SA optimisation for feature selection
dim=size(attributesData,2);
lb=0;ub=1;
x0=round(rand(1,dim));
fun=@(x) objfun(x,trainData,testData,trainlabel,testlabel,dim);
options = optimoptions(@simulannealbnd,'MaxIterations',150,...
'PlotFcn','saplotbestf');
[x,fval,exitflag,output] = simulannealbnd(fun,x0,zeros(1,dim),ones(1,dim),options) ;
Target_pos_SA=round(x);
% final evaluation for GOA tuned selected features
[error_SA,accuracy_SA,predictedLables_SA]=finalEval(Target_pos_SA,trainData,testData,...
trainlabel,testlabel);
⛄ 运行结果
⛄ 参考文献
[1]邓箴, 包宏. 用模拟退火改进的KNN分类算法[J]. 计算机与应用化学, 2010(3):5.2019), In press.