You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3nar/demo1.py

60 lines
1.6 KiB

import os
import sys
parent_dir_name = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
sys.path.append(parent_dir_name + "/3nar/code")
from nnnar import *
from knn import *
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# varriable globale
trainTestRatio = 0.8
nnnarSubDiv = 10
# lecture des données
nnnar = Nnnar(4, 0, 100, nnnarSubDiv)
knn = Knn()
df = pd.read_csv('./data/maison.csv')
df = df.iloc[:, 0:5]
# Normalisation des données
df.iloc[:, 1] = df.iloc[:, 1] - df.iloc[:, 1].min()
df.iloc[:, 2] = df.iloc[:, 2] - df.iloc[:, 2].min()
df.iloc[:, 3] = df.iloc[:, 3] - df.iloc[:, 3].min()
df.iloc[:, 4] = df.iloc[:, 4] - df.iloc[:, 4].min()
df.iloc[:, 1] = df.iloc[:, 1] / df.iloc[:, 1].max()
df.iloc[:, 2] = df.iloc[:, 2] / df.iloc[:, 2].max()
df.iloc[:, 3] = df.iloc[:, 3] / df.iloc[:, 3].max()
df.iloc[:, 4] = df.iloc[:, 4] / df.iloc[:, 4].max()
df.iloc[:, 1:5] = df.iloc[:, 1:5] * 99
# Création des données d'entrainement et de test
train = df.sample(frac=trainTestRatio)
test = df.drop(train.index)
# Entrainement du modèle
coord = train.iloc[:, 1:].values
value = train.iloc[:, 0].values
for i in range(len(coord)):
knn.addPoint(np.array(coord[i]), np.array([value[i]]))
nnnar.addPoint(np.array(coord[i]), np.array([value[i]]))
# Test du modèles
coord = test.iloc[:, 1:].values
value = test.iloc[:, 0].values
nbErrorNnnar = 0
for i in range(len(coord)):
v = nnnar.getValueOfPoint(np.array(coord[i]),5)[0]
if v != value[i]:
nbErrorNnnar += 100*abs(v-value[i])/value.max()
print("accuracy moyenne:",str(100-nbErrorNnnar/len(coord)))