資源簡介
通過knn算法,實現WiFi室內定位在matlab環境下的仿真

代碼片段和文件信息
function?result?=?knn(trainX?testY?zuobiaoZ?k)
%?Classify?using?the?Nearest?neighbor?algorithm
%?Inputs:
%? trainX ???????-?Train?sample?matrix?n*d?n?points?each?d?dimentions
%???testY??????????-?Test?sample?matrix??N*d??測試樣本矩陣
% k ???????-?Number?of?nearest?neighbors?
%?Outputs:
% result ???????-?定位點坐標
%??判斷trainX和testY的樣本點維數是否相同???
trainX?=[34?35?38?40?45?60?62?67;36?34?40?36?42?67?40?65;62?40?48?36?47?67?34?62;38?36?40?45?52?65?70?65;?67?42?50?35?36?70?37?64]
testY?=?[38?36?39?41?46?61?64?67;70?38?40?55?50?60?55?40;76?33?56?78?40?52?62?35;76?35?23?61?76?35?57?62;87?62?34?47?36?82?21?63];
zuobiaoZ?=?[0.0?3.0;1.5?3.0;?3.0?3.0;0.0?1.5;3.01.5];
k?=3;
zhunqueZ?=?[0.3?3.0;1.8?1.8;2.0?1.7;0.8?2.9;3.0?2.2]??????????????????????????????%??待定位點的準確坐標
if?size(trainX2)?~=?size(testY2)??????????????????????????????????????
????error?(‘trainX?and?testZ?must?have?same?column?dimensions?!‘)?????????%??維數d應該相同?在同一個點搜集到的WiFi熱點個數相同
end???
%??判斷k近鄰是否可取
n?=?size(trainX1);???????????????????????????????????????????????????????%??測試樣本點個數???參考點的個數必須大于k的個數
if?(?n????error(‘You?specified?more?neighbors?than?existed?points.‘)
end???????????????????????????????????????????????????????????????????????%??選擇的近鄰數不大于樣本點數
???????????????????????????????
N???????????????????=?size(testY?1);?????????????????????????????????????%??testZ的行數,即測試集的樣本點數
??????????????????????????????????????????????????????????????????????????%???初始化result矩陣N*1列向量標出testZ的類別
%??按照所選的度量距離,對testY的N個點逐個進行k近鄰分類?
????????????????????????????????????????????????????????
????for?i?=?1:N?
????????dist????????????=?sum((trainX?-?ones(n1)*testY(i:)).^22);??????%??dist?表示第i個測試點分別與n個訓練樣本點之間的歐式距離的平方?按行進行求和?dist是個矩陣
????????[m?indices]????=?sort(dist);?????????????????????????????????????%??按列進行升序排列???
????????histclass???????=?zuobiaoZ([indices(1:k)]:?);????????????????????%??取前k個最短距離對應的點所屬的類別,求出k個臨近點的坐標
????????gd??????????????=?sum(histclass);?????????????????????????????????%??k個臨近點的坐標相加?
????????result(i:)?????=gd/k;????????????????????????????????????????????%??求得定位點的坐標
????????x(i)????????????=result(i1);
????????y(i)????????????=result(i2);
????????x1(i)???????????=zhunqueZ(i1);
????????y1(i)???????????=zhunqueZ(i2);
????????
????end
???plot(xy‘square‘‘MarkerSize‘7);
???hold?on;
???plot(x1y1‘*‘‘MarkerSize‘7);
???????axis([0?3?0?3]);
set(gca‘xtick‘[0:0.2:3]‘ytick‘[0:0.2:3])
????
????
end
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2735??2014-04-17?13:54??knn1.m
-----------?---------??----------?-----??----
?????????????????2735????????????????????1
- 上一篇:云計算,matlab
- 下一篇:廣義預測控制Matlab程序
評論
共有 條評論