def predecirPunto(self): self.txtTest.clear() mipunto = list() if self.hayUnNumero(): mipunto.append(float(self.linePuntoX.text())) mipunto.append(float(self.linePuntoY.text())) #puntosDeEntrenamiento = self.datos.obtenerDatosEntrenamiento(self.porcentajeEntrenamiento) #puntosDeTest = self.datos.obtenerDatosTest(self.porcentajeEntrenamiento) for i in range(1, 11): loskvecinos = vecinos(self.datos.datosCompletos, mipunto, i) #print("Para " + str(i) + " vecinos sus vecinos más cercanos son:") #print(loskvecinos) claseDelPunto = prediccion(mipunto, loskvecinos) #print("La clase predicha fue " + claseDelPunto) self.txtTest.insertPlainText( "Con " + str(i) + " vecinos, la clase predicha fue " + claseDelPunto + "\n") #self.archivo.datosDeEntrenamiento(self.porcentajeEntrenamiento) #pyplot.plot(self.archivo.datosEntrenamientoX,self.archivo.datosEntrenamientoY,'go') #pyplot.show() else: tipo = 'Critical' titulo = 'Error' mensaje = 'No has ingresado un punto válido' detalles = 'Las coordenadas ingresadas no son válidas' self.mostrarError(tipo, titulo, mensaje, detalles)
def hiloTestearModeloUsuario(self, progress_callback): self.resultadosTestUsuario = list() k = self.obtenerValorDeK() total = k * 10 * len( self.datos.obtenerDatosTest(self.porcentajeEntrenamiento)) progreso = 0 listadedatos = [] for i in range(1, k + 1): listadedatos.append(0) for i in range(1, 11): self.datos.aleatorizar() puntosDeEntrenamiento = self.datos.obtenerDatosEntrenamiento( self.porcentajeEntrenamiento) puntosDeTest = self.datos.obtenerDatosTest( self.porcentajeEntrenamiento) for puntoDeTest in puntosDeTest: loskvecinos = vecinos(puntosDeEntrenamiento, puntoDeTest, k) for j in range(1, k + 1): progreso = progreso + 1 claseDelPunto = prediccion(puntoDeTest, loskvecinos[0:j]) if (claseDelPunto == puntoDeTest[-1]): listadedatos[j - 1] = listadedatos[j - 1] + 1 n = int((progreso * 100) / total) progress_callback.emit(n) puntosDeTest = self.datos.obtenerDatosTest( self.porcentajeEntrenamiento) for i in range(0, k): listadedatos[i] = (listadedatos[i] / (10 * len(puntosDeTest))) * 100 for i in range(1, k + 1): self.resultadosTestUsuario.append((i, listadedatos[i - 1]))
def hiloTestearModeloMetodo(self, progress_callback): self.resultadosTestMetodo = list() aciertos = 0 totalElementos = 0 totalDeTests = 10 if self.laRaiz: k = self.kRaiz else: k = self.kMetodo total = len(self.datos.obtenerDatosTest( self.porcentajeEntrenamiento)) * totalDeTests for i in range(1, totalDeTests + 1): self.datos.aleatorizar() puntosDeEntrenamiento = self.datos.obtenerDatosEntrenamiento( self.porcentajeEntrenamiento) puntosDeTest = self.datos.obtenerDatosTest( self.porcentajeEntrenamiento) for puntoDeTest in puntosDeTest: loskvecinos = vecinos(puntosDeEntrenamiento, puntoDeTest, k) claseDelPunto = prediccion(puntoDeTest, loskvecinos) totalElementos = totalElementos + 1 if (claseDelPunto == puntoDeTest[-1]): aciertos = aciertos + 1 progreso = totalElementos n = int((progreso * 100) / total) progress_callback.emit(n) porcentajeDeAciertos = (aciertos / totalElementos) * 100 self.resultadosTestMetodo.append((k, porcentajeDeAciertos))
def hiloTestearModeloUsuario(self, progress_callback): puntosDeEntrenamiento = self.datos.obtenerDatosEntrenamiento( self.porcentajeEntrenamiento) puntosDeTest = self.datos.obtenerDatosTest( self.porcentajeEntrenamiento) self.resultadosTestUsuario = list() k = self.obtenerValorDeK() + 1 for i in range(1, k + 1): aciertos = 0 totalElementos = 0 #TODO: mostrar en una tabla los resultados, por ejemplo #clasesPredichas = list() #clasesReales = list() for puntoDeTest in puntosDeTest: loskvecinos = vecinos(puntosDeEntrenamiento, puntoDeTest, i) claseDelPunto = prediccion(puntoDeTest, loskvecinos) totalElementos = totalElementos + 1 if (claseDelPunto == puntoDeTest[-1]): aciertos = aciertos + 1 porcentajeDeAciertos = (aciertos / totalElementos) * 100 self.resultadosTestUsuario.append((i, porcentajeDeAciertos)) #self.progress_fn(i,k) n = int((i * 100) / k) progress_callback.emit(n)
def predecirPunto(self): self.txtTest.clear() mipunto = list() mipunto.append(float(self.linePuntoX.text())) mipunto.append(float(self.linePuntoY.text())) #puntosDeEntrenamiento = self.datos.obtenerDatosEntrenamiento(self.porcentajeEntrenamiento) #puntosDeTest = self.datos.obtenerDatosTest(self.porcentajeEntrenamiento) for i in range(1, 11): loskvecinos = vecinos(self.datos.datosCompletos, mipunto, i) #print("Para " + str(i) + " vecinos sus vecinos más cercanos son:") #print(loskvecinos) claseDelPunto = prediccion(mipunto, loskvecinos) #print("La clase predicha fue " + claseDelPunto) self.txtTest.insertPlainText("Con " + str(i) + " vecinos, la clase predicha fue " + claseDelPunto + "\n")
def hiloCalcularKElbow(self, progress_callback): puntosDeEntrenamiento = self.datos.obtenerDatosEntrenamiento( self.porcentajeEntrenamiento) puntosDeTest = self.datos.obtenerDatosTest( self.porcentajeEntrenamiento) raiz = self.calcularKRaiz() self.resultadosTestMetodo = list() aciertos = 0 totalElementos = 0 k = 1 mejorK = 1 fin = False mejorValor = 0 j = 0 while (not fin): progress_callback.emit(k) aciertos = 0 totalElementos = 0 for puntoDeTest in puntosDeTest: loskvecinos = vecinos(puntosDeEntrenamiento, puntoDeTest, k) claseDelPunto = prediccion(puntoDeTest, loskvecinos) totalElementos = totalElementos + 1 if (claseDelPunto == puntoDeTest[-1]): aciertos = aciertos + 1 porcentajeDeAciertos = (aciertos / totalElementos) * 100 self.resultadosTestMetodo.append((k, porcentajeDeAciertos)) #¹print('k' + str(k) + 'j' + str(j) + 'raiz' + str(raiz)) if (porcentajeDeAciertos > mejorValor): mejorValor = porcentajeDeAciertos mejorK = k j = 0 else: j = j + 1 if ((j > (raiz / 2)) or (k > raiz)): fin = True else: k = k + 1 #for resultado in resultados: #self.txtMejorK.insertPlainText("Con K = " + str(resultado[0]) + ", la eficacia fue de " + "{:.2f}".format(resultado[1]) + "% \n") self.kMetodo = mejorK
def hiloTestearModeloMetodo(self, progress_callback): puntosDeEntrenamiento = self.datos.obtenerDatosEntrenamiento( self.porcentajeEntrenamiento) puntosDeTest = self.datos.obtenerDatosTest( self.porcentajeEntrenamiento) self.resultadosTestMetodo = list() aciertos = 0 totalElementos = 0 k = self.kDeTest total = len(puntosDeTest) for puntoDeTest in puntosDeTest: loskvecinos = vecinos(puntosDeEntrenamiento, puntoDeTest, k) claseDelPunto = prediccion(puntoDeTest, loskvecinos) totalElementos = totalElementos + 1 if (claseDelPunto == puntoDeTest[-1]): aciertos = aciertos + 1 progreso = totalElementos n = int((progreso * 100) / total) progress_callback.emit(n) porcentajeDeAciertos = (aciertos / totalElementos) * 100 self.resultadosTestMetodo.append((k, porcentajeDeAciertos))