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 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 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)
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)
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
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 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)