K-最臨近分類算法_第1頁
K-最臨近分類算法_第2頁
K-最臨近分類算法_第3頁
K-最臨近分類算法_第4頁
K-最臨近分類算法_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、數(shù)據(jù)挖掘?qū)嶒瀳蟾鍷-最臨近分類算法學(xué)號:311062202 姓名:汪文娟一、 數(shù)據(jù)源說明1.數(shù)據(jù)理解選擇第二包數(shù)據(jù)Iris Data Set,共有150組數(shù)據(jù),考慮到訓(xùn)練數(shù)據(jù)集的隨機性和多樣性,選擇rowNo模3不等于0的100組作為訓(xùn)練數(shù)據(jù)集,剩下的50組做測試數(shù)據(jù)集。(1) 每組數(shù)據(jù)有5個屬性,分別是:1. sepal length in cm 2. sepal wrowNoth in cm 3. petal length in cm 4. petal wrowNoth in cm 5. class: - Iris Setosa - Iris Versicolour - Iris Virg

2、inica(2) 為了操作方便,對各組數(shù)據(jù)添加rowNo屬性,且第一組rowNo=1。2.數(shù)據(jù)清理現(xiàn)實世界的數(shù)據(jù)一般是不完整的、有噪聲的和不一致的。數(shù)據(jù)清理例程試圖填充缺失的值,光滑噪聲并識別離群點,并糾正數(shù)據(jù)中的不一致。a) 缺失值:當(dāng)數(shù)據(jù)中存在缺失值是,忽略該元組(注意:本文選用的第二組數(shù)據(jù)Iris Data Set的Missing Attribute Values: None)。b) 噪聲數(shù)據(jù):本文暫沒考慮。二、 K-最臨近分類算法KNN(k Nearest Neighbors)算法又叫k最臨近方法,假設(shè)每一個類包含多個樣本數(shù)據(jù),而且每個數(shù)據(jù)都有一個唯一的類標(biāo)記表示這些樣本是屬于哪一個分

3、類, KNN就是計算每個樣本數(shù)據(jù)到待分類數(shù)據(jù)的距離,如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)的樣本中的大多數(shù)屬于某一個類別,則該樣本也屬于這個類別。該方法在定類決策上只依據(jù)最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。 KNN方法雖然從原理上也依賴于極限定理,但在類別決策時,只與極少量的相鄰樣本有關(guān)。因此,采用這種方法可以較好地避免樣本的不平衡問題。另外,由于KNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對于類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更為適合。 該方法的不足之處是計算量較大,因為對每一個待分類的文本

4、都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰點。目前常用的解決方法是事先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本。該算法比較適用于樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域采用這種算法比較容易產(chǎn)生誤分。(1)算法思路:K-最臨近分類方法存放所有的訓(xùn)練樣本,在接受待分類的新樣本之前不需構(gòu)造模型,并且直到新的(未標(biāo)記的)樣本需要分類時才建立分類。K-最臨近分類基于類比學(xué)習(xí),其訓(xùn)練樣本由N維數(shù)值屬性描述,每個樣本代表N維空間的一個點。這樣,所有訓(xùn)練樣本都存放在N維模式空間中。給定一個未知樣本,k-最臨近分類法搜索模式空間,找出最接近未知樣本的K個訓(xùn)練樣本。這K個訓(xùn)練

5、樣本是未知樣本的K個“近鄰”?!芭R近性”又稱為相異度(Dissimilarity),由歐幾里德距離定義,其中兩個點 X(x1,x2,xn)和Y(y1,y2,yn)的歐幾里德距離是:未知樣本被分配到K個最臨近者中最公共的類。在最簡單的情況下,也就是當(dāng)K=1時,未知樣本被指定到模式空間中與之最臨近的訓(xùn)練樣本的類。(2)算法步驟:step.1-初始化距離為最大值step.2-計算未知樣本和每個訓(xùn)練樣本的距離diststep.3-得到目前K個最臨近樣本中的最大距離maxdiststep.4-如果dist小于maxdist,則將該訓(xùn)練樣本作為K-最近鄰樣本step.5-重復(fù)步驟2、3、4,直到未知樣本和

