%#
%# AIM:用
% # K最近鄰法
%#
%#原理:KNN是壹種監督的、確定的、非參數的
%#分類方法。它使用多數規則來
%#將新對象分配給壹個類。
%#假設每個類中的對象數量
%#也差不多。
%#沒有關於數據分布的假設
%#每個類的方差-協方差矩陣。
%#在下列情況下,變量的數量沒有限制
%#使用歐幾裏德距離。
%#但是,當使用相關系數時
%#變量數必須大於1。
%#參考:Massart D. L .,Vandeginste B. G. M .,Deming S. N .
% # Michotte Y .和Kaufman L .,化學計量學:教科書,
%#第23章,395-397頁,愛思唯爾科學出版社B. V .,
%#阿姆斯特丹1988。
%#
% # INPUT:x:(mxn)m個對象n個變量的數據矩陣,
%#包含幾個類別的樣本(訓練集)
% # group:(MX 1)標記來自
%#訓練集
% # K:整數,最近鄰居的數量
% # dist:整數,
% # = 1,歐幾裏德距離
% # = 2,相關系數,(變量數& gt1)
% # XT:(mtxn)包含mt個對象和n個變量的數據矩陣
%#(測試集或未知)
% # groupt:(MTX 1)標記mt對象的列向量
%#測試集
% #-& gt;如果新對象未知,輸入[]。
%#
%#輸出:ccr:標量,正確分類率
% # pgroupt:行向量,測試集的預測類標簽
% # 0表示該對象不屬於任何類別
%#類
%#
%#子例程:sortlab.m:將組標簽向量分類
%#
%#作者:武文
% # chemo AC的版權所有(c) 1997
% # FABI,布魯塞爾自由大學
% # Laarbeeklaan 103 1090 Jette
%#
%#版本:1.1(28/02/1998)
%#
%#測試:安德裏亞·坎多爾菲
%#
function [ccr,pgroupt]=knnt(x,group,K,dist,xt,groupt);
如果nargin==5,groupt =[];未知對象的結束百分比
距離= dist清除距離百分比變化變量
if size(group,1)>1,
group = group ';%將列向量更改為行向量
groupt = groupt ';%將列向量更改為行向量
結束;
[m,n]=大小(x);定型集大小的百分比
如果距離= = 2 & ampn & lt2,錯誤('變量數必須& gt1 ')、end %來檢查使用相關系數時變量的數量
[mt,n]= size(XT);測試集大小的百分比
dis =零(mt,m);距離的初始值百分比(零矩陣)
%計算每個測試集對象的距離
對於i=1:mt
對於每個訓練集對象和每個測試集對象之間的j = 1:m %
如果距離==1
dis(i,j)=(xt(i,:)-x(j,:)*(xt(i,:)-x(j,:)';%歐幾裏德距離
其他
r=corrcoef(xt(i,:)',x(j,:);%相關系數矩陣
r=r(1,2);%相關系數
dis(i,j)= 1-r * r;% 1 -相關系數的冪
結束
結束
結束
找到最近鄰居的百分比
lab=zeros(1,mt);實驗室初始值的百分比
對於每個測試對象,I = 1:mt %
[a,b]=sort(dis(i,);%排序距離
b=b(查找(a & lt= a(K)));%查找最近鄰索引
b =組(b);%最近鄰對象
[ng,l group]= sort lab(b);%計算最近鄰中每個類的對象數量
a = find(ng = = max(ng));%查找具有最大數量對象的類
如果長度(a)= = 1%只有壹個類
lab(I)= lgroup(a);%類別標簽
其他
lab(I)= 0;%不止壹個類
結束
結束
%計算成功率
if ~isempty(groupt)
dif = groupt-lab;預測類別標簽和已知類別標簽之間的百分比差異
CCR = sum(dif = = 0)/mt;成功率百分比
結束
pgroupt = lab%輸出向量