-k-NN classifier: classifying using k-nearest neighbors algorithm. The nearest neighbors

-search method is euclidean distance

-Usage:

[predicted_labels,nn_index,accuracy] = KNN_(3,training,training_labels,testing,testing_labels)

predicted_labels = KNN_(3,training,training_labels,testing)

-Input:

- k: number of nearest neighbors

- data: (NxD) training data; N is the number of samples and D is the

dimensionality of each data point

- labels: training labels

- t_data: (MxD) testing data; M is the number of datapoints and D

is the dimensionality of each data point

- t_labels: testing labels (default = [])

-Output:

- predicted_labels: the predicted labels based on the k-NN

algorithm

- nn_index: the indices of the nearest training data point (Mx1).

- accuracy: if the testing labels are supported, the accuracy of

the classification is returned, otherwise it will be zero.

Mahmoud Afifi (2021). kNN classifier (https://www.mathworks.com/matlabcentral/fileexchange/63621-knn-classifier), MATLAB Central File Exchange. Retrieved .

Created with
R2015a

Compatible with any release

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!Create scripts with code, output, and formatted text in a single executable document.

Tony MeiHello, sir.

I have a leaf data set which is divided in 15 category and each has 75 items.

Now I want to test my leaf recognition algorithm.

The distance matrix (1125x1125) of the data set is built by using the algorithm I developed,

I want to pick randomly 15 out of the 75 items in each category for the kNN classifier and then test the rest 60 items of each category.

Your code is great I believe.

But I cannot use it for now because the mutual distance between each pair of items in the data set is already calculated.

Could you help me out? Thank you so much.

Ashwini Patiluse this code for classification of plant disease , plz help me

Mahmoud Afifi@ehsan please send me an email to m.3afifi at gmail dot com.

Ehsan AltayefHello Dr.M,afifi

I need your help, could you send me your mail please?

my mail is Tripoli201919@gmail.com

Thank you in advance

Ivan CapponiJeongHeon KimPhyu Phyu ThawHello! It is a good coding. Thank you for it. But now, let me ask your help. I don't clearly understand that if my data is in .mat file, how can I apply my dataset in your coding.

Mahmoud Afifi@Fahad Ibrahim: Asalam Alaykum Mr. Fahad. Actually the code here is an example of how you can implement KNN algorithm.

Fahad IbrahimAsalam alaykum mr. Afifi...I am currently working on my final year project and the final part of my project is the implement the KNN algorithm on the data set I have obtained. Can you please show me on how to implement it. this is my e-mail address fahad.agus@gmail.com

Mahmoud Afifi@Balaji M. Sontakke: we do not have a threshold in this implementation. The only hyperparameter we have is the number nearest neighbors.

himakar varmaBalaji M. Sontakkewhat is the role of threshold in KNN classifier

ali ganjbakhshmariena aloorHello Sir

my mail id is aloormariena@gmai.com

Mahmoud Afifi@Geetha, please check your email

Geetha VirupaiahGeetha V

Dear Dr. Mahmoud Afifi.

Thank you Sir, I checked the code for my dataset. i am not getting correct result.

I sent my data to your mail. Please help me.

Mar KeyIhtisham KhanMahmoud Afifi@Cheol please check the comments written on the first of the source code.

Cheol ShinDear Dr. Mahmoud Afifi.

I really appreciate you.

I want to know kNN classifier code. I am happy!

But, I don't know how to use this code.

Can you help me? I really want to use this code!!

??? Error using ==> KNN_ at 30

Too few input arguments.

:(

Alaa HadiPlease Dr. Mahmoud Afifi

Can you send your email, I can send you me data set

Mahmoud Afifi@Vishnu Priya can you send me your training data with labels and testing data, so I could help.

Afroz AhmadSir can you run this code on my dataset?

Vishnu PriyaHello!sir.I'm trying to implement this function on fisheriris dataset that has three labels setosa ,viginica and versicolor but am unable to get proper output because of unique function I believe.I'm gettting 118 and 115 i.e v and s as output but both lables viginica and versicolor have v so unable to have proper classification.Could you please help me with necessary changes?and if I want the complete label name as output?

Thank you sir

Mahmoud Afifimafifi[at]yorku[dot]ca

Maanvi Bhatnagar@afifi sir how do I send you my data. can you please provide your email address?

Mahmoud Afifi@Maanvi can you send me your data to test?

Maanvi BhatnagarI am not getting any accuracy. What should i do?

Mahmoud Afifi@Mohamed

Good question. It was an assignment

Mohamed Amine HarkaneHello sir, thank you for your contribution but i have a question which may be basic, Why you creat you're own KNN code if Matlab already have it ?

thank you sir

Mahmoud Afifi@Dipjyoti Chakraborty

The kNN classifier is a non-parametric classifier, such that the classifier doesn't learn any parameter (there is no training process). Instead, the idea is to keep all training samples in hand and when you receive a new data point (represent as a vector), the classifier measures the distance between the new data point and all training data it has. BTW, you have to provide the algorithm with the labels of each training data point. Then, the classifier will find the nearest k data points in the training samples and assume the label of the given data point is the major label of the nearest k training data points.

The dimensionality of both training data and testing data should be the same; for example, if your training data represent x,y- coordinates of points, the testing data point should be a vector with two values (x and y). Based on the data, people pick the suitable distance metric to use; for example, if your data is a set of 2d points in the Cartesian coordinate, the Ecludian distance is the best distance measurement you can use.

In my code, I use Ecludian distance and you have to give to the function the training data and its labels along with your testing data points:

predicted_labels = KNN_(k,training_data,training_labels,testing_data)

The predicted_labels will contain the predicted labels based on the k nearest data points of the training_data, and the label will be estimated via majority voting of the labels of these nearest points.

Suppose you have:

* d_t -> 10x 5 matrix, that represents the training data such that you have 10 data points, each one has 5 features (5 dimensions).

* L -> 10x1 vector, that represents the label of each data point in d_t

* d -> Nx5 matrix that represents the N testing data points you have and you need to estimate their labels.

run est_L = KNN_(3,d_t,L,d); where est_L is the estimated labels of d based on the 3-nearest neighbor points of d_t

Dipjyoti ChakrabortyWould you help me to implement this?? pls give me a full example, by that I can understand. If you do so then it will be pleasure to me

Mahmoud Afifi@Dipjyoti Chakraborty

Did you test the current code? I could find a variable called train_labels in the current source code!

Dipjyoti ChakrabortyAfter your last updated code, when I am trying to implement it is showing ----

Undefined function or variable 'train_labels'.

Error in classify (line 61)

options=unique(train_labels(k_nn(i,:)'));

what should I do??

Mahmoud Afifi@RK Ghadai

The bug is fixed, the part is replaced with the following code:

%find the nearest k for each data point of the testing data

k_nn=ind(:,1:k);

nn_index=k_nn(:,1);

%get the majority vote

for i=1:size(k_nn,1)

options=unique(labels(k_nn(i,:)));

max_count=0;

max_label=0;

for j=1:length(options)

if length(find(labels(k_nn(i,:))==options(j)))>max_count

max_label=labels(options(j));

max_count=j;

end

end

predicted_labels(i)=max_label;

end

RK GhadaiMistake in the "%get the majority vote" section. "options=unique(k_nn(i,:));" should be changed to "options=unique(train_labels(k_nn(i,:)));" Similarly the if condition there, should be corrected.

LEE ZISHENG