Ejemplo n.º 1
0
	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
Ejemplo n.º 2
0
	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
Ejemplo n.º 3
0
    def get_instance(self, instance_path):

        name = ""
        dimension = ""
        veiculos = ""
        capacidade = ""
        demanda = []
        data = []

        with open(instance_path, 'r', encoding='utf-8') as file:

            name = file.readline().split(' ')[-1]
            dimension = int(file.readline().split(' ')[-1])
            veiculos = int(file.readline().split(' ')[-1])
            capacidade = int(file.readline().split(' ')[-1])
            demanda = []
            inicio_da_secao_Edge_Weight = 5

            file.readline()  #DEMAND_SECTION:

            for i in range(dimension):
                stringAuxiliar = file.readline()
                stringAuxiliar2 = (
                    re.findall('\d+', stringAuxiliar)
                )  # vai criar uma lista apenas com os valores (removendo os espaços)
                demanda.append(
                    int(stringAuxiliar2[1])
                )  #vai receber apenas o segundo valor na parte de demanda.
                inicio_da_secao_Edge_Weight += 1
            inicio_da_secao_Edge_Weight += 2

            file.readline()  #linha vazia antes do EDGE WEIGHT SECTION

            file_type = file.readline().strip()

            if file_type == 'EDGE_WEIGHT_SECTION':

                data2 = [[0 for x in range(dimension)]
                         for y in range(dimension)
                         ]  #matriz [Dimensao][Dimensao]

                fop = open(instance_path, "r")
                arquivo = fop.readlines()

                for i in range(dimension):
                    stringAuxiliar = arquivo[inicio_da_secao_Edge_Weight]
                    stringAuxiliar2 = (re.findall('\d+', stringAuxiliar))
                    for j in range(dimension):
                        data2[i][j] = int(stringAuxiliar2[j])
                    inicio_da_secao_Edge_Weight += 1

                data = self.__get_instance(file, dimension)

        return Instance(name, dimension, veiculos, capacidade, demanda, data,
                        data2)
Ejemplo n.º 4
0
    def get_instance(self, instance_path):
        instance = None
        name = ""
        dimension = ""
        data = []

        with open(instance_path, 'r', encoding='utf-8') as file:
            name = file.readline().split(' ')[-1]
            dimension = int(file.readline().split(' ')[-1])
            data = []

            file_type = file.readline().strip()

            if file_type == 'EDGE_WEIGHT_SECTION':
                data = self.__get_instance_teste(file, dimension)
            elif file_type == 'DISPLAY_DATA_SECTION':
                data = self.__get_instance_tsp_cup(file, dimension)

        return Instance(name, dimension, data)
Ejemplo n.º 5
0
def loadDataFromFile(fileName,
                     skipRowsWithInvalidFeature=False,
                     defaultValueOfInvalidFeature=1):
    instances = []

    file = open(fileName, 'r').read()
    lines = file.split('\n')

    for line in lines:
        if '?' in line and skipRowsWithInvalidFeature is True:
            continue

        row = line.split(',')

        if row.__len__() == 11:
            instance = Instance(row[columnId],
                                row[columnFirstFeature:quantityOfFeatures + 1],
                                row[columnCancerClass],
                                defaultValueOfInvalidFeature)
            instances.append(instance)

    return instances
Ejemplo n.º 6
0
	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
Ejemplo n.º 7
0
	def buildClassifier(self, data):
		listaClases = data.getClases()
		self.clases = list(listaClases)
		listaColumnas = data.getColumnasList()
		self.columnas = list(listaColumnas)
		

		#simulamos unas instacias que contengan todos los elementos
		for clase in listaClases:
			instance = Instance()
			for columna in listaColumnas:
				instance.addElement(1)
			instance.addElement(clase)
			data.addInstance(instance)

		self.nFilasTrain = data.getNumeroInstances()
		#inicializamos el diccionario, va a tener la siguente forma
		#{clase1: {columna1:{media:0.0, varianza:0.0, incidencias:0}}, clase2...}

		for clase in listaClases:
			self.diccionarioINFO[clase] = {}
			self.diccionarioINFO[clase]['rep_clase'] = 0
			for columna in listaColumnas:
				self.diccionarioINFO[clase][columna] = {}
				self.diccionarioINFO[clase][columna]['media'] = 0.0
				self.diccionarioINFO[clase][columna]['varianza'] = 0.0
				self.diccionarioINFO[clase][columna]['incidencias'] = 0

		#****************calculamos la media
		#calculo de la suma
		listaInstancias = data.getListInstances()
		for instancia in listaInstancias:
			clase = instancia.getClase()
			self.diccionarioINFO[clase]['rep_clase'] += 1
			i = 0
			for columna in listaColumnas:
				self.diccionarioINFO[clase][columna]['media'] += instancia.getElementAtPos(i);
				i+=1
		#division para calcular la media
		for clase in listaClases:
			for columna in listaColumnas:
				sumaTotal = self.diccionarioINFO[clase][columna]['media']
				
				incidencias = self.diccionarioINFO[clase]['rep_clase']
				self.diccionarioINFO[clase][columna]['media'] = sumaTotal / float(incidencias)
				#if columna == 'calle':
				#	print columna + ' media'
				#	print self.diccionarioINFO[clase][columna]['media']
		#**************fin del calculo de la media		

		#**************calculo de la varianza
		#calculo de la suma (xi - media)
		for instancia in listaInstancias:
			clase = instancia.getClase()
			i = 0
			for columna in listaColumnas:
				media = self.diccionarioINFO[clase][columna]['media']
				elem = instancia.getElementAtPos(i);
				difCuadrado = math.pow(elem - media, 2)
				self.diccionarioINFO[clase][columna]['varianza'] += difCuadrado
				i+=1
		#division para calcular la varianza
		for clase in listaClases:
			for columna in listaColumnas:
				sumaTotal = self.diccionarioINFO[clase][columna]['varianza']
				incidencias = self.diccionarioINFO[clase]['rep_clase']
				self.diccionarioINFO[clase][columna]['varianza'] = sumaTotal / float(incidencias)