rakha asyrofi
/
KNN_coba7
mantap
main.cpp
- Committer:
- asyrofi
- Date:
- 2018-04-17
- Revision:
- 0:d6253d3647d4
File content as of revision 0:d6253d3647d4:
//#include<iostream> //#include <stdio.h> #include<math.h> #include<stdlib.h> #include "mbed.h" #include "Serial.h" #include <algorithm> Serial uart1(USBTX,USBRX); #define MAX 20 #define k 4 using namespace std; enum category{SHORT,TALL,AVERAGE}; class data{ int x,y; category cat; public: void setd(int a,int b,category c){ x=a; y=b; cat=c; } int getx(){return x;} int gety(){return y;} category getcat(){ return cat; } };//end of class int dis(data d1,data d2) { //return sqrt(pow((d2.getx()-d1.getx()),2)+pow((d2.gety()-d1.gety()),2)); return sqrt(pow(((double)d2.getx()-(double)d1.getx()),2.0)+pow(((double)d2.gety()-(double)d1.gety()),2.0)); } int main() { uart1.baud(9600); do{ int p,q; //input int a[MAX]; //store distances int b[k]; //to get min distances, used in calc int c[k]; //to store freq for(int i=0;i<k;i++){ //initiLIZATION b[i]=-1; c[i]=0; } int min=1000; //cout<<"Enter x,y(negative value to exit): "; uart1.printf("Enter x,y(negative value to exit):"); //cin>>p>>q; uart1.scanf("%ld,%ld",&p,&q); if((p < 0) | (q < 0)) exit(0); data n; //data point to classify n.setd(p,q,SHORT); data d[MAX]; //training set d[0].setd(1,1,SHORT); d[1].setd(1,2,SHORT); d[2].setd(1,3,SHORT); d[3].setd(1,4,SHORT); d[4].setd(1,5,SHORT); d[5].setd(1,6,SHORT); d[6].setd(1,7,SHORT); d[7].setd(2,1,SHORT); d[8].setd(2,2,SHORT); d[9].setd(2,3,AVERAGE); d[10].setd(2,4,AVERAGE); d[11].setd(2,5,AVERAGE); d[12].setd(2,6,AVERAGE); d[13].setd(2,7,AVERAGE); d[14].setd(5,1,TALL); d[15].setd(5,2,TALL); d[16].setd(5,3,TALL); d[17].setd(5,4,TALL); d[18].setd(5,5,TALL); d[19].setd(5,6,TALL); for(int i=0;i<20;i++){ a[i]=dis(n,d[i]); //cout<<"\t\t"<<a[i]<<endl; uart1.printf("\t\t %d\n", a[i]); } //k-nearest neighbours calculation i.e smallest k distances for(int j=0;j<k;j++) { min=1000; for(int i=0;i<20;i++) { if(i!=b[0]&&i!=b[1]&&i!=b[2]) { if((a[i]<=min)) { min=a[i]; b[j]=i; } } } //cout<<min<<endl; uart1.printf("%d\n",min); } //counting frequency of a class in each neighbour for(int i=0;i<k;i++) { switch (d[b[i]].getcat()) { case SHORT: c[0]++; break; case AVERAGE: c[2]++; break; case TALL: c[1]++; break; } } //counting max frequency int max=-1,j; for(int i=0;i<k;i++) { if(c[i]>max){ max=c[i]; j=i; } } //cout<<"Prediction is : "; printf("Prediction is:"); switch (j) { case 0: //cout<<"SHORT"<<endl; uart1.printf("SHORT\n"); break; case 1: //cout<<"TALL"<<endl; uart1.printf("TALL\n"); break; case 2: //cout<<"AVERAGE"<<endl; uart1.printf("AVERAGE\n"); break; } }while(true); return 0; }