6、所有訓(xùn)練樣本的距離都算完step.6-統(tǒng)計K-最近鄰樣本中每個類標(biāo)號出現(xiàn)的次數(shù)step.7-選擇出現(xiàn)頻率最大的類標(biāo)號作為未知樣本的類標(biāo)號三、 算法源代碼/ KNN.cpp K-最近鄰分類算法/#include #include #include #include #include #include #include / 宏定義/#define ATTR_NUM 4 /屬性數(shù)目#define MAX_SIZE_OF_TRAINING_SET 1000 /訓(xùn)練數(shù)據(jù)集的最大大小#define MAX_SIZE_OF_TEST_SET 100 /測試數(shù)據(jù)集的最大大小#define MAX_VALUE

7、10000.0 /屬性最大值#define K 7/結(jié)構(gòu)體struct dataVector int ID; /ID號char classLabel15; /分類標(biāo)號double attributesATTR_NUM; /屬性;struct distanceStruct int ID; /ID號double distance; /距離char classLabel15; /分類標(biāo)號;/ 全局變量/struct dataVector gTrainingSetMAX_SIZE_OF_TRAINING_SET; /訓(xùn)練數(shù)據(jù)集struct dataVector gTestSetMAX_SIZE_OF_

8、TEST_SET; /測試數(shù)據(jù)集struct distanceStruct gNearestDistanceK; /K個最近鄰距離int curTrainingSetSize=0; /訓(xùn)練數(shù)據(jù)集的大小int curTestSetSize=0; /測試數(shù)據(jù)集的大小/ 求 vector1=(x1,x2,.,xn)和vector2=(y1,y2,.,yn)的歐幾里德距離/double Distance(struct dataVector vector1,struct dataVector vector2)double dist,sum=0.0;for(int i=0;iATTR_NUM;i+)sum

