From edb706659f7b69ffaf0d83ab37fb00ca4569c493 Mon Sep 17 00:00:00 2001 From: "ludovic.castglia" Date: Wed, 29 Jan 2025 16:04:17 +0100 Subject: [PATCH] ajout de knn pour la monoclassification et calcul du temp --- code/knn.py | 12 ++++++++++++ demo4.py | 11 ++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/code/knn.py b/code/knn.py index 943d30f..7b2ca48 100644 --- a/code/knn.py +++ b/code/knn.py @@ -25,6 +25,18 @@ class Knn: value[i] = value[i] / ttPart return value + def getLabelOfPoint(self, coord,nbNearest): + points, dists = self.getNNearest(coord, nbNearest) + label = {} + for idx in range(len(points)): + tvalue = points[idx].value[0] + if tvalue in label: + label[tvalue] += 1/(dists[idx]+1) + else: + label[tvalue] = 1/(dists[idx]+1) + value = max(label, key=label.get) + return value + def getNNearest(self, coord, nbNearest): dist = np.copy(self.space) dist = np.frompyfunc(lambda x: x.getDistFromCoord(coord), 1, 1)(dist) diff --git a/demo4.py b/demo4.py index 5d3fb8e..ef8a918 100644 --- a/demo4.py +++ b/demo4.py @@ -2,11 +2,11 @@ from nnnar import * from knn import * import numpy as np import pandas as pd - +from time import time def runOneTest(trainTestRatio): nnnar = Nnnar(4, 0, 100.001, 10)# le 100.001 est pour être sûr d'être au dessus de la valeur max (100.0) - + knn = Knn() df = pd.read_csv('./data/Iris.csv') df = df.iloc[:, 1:] # Normalisation des données @@ -45,9 +45,14 @@ def runOneTest(trainTestRatio): return 100 - nbError / len(coord) * 100 + +t1 = time() + nbRepetition = 100 accuracy = 0 for i in range(nbRepetition): accuracy += runOneTest(0.8) -print("accuracy moyenne: ",str(accuracy/nbRepetition)) \ No newline at end of file +t2 = time() +print("accuracy moyenne: ",str(accuracy/nbRepetition)) +print("delta temps: ",str(t2-t1)) \ No newline at end of file