Beispiel #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
Beispiel #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
Beispiel #3
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
Beispiel #4
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)