9、+=(vector1.attributesi-vector2.attributesi)*(vector1.attributesi-vector2.attributesi);dist=sqrt(sum);return dist;/ 得到gNearestDistance中的最大距離,返回下標(biāo)/int GetMaxDistance()int maxNo=0;for(int i=1;igNearestDistancemaxNo.distance)maxNo = i; return maxNo;/ 對未知樣本Sample分類/char* Classify(struct dataVector Sample

10、)double dist=0;int maxid=0,freqK,i,tmpfreq=1;char *curClassLable=gNearestDistance0.classLabel;memset(freq,1,sizeof(freq);/step.1-初始化距離為最大值for(i=0;iK;i+)gNearestDistancei.distance=MAX_VALUE;/step.2-計算K-最近鄰距離for(i=0;icurTrainingSetSize;i+)/step.2.1-計算未知樣本和每個訓(xùn)練樣本的距離dist=Distance(gTrainingSeti,Sample);/

11、step.2.2-得到gNearestDistance中的最大距離maxid=GetMaxDistance();/step.2.3-如果距離小于gNearestDistance中的最大距離,則將該樣本作為K-最近鄰樣本if(distgNearestDistancemaxid.distance) gNearestDistancemaxid.ID=gTrainingSeti.ID;gNearestDistancemaxid.distance=dist;strcpy(gNearestDistancemaxid.classLabel,gTrainingSeti.classLabel);/step.3-

12、統(tǒng)計每個類出現(xiàn)的次數(shù)for(i=0;iK;i+) for(int j=0;jK;j+)if(i!=j)&(strcmp(gNearestDistancei.classLabel,gNearestDistancej.classLabel)=0)freqi+=1;/step.4-選擇出現(xiàn)頻率最大的類標(biāo)號for(i=0;itmpfreq) tmpfreq=freqi; curClassLable=gNearestDistancei.classLabel;return curClassLable;/ 主函數(shù)/void main() char c; char *classLabel=;int i,j,

13、rowNo=0,TruePositive=0,FalsePositive=0;ifstream filein(iris.data);FILE *fp;if(filein.fail()coutCant open data.txt=MAX_SIZE_OF_TRAINING_SET) coutThe training set has MAX_SIZE_OF_TRAINING_SET examples!endlendl; break ;/rowNo%3!=0的100組數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)集if(rowNo%3!=0)gTrainingSetcurTrainingSetSize.ID=rowNo;for(i

14、nt i = 0;i gTrainingSetcurTrainingSetSize.attributesi;fileinc;fileingTrainingSetcurTrainingSetSize.classLabel;curTrainingSetSize+;/剩下rowNo%3=0的50組做測試數(shù)據(jù)集else if(rowNo%3=0)gTestSetcurTestSetSize.ID=rowNo;for(int i = 0;i gTestSetcurTestSetSize.attributesi;fileinc;fileingTestSetcurTestSetSize.classLabel

15、;curTestSetSize+;filein.close();/step.2-KNN算法進行分類,并將結(jié)果寫到文件iris_OutPut.txtfp=fopen(iris_OutPut.txt,w+t);/用KNN算法進行分類fprintf(fp,*程序說明*n);fprintf(fp,* 采用KNN算法對iris.data分類。為了操作方便,對各組數(shù)據(jù)添加rowNo屬性,第一組rowNo=1!n);fprintf(fp,* 共有150組數(shù)據(jù),選擇rowNo模3不等于0的100組作為訓(xùn)練數(shù)據(jù)集,剩下的50組做測試數(shù)據(jù)集n);fprintf(fp,*nn);fprintf(fp,*實驗結(jié)果*n

16、n);for(i=0;icurTestSetSize;i+) fprintf(fp,*第%d組數(shù)據(jù)*n,i+1);classLabel =Classify(gTestSeti); if(strcmp(classLabel,gTestSeti.classLabel)=0)/相等時,分類正確TruePositive+;coutrowNo:;coutgTestSeti.ID t;coutKNN分類結(jié)果: ; coutclassLabel(正確類標(biāo)號: ;coutgTestSeti.classLabel)n;fprintf(fp,rowNo: %3d t KNN分類結(jié)果: %s ( 正確類標(biāo)號: %s

17、 )n,gTestSeti.ID,classLabel,gTestSeti.classLabel);if(strcmp(classLabel,gTestSeti.classLabel)!=0)/不等時,分類錯誤/cout *分類錯誤*n;fprintf(fp, *分類錯誤*n);fprintf(fp,%d-最臨近數(shù)據(jù):n,K);for(j=0;jK;j+)/coutgNearestDistancej.IDtgNearestDistancej.distancetgNearestDistancej.classLabel15endl;fprintf(fp,rowNo: %3d t Distance:

18、 %f tClassLable: %sn,gNearestDistancej.ID,gNearestDistancej.distance,gNearestDistancej.classLabel);fprintf(fp,n); FalsePositive=curTestSetSize-TruePositive;fprintf(fp,*結(jié)果分析*n,i);fprintf(fp,TP(True positive): %dnFP(False positive): %dnaccuracy: %fn,TruePositive,FalsePositive,double(TruePositive)/(cur

19、TestSetSize-1);fclose(fp); return;四、 詳細描述該算法獲得的模型采用第二包數(shù)據(jù)Iris Data Set,共有150組數(shù)據(jù),考慮到訓(xùn)練數(shù)據(jù)集的隨機性和多樣性,選擇rowNo模3不等于0的100組作為訓(xùn)練數(shù)據(jù)集,剩下的50組做測試數(shù)據(jù)集。對未知樣本進行分類(括號里的正確類標(biāo)號是讀取的iris.data文件里的類標(biāo)號,括號外的是計算所得),本文取k=7個最鄰近數(shù)據(jù)。以第19組為例進行說明,未知樣本ROWNO為57,經(jīng)過KNN算法分類,與之最臨近的7組數(shù)據(jù)rowNo號分別為:52、86、128、139、92、64、71,其中類標(biāo)號為Iris-versicolor的有

20、5個,類標(biāo)號為Iris-virginica的有2個,Iris-versicolor為最多,因此據(jù)此估計該組樣本的類標(biāo)號為Iris-versicolor。50組測試樣本運行結(jié)果如下:*程序說明* 采用KNN算法對iris.data分類。為了操作方便,對各組數(shù)據(jù)添加rowNo屬性,第一組rowNo=1!* 共有150組數(shù)據(jù),選擇rowNo模3不等于0的100組作為訓(xùn)練數(shù)據(jù)集,剩下的50組做測試數(shù)據(jù)集*實驗結(jié)果*第1組數(shù)據(jù)*rowNo: 3 KNN分類結(jié)果: Iris-setosa ( 正確類標(biāo)號: Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 43 Distance: 0.300000

21、ClassLable: Iris-setosarowNo: 2 Distance: 0.300000 ClassLable: Iris-setosarowNo: 4 Distance: 0.244949 ClassLable: Iris-setosarowNo: 13 Distance: 0.264575 ClassLable: Iris-setosarowNo: 7 Distance: 0.264575 ClassLable: Iris-setosarowNo: 46 Distance: 0.264575 ClassLable: Iris-setosarowNo: 10 Distance:

22、0.316228 ClassLable: Iris-setosa*第2組數(shù)據(jù)*rowNo: 6 KNN分類結(jié)果: Iris-setosa ( 正確類標(biāo)號: Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 22 Distance: 0.412311 ClassLable: Iris-setosarowNo: 47 Distance: 0.387298 ClassLable: Iris-setosarowNo: 11 Distance: 0.346410 ClassLable: Iris-setosarowNo: 49 Distance: 0.360555 ClassLable: Iris

23、-setosarowNo: 19 Distance: 0.331662 ClassLable: Iris-setosarowNo: 20 Distance: 0.387298 ClassLable: Iris-setosarowNo: 17 Distance: 0.400000 ClassLable: Iris-setosa*第3組數(shù)據(jù)*rowNo: 9 KNN分類結(jié)果: Iris-setosa ( 正確類標(biāo)號: Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 14 Distance: 0.346410 ClassLable: Iris-setosarowNo: 2 Distance:

24、 0.509902 ClassLable: Iris-setosarowNo: 4 Distance: 0.300000 ClassLable: Iris-setosarowNo: 13 Distance: 0.424264 ClassLable: Iris-setosarowNo: 46 Distance: 0.424264 ClassLable: Iris-setosarowNo: 31 Distance: 0.489898 ClassLable: Iris-setosarowNo: 43 Distance: 0.316228 ClassLable: Iris-setosa*第4組數(shù)據(jù)*r

25、owNo: 12 KNN分類結(jié)果: Iris-setosa ( 正確類標(biāo)號: Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 31 Distance: 0.300000 ClassLable: Iris-setosarowNo: 25 Distance: 0.300000 ClassLable: Iris-setosarowNo: 40 Distance: 0.316228 ClassLable: Iris-setosarowNo: 50 Distance: 0.300000 ClassLable: Iris-setosarowNo: 7 Distance: 0.300000 Clas

26、sLable: Iris-setosarowNo: 8 Distance: 0.223607 ClassLable: Iris-setosarowNo: 10 Distance: 0.346410 ClassLable: Iris-setosa*第5組數(shù)據(jù)*rowNo: 15 KNN分類結(jié)果: Iris-setosa ( 正確類標(biāo)號: Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 34 Distance: 0.412311 ClassLable: Iris-setosarowNo: 17 Distance: 0.469042 ClassLable: Iris-setosarowNo:

27、 11 Distance: 0.583095 ClassLable: Iris-setosarowNo: 37 Distance: 0.591608 ClassLable: Iris-setosarowNo: 16 Distance: 0.547723 ClassLable: Iris-setosarowNo: 49 Distance: 0.655744 ClassLable: Iris-setosarowNo: 19 Distance: 0.556776 ClassLable: Iris-setosa*第6組數(shù)據(jù)*rowNo: 18 KNN分類結(jié)果: Iris-setosa ( 正確類標(biāo)號:

28、 Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 1 Distance: 0.100000 ClassLable: Iris-setosarowNo: 40 Distance: 0.173205 ClassLable: Iris-setosarowNo: 29 Distance: 0.173205 ClassLable: Iris-setosarowNo: 5 Distance: 0.173205 ClassLable: Iris-setosarowNo: 41 Distance: 0.141421 ClassLable: Iris-setosarowNo: 8 Distance: 0

29、.200000 ClassLable: Iris-setosarowNo: 28 Distance: 0.173205 ClassLable: Iris-setosa*第7組數(shù)據(jù)*rowNo: 21 KNN分類結(jié)果: Iris-setosa ( 正確類標(biāo)號: Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 49 Distance: 0.374166 ClassLable: Iris-setosarowNo: 37 Distance: 0.424264 ClassLable: Iris-setosarowNo: 11 Distance: 0.360555 ClassLable: Iris

30、-setosarowNo: 29 Distance: 0.360555 ClassLable: Iris-setosarowNo: 28 Distance: 0.300000 ClassLable: Iris-setosarowNo: 40 Distance: 0.360555 ClassLable: Iris-setosarowNo: 32 Distance: 0.282843 ClassLable: Iris-setosa*第8組數(shù)據(jù)*rowNo: 24 KNN分類結(jié)果: Iris-setosa ( 正確類標(biāo)號: Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 40 Distanc

31、e: 0.374166 ClassLable: Iris-setosarowNo: 26 Distance: 0.447214 ClassLable: Iris-setosarowNo: 44 Distance: 0.264575 ClassLable: Iris-setosarowNo: 28 Distance: 0.424264 ClassLable: Iris-setosarowNo: 32 Distance: 0.387298 ClassLable: Iris-setosarowNo: 8 Distance: 0.387298 ClassLable: Iris-setosarowNo:

32、 50 Distance: 0.435890 ClassLable: Iris-setosa*第9組數(shù)據(jù)*rowNo: 27 KNN分類結(jié)果: Iris-setosa ( 正確類標(biāo)號: Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 1 Distance: 0.316228 ClassLable: Iris-setosarowNo: 50 Distance: 0.300000 ClassLable: Iris-setosarowNo: 41 Distance: 0.331662 ClassLable: Iris-setosarowNo: 44 Distance: 0.223607 Cl

33、assLable: Iris-setosarowNo: 40 Distance: 0.244949 ClassLable: Iris-setosarowNo: 8 Distance: 0.223607 ClassLable: Iris-setosarowNo: 28 Distance: 0.316228 ClassLable: Iris-setosa*第10組數(shù)據(jù)*rowNo: 30 KNN分類結(jié)果: Iris-setosa ( 正確類標(biāo)號: Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 31 Distance: 0.141421 ClassLable: Iris-setosarow

34、No: 38 Distance: 0.264575 ClassLable: Iris-setosarowNo: 4 Distance: 0.173205 ClassLable: Iris-setosarowNo: 13 Distance: 0.316228 ClassLable: Iris-setosarowNo: 7 Distance: 0.316228 ClassLable: Iris-setosarowNo: 35 Distance: 0.264575 ClassLable: Iris-setosarowNo: 10 Distance: 0.264575 ClassLable: Iris

35、-setosa*第11組數(shù)據(jù)*rowNo: 33 KNN分類結(jié)果: Iris-setosa ( 正確類標(biāo)號: Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 34 Distance: 0.346410 ClassLable: Iris-setosarowNo: 22 Distance: 0.509902 ClassLable: Iris-setosarowNo: 11 Distance: 0.458258 ClassLable: Iris-setosarowNo: 49 Distance: 0.424264 ClassLable: Iris-setosarowNo: 47 Distan

36、ce: 0.346410 ClassLable: Iris-setosarowNo: 20 Distance: 0.374166 ClassLable: Iris-setosarowNo: 17 Distance: 0.458258 ClassLable: Iris-setosa*第12組數(shù)據(jù)*rowNo: 36 KNN分類結(jié)果: Iris-setosa ( 正確類標(biāo)號: Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 38 Distance: 0.346410 ClassLable: Iris-setosarowNo: 2 Distance: 0.300000 ClassLable:

37、 Iris-setosarowNo: 41 Distance: 0.331662 ClassLable: Iris-setosarowNo: 35 Distance: 0.346410 ClassLable: Iris-setosarowNo: 29 Distance: 0.346410 ClassLable: Iris-setosarowNo: 50 Distance: 0.223607 ClassLable: Iris-setosarowNo: 10 Distance: 0.346410 ClassLable: Iris-setosa*第13組數(shù)據(jù)*rowNo: 39 KNN分類結(jié)果: I

38、ris-setosa ( 正確類標(biāo)號: Iris-setosa )7-最臨近數(shù)據(jù):rowNo: 13 Distance: 0.424264 ClassLable: Iris-setosarowNo: 46 Distance: 0.424264 ClassLable: Iris-setosarowNo: 4 Distance: 0.300000 ClassLable: Iris-setosarowNo: 14 Distance: 0.244949 ClassLable: Iris-setosarowNo: 7 Distance: 0.469042 ClassLable: Iris-setosarowNo: 31 Distance: 0.5099

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論