ift7025-projet/Code/load_datasets.py

216 lines
8.8 KiB
Python
Raw Normal View History

2019-03-23 17:45:40 +00:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*
import numpy as np
import random
def load_iris_dataset(train_ratio=0.7):
"""Cette fonction a pour but de lire le dataset Iris
Args:
train_ratio: le ratio des exemples (ou instances) qui vont etre attribués à l'entrainement,
le rest des exemples va etre utilisé pour les tests.
Par exemple : si le ratio est 50%, il y aura 50% des exemple (75 exemples) qui vont etre utilisé
pour l'entrainement, et 50% (75 exemples) pour le test.
Retours:
Cette fonction doit retourner 4 matrices de type Numpy, train, train_labels, test, et test_labels
- train : une matrice numpy qui contient les exemples qui vont etre utilisés pour l'entrainement, chaque
ligne dans cette matrice représente un exemple (ou instance) d'entrainement.
- train_labels : contient les labels (ou les étiquettes) pour chaque exemple dans train, de telle sorte
que : train_labels[i] est le label (ou l'etiquette) pour l'exemple train[i]
- test : une matrice numpy qui contient les exemples qui vont etre utilisés pour le test, chaque
ligne dans cette matrice représente un exemple (ou instance) de test.
- test_labels : contient les labels (ou les étiquettes) pour chaque exemple dans test, de telle sorte
que : test_labels[i] est le label (ou l'etiquette) pour l'exemple test[i]
"""
random.seed(1) # Pour avoir les meme nombres aléatoires à chaque initialisation.
# Vous pouvez utiliser des valeurs numériques pour les différents types de classes, tel que :
conversion_labels = {'Iris-setosa': 0, 'Iris-versicolor' : 1, 'Iris-virginica' : 2}
# Le fichier du dataset est dans le dossier datasets en attaché
f = open('datasets/bezdekIris.data', 'r')
lines=[line.strip() for line in f.readlines()]
f.close()
lines=[line.split(",") for line in lines if line]
features=[]
labels=[]
for line in lines:
features.append(line[0:4])
labels.append(conversion_labels[line[4]])
np_features=np.array(features,dtype=np.float)
np_labels=np.array(labels,dtype=np.int)
n_obs = np_features.shape[0]
n_train = int(n_obs*train_ratio)
all_indices = [i for i in range(n_obs)]
random.shuffle(all_indices)
train_index = all_indices[0:n_train]
test_index = all_indices[n_train:n_obs]
train = np_features[train_index]
train_labels = np_labels[train_index]
test = np_features[test_index]
test_labels = np_labels[test_index]
# REMARQUE très importante :
# remarquez bien comment les exemples sont ordonnés dans
# le fichier du dataset, ils sont ordonnés par type de fleur, cela veut dire que
# si vous lisez les exemples dans cet ordre et que si par exemple votre ration est de 60%,
# vous n'allez avoir aucun exemple du type Iris-virginica pour l'entrainement, pensez
# donc à utiliser la fonction random.shuffle pour melanger les exemples du dataset avant de séparer
# en train et test.
# Tres important : la fonction doit retourner 4 matrices (ou vecteurs) de type Numpy.
return (train, train_labels, test, test_labels)
def load_congressional_dataset(train_ratio):
"""Cette fonction a pour but de lire le dataset Congressional Voting Records
Args:
train_ratio: le ratio des exemples (ou instances) qui vont servir pour l'entrainement,
le rest des exemples va etre utilisé pour les test.
Retours:
Cette fonction doit retourner 4 matrices de type Numpy, train, train_labels, test, et test_labels
- train : une matrice numpy qui contient les exemples qui vont etre utilisés pour l'entrainement, chaque
ligne dans cette matrice représente un exemple (ou instance) d'entrainement.
- train_labels : contient les labels (ou les étiquettes) pour chaque exemple dans train, de telle sorte
que : train_labels[i] est le label (ou l'etiquette) pour l'exemple train[i]
- test : une matrice numpy qui contient les exemples qui vont etre utilisés pour le test, chaque
ligne dans cette matrice représente un exemple (ou instance) de test.
- test_labels : contient les labels (ou les étiquettes) pour chaque exemple dans test, de telle sorte
que : test_labels[i] est le label (ou l'etiquette) pour l'exemple test[i]
"""
random.seed(1) # Pour avoir les meme nombres aléatoires à chaque initialisation.
# Vous pouvez utiliser un dictionnaire pour convertir les attributs en numériques
# Notez bien qu'on a traduit le symbole "?" pour une valeur numérique
# Vous pouvez biensur utiliser d'autres valeurs pour ces attributs
conversion_labels = {'republican' : 0, 'democrat' : 1,
'n' : 0, 'y' : 1, '?' : 2}
# Le fichier du dataset est dans le dossier datasets en attaché
f = open('datasets/house-votes-84.data', 'r')
lines=[line.strip() for line in f.readlines()]
f.close()
lines=[line.split(",") for line in lines if line]
features=[]
labels=[]
for line in lines:
features.append([conversion_labels[i] for i in line[1:17]])
labels.append(conversion_labels[line[0]])
np_features=np.array(features,dtype=np.float)
np_labels=np.array(labels,dtype=np.int)
n_obs = np_features.shape[0]
n_train = int(n_obs*train_ratio)
all_indices = [i for i in range(n_obs)]
random.shuffle(all_indices)
train_index = all_indices[0:n_train]
test_index = all_indices[n_train:n_obs]
train = np_features[train_index]
train_labels = np_labels[train_index]
test = np_features[test_index]
test_labels = np_labels[test_index]
# La fonction doit retourner 4 structures de données de type Numpy.
return (train, train_labels, test, test_labels)
def load_monks_dataset(numero_dataset):
"""Cette fonction a pour but de lire le dataset Monks
Notez bien que ce dataset est différent des autres d'un point de vue
exemples entrainement et exemples de tests.
Pour ce dataset, nous avons 3 différents sous problèmes, et pour chacun
nous disposons d'un fichier contenant les exemples d'entrainement et
d'un fichier contenant les fichiers de tests. Donc nous avons besoin
seulement du numéro du sous problème pour charger le dataset.
Args:
numero_dataset: lequel des sous problèmes nous voulons charger (1, 2 ou 3 ?)
par exemple, si numero_dataset=2, vous devez lire :
le fichier monks-2.train contenant les exemples pour l'entrainement
et le fichier monks-2.test contenant les exemples pour le test
les fichiers sont tous dans le dossier datasets
Retours:
Cette fonction doit retourner 4 matrices de type Numpy, train, train_labels, test, et test_labels
- train : une matrice numpy qui contient les exemples qui vont etre utilisés pour l'entrainement, chaque
ligne dans cette matrice représente un exemple (ou instance) d'entrainement.
- train_labels : contient les labels (ou les étiquettes) pour chaque exemple dans train, de telle sorte
que : train_labels[i] est le label (ou l'etiquette) pour l'exemple train[i]
- test : une matrice numpy qui contient les exemples qui vont etre utilisés pour le test, chaque
ligne dans cette matrice représente un exemple (ou instance) de test.
- test_labels : contient les labels (ou les étiquettes) pour chaque exemple dans test, de telle sorte
que : test_labels[i] est le label (ou l'etiquette) pour l'exemple test[i]
"""
# TODO : votre code ici, vous devez lire les fichiers .train et .test selon l'argument numero_dataset
f = open('datasets/monks-'+str(numero_dataset)+'.train', 'r')
lines_train=[line.strip() for line in f.readlines()]
f.close()
f = open('datasets/monks-'+str(numero_dataset)+'.test', 'r')
lines_test=[line.strip() for line in f.readlines()]
f.close()
lines_train=[line.split(" ") for line in lines_train if line]
lines_test=[line.split(" ") for line in lines_test if line]
features_train=[]
labels_train=[]
features_test=[]
labels_test=[]
for line in lines_train:
features_train.append(line[1:7])
labels_train.append(line[0])
for line in lines_test:
features_test.append(line[1:7])
labels_test.append(line[0])
train=np.array(features_train,dtype=np.float)
train_labels=np.array(labels_train,dtype=np.int)
test=np.array(features_test,dtype=np.float)
test_labels=np.array(labels_test,dtype=np.int)
# La fonction doit retourner 4 matrices (ou vecteurs) de type Numpy.
2019-03-16 21:50:53 +00:00
return (train, train_labels, test, test_labels)