def __init__(self):
     self.datos = Datos()
     self.datos.datosConEnterosNormalizados()
     self.entradaDeseada = self.datos.Datos
     self.salidaDeseada = self.datos.Resultado
     X = self.datos.Datos
     y = self.datos.Resultado
     C = 1.0
     self.models = (svm.SVC(kernel='linear', C=C),
               svm.LinearSVC(C=C),
               svm.SVC(kernel='rbf', gamma=0.7, C=C),
               svm.SVC(kernel='poly', degree=3, C=C))
     titles = ('SVC with linear kernel',
               'LinearSVC (linear kernel)',
               'SVC with RBF kernel',
               'SVC with polynomial (degree 3) kernel')
 def GenerarModelos(self):
     self.datos = Datos()
     self.datos.datosConEnterosNormalizados()
     self.entradaDeseada = self.datos.Datos
     self.salidaDeseada = self.datos.Resultado
     X = self.datos.Datos
     y = self.datos.Resultado
     X,X_test,y,y_test =  train_test_split(X, y, test_size=.8,
                                                 random_state=0)
     C = 1.0  # SVM regularization parameter
     self.models = (svm.SVC(kernel='linear', C=C),
               svm.SVC(kernel='rbf', gamma=0.7, C=C))
     
     titles = ('SVC with linear kernel',
               'SVC with RBF kernel')
     
     for key in (0,1,2,3):
         print(titles[key])
         model = self.models[key].fit(X, y)
         score = model.score(X_test,y_test)
         Y_resultado = model.decision_function(X_test)
         fpr, tpr, _ = roc_curve(y_test, Y_resultado)
         roc_auc = auc(fpr, tpr)
         plt.figure()
         lw = 2
         plt.plot(fpr, tpr, color='darkorange',
                  lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
         plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
         plt.xlim([0.0, 1.0])
         plt.ylim([0.0, 1.05])
         plt.xlabel('False Positive Rate')
         plt.ylabel('True Positive Rate')
         plt.title(" {} ---->  precisión: {}".format(titles[key], score))
         plt.legend(loc="lower right")
         plt.show()
         
         score = model.score(X,y)
         print(score)
         self.generarMatrizDeConfusion(model)
 def GenerarDatosParaPrueba(self):
     datos = Datos()
     datos.datosConEnterosNormalizados()
     self.entradaDeseada = datos.Datos
     elementos = np.random.permutation(math.ceil(len(self.entradaDeseada)))
     self.x0.setText(str(self.entradaDeseada[elementos[0]][0]))
     self.x1.setText(str(self.entradaDeseada[elementos[0]][1]))
     self.x2.setText(str(self.entradaDeseada[elementos[0]][2]))
     self.x3.setText(str(self.entradaDeseada[elementos[0]][3]))
     self.x4.setText(str(self.entradaDeseada[elementos[0]][4]))
     self.x5.setText(str(self.entradaDeseada[elementos[0]][5]))
     self.x6.setText(str(self.entradaDeseada[elementos[0]][6]))
     self.x7.setText(str(self.entradaDeseada[elementos[0]][7]))
     self.x8.setText(str(self.entradaDeseada[elementos[0]][8]))
     self.x9.setText(str(self.entradaDeseada[elementos[0]][9]))
     self.x10.setText(str(self.entradaDeseada[elementos[0]][10]))
     self.x11.setText(str(self.entradaDeseada[elementos[0]][11]))
     self.x12.setText(str(self.entradaDeseada[elementos[0]][12]))
     self.x13.setText(str(self.entradaDeseada[elementos[0]][13]))
     self.x14.setText(str(self.entradaDeseada[elementos[0]][14]))
     self.x15.setText(str(self.entradaDeseada[elementos[0]][15]))
     self.x16.setText(str(self.entradaDeseada[elementos[0]][16]))
     self.x17.setText(str(self.entradaDeseada[elementos[0]][17]))
     self.x18.setText(str(self.entradaDeseada[elementos[0]][18]))
 def ConsultaAG(self):
     entrada = [
         float(self.x0.text()),
         float(self.x1.text()),
         float(self.x2.text()),
         float(self.x3.text()),
         float(self.x4.text()),
         float(self.x5.text()),
         float(self.x6.text()),
         float(self.x7.text()),
         float(self.x8.text()),
         float(self.x9.text()),
         float(self.x10.text()),
         float(self.x11.text()),
         float(self.x12.text()),
         float(self.x13.text()),
         float(self.x14.text()),
         float(self.x15.text()),
         float(self.x16.text()),
         float(self.x17.text()),
         float(self.x18.text())
     ]
     datos = Datos()
     entradaNormalizada = datos.Convertir19A55(entrada)
     algoritmoGenetico = RedNeuronal()
     Y_resultado, y = algoritmoGenetico.ProbarModeloAlgoritmosGeneticos()
     salida, a, b, c = algoritmoGenetico.RedNeuronal1CapaOculta(
         entradaNormalizada)
     resultado = "Positivo" if round(salida) == 1 else "Negativo"
     _translate = QtCore.QCoreApplication.translate
     self.label_45.setText(
         _translate(
             "MainWindow",
             "<html><head/><body><p><span style=\" font-size:12pt;\">" +
             resultado + "  " + str(salida) +
             "</span></p><p><br/></p></body></html>"))
class SVM(object):
    def __init__(self):
        self.datos = Datos()
        self.datos.datosConEnterosNormalizados()
        self.entradaDeseada = self.datos.Datos
        self.salidaDeseada = self.datos.Resultado
        X = self.datos.Datos
        y = self.datos.Resultado
        C = 1.0
        self.models = (svm.SVC(kernel='linear', C=C),
                  svm.LinearSVC(C=C),
                  svm.SVC(kernel='rbf', gamma=0.7, C=C),
                  svm.SVC(kernel='poly', degree=3, C=C))
        titles = ('SVC with linear kernel',
                  'LinearSVC (linear kernel)',
                  'SVC with RBF kernel',
                  'SVC with polynomial (degree 3) kernel')
    
    def GenerarModelos(self):
        self.datos = Datos()
        self.datos.datosConEnterosNormalizados()
        self.entradaDeseada = self.datos.Datos
        self.salidaDeseada = self.datos.Resultado
        X = self.datos.Datos
        y = self.datos.Resultado
        X,X_test,y,y_test =  train_test_split(X, y, test_size=.8,
                                                    random_state=0)
        C = 1.0  # SVM regularization parameter
        self.models = (svm.SVC(kernel='linear', C=C),
                  svm.SVC(kernel='rbf', gamma=0.7, C=C))
        
        titles = ('SVC with linear kernel',
                  'SVC with RBF kernel')
        
        for key in (0,1,2,3):
            print(titles[key])
            model = self.models[key].fit(X, y)
            score = model.score(X_test,y_test)
            Y_resultado = model.decision_function(X_test)
            fpr, tpr, _ = roc_curve(y_test, Y_resultado)
            roc_auc = auc(fpr, tpr)
            plt.figure()
            lw = 2
            plt.plot(fpr, tpr, color='darkorange',
                     lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
            plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
            plt.xlim([0.0, 1.0])
            plt.ylim([0.0, 1.05])
            plt.xlabel('False Positive Rate')
            plt.ylabel('True Positive Rate')
            plt.title(" {} ---->  precisión: {}".format(titles[key], score))
            plt.legend(loc="lower right")
            plt.show()
            
            score = model.score(X,y)
            print(score)
            self.generarMatrizDeConfusion(model)
            #filename = titles[key]+'PruebaDatosRetinopatia.sav'
            #pickle.dump(self.models[key], open(filename, 'wb'))
    
    def generarMatrizDeConfusion(self,model ,porcentajePrueba = 0):
        self.matrizDeConfusion = [[0,0],[0,0]]
        if porcentajePrueba == 0:
            elementos = len(self.entradaDeseada)
        else:
            elementos = np.random.permutation(math.ceil(len(self.entradaDeseada)*porcentajePrueba)) # lista desordenada para el test
        self.error=0
        for j in range(elementos):
            entrada = self.entradaDeseada[j]
            salidaEsperada = self.salidaDeseada[j]
            salida = model.predict([entrada])[0];
            self.error += 0.5*(salida - salidaEsperada)**2
            self.matrizDeConfusion[round(salida)][salidaEsperada] += 1
            #print("salida {} salidadeseada {}".format(salida,salidaEsperada))
            
        print("matriz de confusion")
        print(self.matrizDeConfusion[0])
        print(self.matrizDeConfusion[1])
        
        self.precision =  (self.matrizDeConfusion[0][0] + self.matrizDeConfusion[1][1] )/elementos
        self.specificity = self.matrizDeConfusion[0][0] / (self.matrizDeConfusion[0][0] + self.matrizDeConfusion[1][0])
        self.sensitivity = self.matrizDeConfusion[1][1] / (self.matrizDeConfusion[1][1] + self.matrizDeConfusion[0][1])
        
        print(self.precision,self.sensitivity,self.specificity)
            
        
    def probarKernelLineal(self):
        X = self.datos.Datos
        y = self.datos.Resultado
        loaded_model_SVM = pickle.load(open("../SVM/SVC with linear kernelPruebaDatosRetinopatia.sav", 'rb'))
        Y_resultado = loaded_model_SVM.decision_function(X)
        fprSVM, tprSVM, _ = roc_curve(y, Y_resultado)
        self.roc_aucSVM = auc(fprSVM, tprSVM)
        self.generarMatrizDeConfusion(loaded_model_SVM)
        
    def PredictKernelLineal(self,entrada):
        loaded_model_SVM = pickle.load(open("../SVM/SVC with linear kernelPruebaDatosRetinopatia.sav", 'rb'))
        Y_resultado = loaded_model_SVM.predict([entrada])[0]
        return Y_resultado
Exemple #6
0
 def __init__(self):
     self.datos = Datos()
     self.datos.datosConEnterosNormalizados()
     self.entradaDeseada = self.datos.Datos
     self.salidaDeseada = self.datos.Resultado
Exemple #7
0
class Plot_roc:
    def __init__(self):
        self.datos = Datos()
        self.datos.datosConEnterosNormalizados()
        self.entradaDeseada = self.datos.Datos
        self.salidaDeseada = self.datos.Resultado

    def plot_roc_completa(self):
        X = self.datos.Datos
        y = self.datos.Resultado

        # cargar el modelo de SVM
        loaded_model_SVM = pickle.load(
            open("../SVM/SVC with linear kernelPruebaDatosRetinopatia.sav",
                 'rb'))
        Y_resultado = loaded_model_SVM.decision_function(X)
        fprSVM, tprSVM, _ = roc_curve(y, Y_resultado)
        roc_aucSVM = auc(fprSVM, tprSVM)

        #Cargar el modelo de Red neuronal entrenada por backpropagation
        backpropagation = RedNeuronal()
        Y_resultado, y = backpropagation.ProbarModeloBackpropagation()
        fprBP, tprBP, _ = roc_curve(y, Y_resultado)
        roc_aucBP = auc(fprBP, tprBP)

        #Cargar el modelo de red neuronal entrenada por algoritmos genéticos
        algoritmoGenetico = RedNeuronal()
        Y_resultado, y = algoritmoGenetico.ProbarModeloAlgoritmosGeneticos()
        fprAG, tprAG, _ = roc_curve(y, Y_resultado)
        roc_aucAG = auc(fprAG, tprAG)

        plt.figure()
        lw = 2
        plt.plot(fprAG,
                 tprAG,
                 color='darkorange',
                 lw=lw,
                 label='Algoritmos Genéticos (área = %0.2f)' %
                 roc_aucAG)  #plot roc Algoritmos genéticos

        plt.plot(fprBP,
                 tprBP,
                 label='Backpropagation (área = {0:0.2f})'
                 ''.format(roc_aucBP),
                 color='deeppink',
                 linestyle=':',
                 linewidth=4)  #plot roc Backpropagation

        plt.plot(fprSVM,
                 tprSVM,
                 label='SVM (área = {0:0.2f})'
                 ''.format(roc_aucSVM),
                 color='navy',
                 linestyle='-.',
                 linewidth=2)

        plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
        plt.xlim([0.0, 1.0])
        plt.ylim([0.0, 1.05])
        plt.xlabel('Ratio Falsos Positivos')
        plt.ylabel('Ratio Verdaderos Positivos')
        plt.title("Comparación")
        plt.legend(loc="lower right")
        plt.show()