資源簡介
本程序中,訓練樣本集含有30個樣本,矢量長度為5,對樣本{1,18,11,11,0.5513196}進行K=5的K-最近鄰分類.
樣本從文件data.txt中讀取,程序運行結果顯示所有樣本以及其類別,待分類樣本所屬的類別({1,18,11,11,0.5513196}屬于"2"類),以及它的5個最近鄰的類別和與它之間的距離。

代碼片段和文件信息
#include?
#include?
#include?
#define??NATTRS?5?//number?of?attributes
#define??MAXSZ??1700?//max?size?of?training?set
#define??MAXVALUE??10000.0?//the?biggest?attribute‘s?value?is?below?10000(int)
#define??K??5???
struct?vector?{
double?attributes[NATTRS];
double?classlabel;
};
struct?item?{
double?distance;
double?classlabel;
};
struct?vector?trSet[MAXSZ];//global?variablethe?training?set
struct?item?knn[K];//global?variablethe?k-neareast-neighbour?set
int?curTSize?=?0;?//current?size?of?the?training?set
int?AddtoTSet(struct?vector?v)
{
if(curTSize>=MAXSZ)?{
cout< return?0;
}
trSet[curTSize]?=?v;
curTSize++;
return?1;
}
double?Distance(struct?vector?v1struct?vector?v2)
{
double?d?=?0.0;
double?tem?=?0.0;
for(int?i?=?0;i? tem?+=?(v1.attributes[i]-v2.attributes[i])*(v1.attributes[i]-v2.attributes[i]);
d?=?sqrt(tem);
return?d;
}
int?max(struct?item?knn[])?//return?the?no.?of?the?item?which?has?biggest?distance(
???????????????????????????//should?be?replaced)?
{
int?maxNo?=?0;
if(K?>?1)
for(int?i?=?1;i? if(knn[i].distance>knn[maxNo].distance)
maxNo?=?i;
????return?maxNo;
}
double?Classify(struct?vector?v)//decide?which?class?label?will?be?assigned?to
?????????????????????????????//a?given?input?vetor?with?the?knn?method
{
double?dd?=?0;
int?maxn?=?0;
int?freq[K];
double?mfreqC?=?0;//the?class?label?appears?most?frequently?
int?i;
for(i?=?0;i? knn[i].distance?=?MAXVALUE;
for(i?=?0;i? {
dd?=?Distance(trSet[i]v);
maxn?=?max(knn);//for?every?new?state?of?the?training?set?should?update?maxn
if(dd? knn[maxn].distance?=?dd;
knn[maxn].classlabel?=?trSet[i].classlabel;
????????????}
}
for(i?=?0;i? freq[i]?=?1;
for(i?=?0;i? for(int?j?=?0;j? if((i!=j)&&(knn[i].classlabel?==?knn[j].classlabel))
freq[i]+=1;
for(i?=?0;i? cout<<“freq:“<
int?mfreq?=?1;
mfreqC?=?knn[0].classlabel;
for(i?=?0;i? if(freq[i]?>?mfreq)??{
mfreq?=?freq[i];//mfreq?represents?the?most?frepuences
? mfreqC?=?knn[i].classlabel;?//mfreqNo?is?the?item?no.?with?the?most?frequent
?????????????????????????????//classlabel
}
return?mfreqC;
}
void?main()
{???
double?classlabel;
double?c;?
double?n;
struct?vector?trExmp;
int?i;
ifstream?filein(“E:\\knn\\data.txt“);
if(filein.fail()){cout<<“Can‘t?open?data.txt“< while(!filein.eof())?
{
filein>>c;
trExmp.classlabel?=?c;
cout<<“lable:“<
for(int?i?=?0;i? {
filein>>n;
trExmp.attributes[i]?=?n;
cout< }
cout< ?if(!AddtoTSet(trExmp))
break;
}
filein.cl
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????497??2006-10-26?02:13??K-最近鄰分類\data.txt
?????文件???????3264??2009-08-13?13:46??K-最近鄰分類\knn\classify.cpp
?????文件???????3425??2004-04-27?22:40??K-最近鄰分類\knn\classify.dsp
?????文件????????541??2004-04-27?22:41??K-最近鄰分類\knn\classify.dsw
?????文件??????50176??2009-08-13?13:49??K-最近鄰分類\knn\classify.ncb
?????文件??????48640??2009-08-13?13:49??K-最近鄰分類\knn\classify.opt
?????文件????????250??2009-08-13?13:49??K-最近鄰分類\knn\classify.plg
?????文件?????249937??2009-08-13?13:46??K-最近鄰分類\knn\Debug\classify.exe
?????文件?????310452??2009-08-13?13:46??K-最近鄰分類\knn\Debug\classify.ilk
?????文件??????14658??2009-08-13?13:46??K-最近鄰分類\knn\Debug\classify.obj
?????文件?????281688??2009-08-13?13:09??K-最近鄰分類\knn\Debug\classify.pch
?????文件?????574464??2009-08-13?13:46??K-最近鄰分類\knn\Debug\classify.pdb
?????文件??????50176??2009-08-13?13:49??K-最近鄰分類\knn\Debug\vc60.idb
?????文件??????61440??2009-08-13?13:46??K-最近鄰分類\knn\Debug\vc60.pdb
?????文件???????4350??2006-10-26?02:35??K-最近鄰分類\knn\Myknn.dsp
?????文件????????535??2004-04-25?23:27??K-最近鄰分類\knn\Myknn.dsw
?????文件??????50176??2006-10-26?11:28??K-最近鄰分類\knn\Myknn.ncb
?????文件??????48640??2006-10-26?11:28??K-最近鄰分類\knn\Myknn.opt
?????文件???????1377??2006-10-26?11:27??K-最近鄰分類\knn\Myknn.plg
?????文件?????????17??2004-04-25?18:45??K-最近鄰分類\knn\Output.dat
?????文件????????339??2006-10-26?11:20??K-最近鄰分類\KNN程序的說明.txt
?????文件????????634??2006-10-26?11:22??K-最近鄰分類\輸出結果.txt
?????目錄??????????0??2009-08-20?21:08??K-最近鄰分類\knn\Debug
?????目錄??????????0??2009-08-20?21:08??K-最近鄰分類\knn
?????目錄??????????0??2009-08-20?21:08??K-最近鄰分類
-----------?---------??----------?-----??----
??????????????1755676????????????????????25
- 上一篇:forms2.0.exe
- 下一篇:大數據培訓視頻教程.zip
評論
共有 條評論