def leerFichero(self, nombre_fichero): f = codecs.open(nombre_fichero, "r", "utf-8") #instancias al estilo WEKA instances = Instances() primeraLinea = f.readline() cadenasLinea = re.split(r'\t|\n|\r| ', primeraLinea) numeroEntradas = int(cadenasLinea[0]) numeroClases = int(cadenasLinea[1]) for i in range(0, numeroEntradas): instances.addColumna(str(i), "REAL") for i in range(0, numeroClases): instances.addClase(str(i)) for line in iter(lambda: f.readline(), ''): tokens = self.privateLimpiaVacioTokens(re.split(self.delimiters, line)) #print tokens if len(tokens) <= 0: break #instancia al estilo WEKA instance = Instance() #se anyaden las entradas del perceptron for i in range(0, numeroEntradas): #print filter(lambda x: x in string.printable, tokens[i]) instance.addElement(tokens[i]) #print tokens[numeroEntradas] instance.addElement(tokens[numeroEntradas]) instances.addInstance(instance) f.close() return instances
def generaParticiones(self, instances): #una sola particion particion = Particion() #generar las instacias para la particion instanceTrain = Instances() instanceTest = Instances() # set clases instanceTrain.setClases(instances.getClases()) instanceTest.setClases(instances.getClases()) # set columns instanceTrain.setColumnas(instances.getColumnasList(), instances.getColumnasTipo()) instanceTest.setColumnas(instances.getColumnasList(), instances.getColumnasTipo()) #generar las instancias listInstances = list(instances.getListInstances()) random.shuffle(listInstances) n_instances = len(listInstances) n_instances_train = int(round(n_instances * self.porcentaje)) n_instances_test = n_instances - n_instances_train #instancias de train for i in range(0, n_instances_train): instanceTrain.addInstance(listInstances[i]) #instancias de test for i in range(n_instances_train, n_instances): instanceTest.addInstance(listInstances[i]) #añadir a la particion las instancias particion.setTrain(instanceTrain) particion.setTest(instanceTest) return particion
def leerFichero(self, nombre_fichero): f = open(nombre_fichero,'r') instances = Instances() #espera @RELATION nombre #espera tambien @ATTRIBUTE #espera tambien @data i = 0 while True: linea = f.readline() tokens = re.split(self.delimiters, linea) if len(tokens) > 1: if tokens[0] == '@RELATION': continue elif tokens[0] == '@ATTRIBUTE': if tokens[1] == 'class': for indice in range(2, len(tokens)): if tokens[indice] != '': instances.addClase(tokens[indice]) elif tokens[2] == 'REAL': instances.addColumna(tokens[1], tokens[2]) continue else: instances.addColumna(tokens[1], 'NOMINAL') continue elif tokens[0] == '@DATA': print '@DATA' break i = i+1 if i > 100: print 'Error de fichero' return None for linea in iter(lambda: f.readline(), ''): tokens = self.privateLimpiaVacioTokens(re.split(self.delimiters, linea)) longitud = len(tokens) if longitud > 1: #por ahora solo lee reales instance = Instance() for i in range(0, longitud - 1): instance.addElement(float(tokens[i])) instance.addElement(tokens[longitud - 1]) instances.addInstance(instance) f.close() return instances
def leerFichero(self, nombre_fichero): f = open(nombre_fichero,'r') #instancias al estilo WEKA instances = Instances() primeraLinea = f.readline() cadenasLinea = re.split(self.delimiters, primeraLinea) numeroEntradas = int(cadenasLinea[0]) numeroClases = int(cadenasLinea[1]) for i in range(0, numeroEntradas): instances.addColumna(str(i), "REAL") for i in range(0, numeroClases): instances.addClase(str(i)) for line in iter(lambda: f.readline(), ''): tokens = self.privateLimpiaVacioTokens(re.split(self.delimiters, line)) #print tokens if len(tokens) <= 0: break #instancia al estilo WEKA instance = Instance() #se anyaden las entradas del perceptron for i in range(0, numeroEntradas): instance.addElement(float(tokens[i])) #transformacion de 1 0 a 0 por ejemplo y 0 1 a 1 #con la finalidad de no usar un array de clases que no tiene sentido en clasificacion #puede tener sentido en un red neuronal, no lo niego j = 0 for i in range(numeroEntradas, numeroEntradas + numeroClases): if tokens[i] == '1': instance.addElement(str(j)) break j += 1 instances.addInstance(instance) f.close() return instances
def generaParticiones(self, instances, shuffle=True): #una sola particion particion = Particion() #generar las instacias para la particion instanceTrain = Instances() instanceTest = Instances() # set clases instanceTrain.setClases(instances.getClases()) instanceTest.setClases(instances.getClases()) # set columns instanceTrain.setColumnas(instances.getColumnasList(), instances.getColumnasTipo()) instanceTest.setColumnas(instances.getColumnasList(), instances.getColumnasTipo()) #generar las instancias listInstances = list(instances.getListInstances()) if shuffle: random.shuffle(listInstances) n_instances = len(listInstances) n_instances_train = int(round(n_instances * self.porcentaje)) n_instances_test = n_instances - n_instances_train #instancias de train for i in range(0, n_instances_train): instanceTrain.addInstance(listInstances[i]) #instancias de test for i in range(n_instances_train, n_instances): instanceTest.addInstance(listInstances[i]) #añadir a la particion las instancias particion.setTrain(instanceTrain) particion.setTest(instanceTest) return particion
def leerFichero(self, nombre_fichero): f = open(nombre_fichero, 'r') #instancias al estilo WEKA instances = Instances() primeraLinea = f.readline() cadenasLinea = re.split(self.delimiters, primeraLinea) numeroEntradas = int(cadenasLinea[0]) numeroClases = int(cadenasLinea[1]) for i in range(0, numeroEntradas): instances.addColumna(str(i), "REAL") for i in range(0, numeroClases): instances.addClase(str(i)) for line in iter(lambda: f.readline(), ''): tokens = self.privateLimpiaVacioTokens( re.split(self.delimiters, line)) #print tokens if len(tokens) <= 0: break #instancia al estilo WEKA instance = InstanceMatriz() #se anyaden las entradas del perceptron for i in range(0, numeroEntradas): instance.addElement(float(tokens[i])) #solo funcionara con salidas numericas for i in range(numeroEntradas, numeroEntradas + numeroClases): instance.addElement(float(tokens[i])) instance.generaBipolarVectorObjetivoSalida(numeroClases) instances.addInstance(instance) f.close() return instances
def generaParticionesProporcional(self, instances, aleatorio = False): #una sola particion particion = Particion() #generar las instacias para la particion instanceTrain = Instances() instanceTest = Instances() # set clases instanceTrain.setClases(instances.getClases()) instanceTest.setClases(instances.getClases()) # set columns instanceTrain.setColumnas(instances.getColumnasList(), instances.getColumnasTipo()) instanceTest.setColumnas(instances.getColumnasList(), instances.getColumnasTipo()) #generar las instancias listInstances = list(instances.getListInstances()) if aleatorio: random.shuffle(listInstances) n_instances = len(listInstances) n_instances_train = int(round(n_instances * self.porcentaje)) n_instances_test = n_instances - n_instances_train #conteo de instancias en cada clase conteoClases = {} conteoIntroducido = {} listaClases = instances.getClases() for clase in listaClases: conteoClases[clase] = {} conteoClases[clase]['cont'] = 0 conteoClases[clase]['instaces_id'] = [] conteoIntroducido[clase] = 0 i = 0 for instancia in listInstances: clase = instancia.getClase() conteoClases[clase]['cont'] += 1 conteoClases[clase]['instaces_id'].append(i) i+=1 for clase in listaClases: print 'instancias de la clase ' + str(clase) + ': ' + str(conteoClases[clase]['cont']) + ' porcentaje: '+ str(conteoClases[clase]['cont']/float(len(listInstances))) #instancias de train #por cada clase busca se ha de introducir una instancia for i in range(0, n_instances_train): for clase in listaClases: if conteoIntroducido[clase] < ((conteoClases[clase]['cont'] / float(n_instances)) * n_instances_train): identificador = conteoClases[clase]['instaces_id'][conteoIntroducido[clase]] conteoIntroducido[clase] += 1 instanceTrain.addInstance(listInstances[identificador]) #instanceTrain.addInstance(listInstances[i]) #instancias de test for clase in listaClases: desde = conteoIntroducido[clase] hasta = conteoClases[clase]['cont'] for i in range(desde, hasta): identificador = conteoClases[clase]['instaces_id'][i] instanceTest.addInstance(listInstances[identificador]) conteoIntroducido[clase] += 1 #for i in range(n_instances_train, n_instances): # instanceTest.addInstance(listInstances[i]) #añadir a la particion las instancias if aleatorio: instanceTrain.shuffle() particion.setTrain(instanceTrain) particion.setTest(instanceTest) return particion
def generaParticionesProporcional(self, instances): #una sola particion particion = Particion() #generar las instacias para la particion instanceTrain = Instances() instanceTest = Instances() # set clases instanceTrain.setClases(instances.getClases()) instanceTest.setClases(instances.getClases()) # set columns instanceTrain.setColumnas(instances.getColumnasList(), instances.getColumnasTipo()) instanceTest.setColumnas(instances.getColumnasList(), instances.getColumnasTipo()) #generar las instancias listInstances = list(instances.getListInstances()) random.shuffle(listInstances) n_instances = len(listInstances) n_instances_train = int(round(n_instances * self.porcentaje)) n_instances_test = n_instances - n_instances_train #conteo de instancias en cada clase conteoClases = {} conteoIntroducido = {} listaClases = instances.getClases() for clase in listaClases: conteoClases[clase] = {} conteoClases[clase]['cont'] = 0 conteoClases[clase]['instaces_id'] = [] conteoIntroducido[clase] = 0 i = 0 for instancia in listInstances: clase = instancia.getClase() conteoClases[clase]['cont'] += 1 conteoClases[clase]['instaces_id'].append(i) i += 1 #instancias de train #por cada clase busca se ha de introducir una instancia for i in range(0, n_instances_train): for clase in listaClases: if conteoIntroducido[clase] < ( (conteoClases[clase]['cont'] / float(n_instances)) * n_instances_train): identificador = conteoClases[clase]['instaces_id'][ conteoIntroducido[clase]] conteoIntroducido[clase] += 1 instanceTrain.addInstance(listInstances[identificador]) #instanceTrain.addInstance(listInstances[i]) #instancias de test for clase in listaClases: desde = conteoIntroducido[clase] hasta = conteoClases[clase]['cont'] for i in range(desde, hasta): identificador = conteoClases[clase]['instaces_id'][i] instanceTest.addInstance(listInstances[identificador]) conteoIntroducido[clase] += 1 #for i in range(n_instances_train, n_instances): # instanceTest.addInstance(listInstances[i]) #añadir a la particion las instancias instanceTrain.shuffle() particion.setTrain(instanceTrain) particion.setTest(instanceTest) return particion