11eimilia11

FUNCEOS ML

Jan 16th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 13.51 KB | None | 0 0
  1. import pandas as pd
  2. import cv2
  3. from sklearn import preprocessing
  4. from sklearn.neighbors import KNeighborsClassifier
  5. from scipy import stats
  6. from sklearn.naive_bayes import GaussianNB
  7. from sklearn.tree import DecisionTreeClassifier
  8. from sklearn.svm import SVC
  9. import statistics
  10. from sklearn.metrics import pairwise_distances_argmin_min
  11. import numpy as np
  12. from random import randint
  13. import matplotlib.pyplot as plt
  14. import numpy as np
  15. import cv2
  16. from sklearn.decomposition import PCA
  17. import glob
  18. from sklearn.metrics import pairwise_distances_argmin_min
  19.  
  20. from sklearn.metrics import accuracy_score
  21. from operator import itemgetter
  22.  
  23.  
  24. # função que calcula a quantidade de elementos por classe
  25. # a partir do data frame original, o nome da classe e a classificação
  26.  
  27. def quantidade_por_classe (dados, nome_classe, classe):
  28.     cont = 0
  29.     for x in range(len(dados.index)):
  30.         if (dados[nome_classe].iloc[x] == classe):
  31.             cont += 1
  32.     return cont
  33. # função de inicialização do algoritmo KNN , recebe o k
  34. # e a distância que vai ser usada como referência
  35.  
  36. def inicializacao_KNN (k):
  37.  
  38.     knn = KNeighborsClassifier(n_neighbors=k, metric='euclidean')
  39.     return knn
  40.  
  41.  
  42. # função de normalização dos dados usando o modelo de
  43. # normalização por reescala
  44.  
  45. def normalizar(dados):
  46.     x = dados.values
  47.     min_max_scaler = preprocessing.MinMaxScaler()
  48.     x_scaled = min_max_scaler.fit_transform(x)
  49.     dados_norm = pd.DataFrame(x_scaled)
  50.     return dados_norm
  51.  
  52. # função que calcula os valores de média, moda , mediana e desvio padrão
  53. # para os vetores de acerto de um algoritmo, recebe como parâmetro o vetor
  54. # de acerto e o nome do algoritmo
  55.  
  56. def tendencia_central (nomeAlgoritmo, vetorAcerto, vetorTempo):
  57.     print('________________________________________________\n')
  58.     print(nomeAlgoritmo)
  59.     print('Tempo Média = ', np.mean(vetorTempo))
  60.     print('Tempo Desvio padrão = ', statistics.pstdev(vetorTempo))
  61.     print('Tempo Moda = ', stats.mode(vetorTempo, axis=None))
  62.     print('Tempo Mediana =', np.median(vetorTempo))
  63.     print('----------------------------------------------')
  64.     print('Acurácia Média = ', np.mean(vetorAcerto))
  65.     print('Acurácia Desvio padrão = ', statistics.pstdev(vetorAcerto))
  66.     print('Acurácia Moda = ', stats.mode(vetorAcerto, axis=None))
  67.     print('Acurácia Mediana = ', np.median(vetorAcerto))
  68.  
  69.     print('________________________________________________\n')
  70.  
  71. # função que cria amostras estratificadas a partir
  72. # dos Data frame, o tamanho desejado para a amostra
  73. # e a classe dos dados
  74.  
  75. def amostra_estrat(dados, tamanho_amostra, classe):
  76.     classes = dados[classe].unique()
  77.     qtde_por_classe = round(tamanho_amostra / len(classes))
  78.     amostras_por_classe = []
  79.     for c in classes:
  80.         indices_c = dados[classe] == c
  81.         obs_c = dados[indices_c]
  82.         amostra_c = obs_c.sample(qtde_por_classe)
  83.         amostras_por_classe.append(amostra_c)
  84.  
  85.     amostra_estratificada = pd.concat(amostras_por_classe)
  86.     return amostra_estratificada
  87.  
  88. # função que realiza o treinamento dos algoritmos usados na base de dados
  89.  
  90. def treinaralgoritmos(noclass_train, class_train , tree, knnp1 , knnp2 , knnp3, knn1 , knn2 , knn3, naive, svmlinear , svmrbf):
  91.  
  92.     knn1.fit(noclass_train, class_train)
  93.     knn2.fit(noclass_train, class_train)
  94.     knn3.fit(noclass_train, class_train)
  95.     naive.fit(noclass_train, class_train)
  96.     tree.fit(noclass_train, class_train)
  97.     knnp1.fit(noclass_train, class_train)
  98.     knnp2.fit(noclass_train, class_train)
  99.     knnp3.fit(noclass_train, class_train)
  100.     svmlinear.fit(noclass_train, class_train)
  101.     svmrbf.fit(noclass_train, class_train)
  102.  
  103. # função de inicialização do algoritmo KNN Ponderado
  104. # recebe como parâmentro o valor do k
  105.  
  106. def inicializando_KNNW (k):
  107.  
  108.     knnp = KNeighborsClassifier(n_neighbors=k, weights='distance', metric='euclidean')
  109.     return knnp
  110.  
  111.  
  112.  
  113. def geneticlabels(dataframe,centers):
  114.     return pairwise_distances_argmin_min(dataframe,centers,metric='minkowski')
  115.  
  116. def find_clusters(X, n_clusters, rng, max_it):
  117.  
  118.     i = rng.permutation(X.shape[0])[:n_clusters]
  119.     centers = X[i]
  120.  
  121.     max_iterator = 0
  122.     distances = []
  123.     while True:
  124.  
  125.         labels,distance = pairwise_distances_argmin_min(X,centers,metric='minkowski')
  126.         distances.append(distance)
  127.  
  128.         new_centers = np.array([X[labels == i].mean(0)
  129.                                 for i in range(n_clusters)])
  130.  
  131.  
  132.         if np.all(centers == new_centers) or max_iterator > max_it:
  133.             break
  134.         centers = new_centers
  135.         max_iterator += 1
  136.  
  137.     return centers, labels, distances
  138.  
  139. def accuracy_majority_vote(base, predict_labels, real_labels, n_clusters):
  140.  
  141.     classes = real_labels.unique()
  142.  
  143.     majority = []
  144.     groups = []
  145.     k = 0
  146.     for i in range(n_clusters):
  147.         group = []
  148.         for a in range(len(base)):
  149.             if predict_labels[a] == i:
  150.                 group.append(real_labels[a])
  151.         groups.append(group)
  152.         majority.append(initialize_dic_majority(classes))
  153.         for real_label in group:
  154.             majority[k][real_label] += 1
  155.         k += 1
  156.  
  157.     label_groups = []
  158.     for m in majority:
  159.         label_groups.append(max(m.items(), key=itemgetter(1))[0])
  160.  
  161.     pred_labels = []
  162.     true_labels = []
  163.     for g in range(len(groups)):
  164.         pred_labels = pred_labels + ([label_groups[g]]*len(groups[g]))
  165.         true_labels = true_labels + [a for a in groups[g]]
  166.  
  167.     return accuracy_score(pred_labels, true_labels)
  168.  
  169.  
  170. def find_clustersGENETIC(X, n_clusters, max_it, array):
  171.  
  172.     centers = array
  173.  
  174.     max_iterator = 0
  175.     distances = []
  176.     while True:
  177.  
  178.         labels,distance = pairwise_distances_argmin_min(X,centers,metric='minkowski')
  179.         distances.append(distance)
  180.  
  181.         new_centers = np.array([X[labels == i].mean(0)
  182.                                 for i in range(n_clusters)])
  183.  
  184.  
  185.         if np.all(centers == new_centers) or max_iterator > max_it:
  186.             break
  187.         centers = new_centers
  188.         max_iterator += 1
  189.  
  190.     return centers, labels, distances
  191.  
  192. # Carregando fotos da pasta
  193. def loadFiles(path, array):
  194.  
  195.     for i in glob.glob(path):
  196.  
  197.         img = cv2.imread(i)
  198.         array.append(img)
  199.  
  200.     return array
  201.  
  202. # Função que aplic o filtro blur nas fotos do array
  203. def blurConversion(arrayphotos ,val1, val2):
  204.  
  205.     for x in range(len(arrayphotos)):
  206.         arrayphotos[x] = cv2.GaussianBlur(arrayphotos[x],(val1,val1), val2)
  207.  
  208.     return arrayphotos
  209.  
  210. #Função que faz a binarização das fotos
  211. def binaryConversion(arrayphotos,threshold,val1):
  212.  
  213.     for x in range(len(arrayphotos)):
  214.         arrayphotos[x] = cv2.adaptiveThreshold(arrayphotos[x],threshold,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,val1,10)
  215.  
  216.     return arrayphotos
  217.  
  218. #Função que inverte as fotos binárias
  219. def invertConversion(arrayphotos):
  220.  
  221.     for x in range(len(arrayphotos)):
  222.         arrayphotos[x] = cv2.bitwise_not(arrayphotos[x])
  223.  
  224.     return arrayphotos
  225.  
  226. # Função que faz o filtro cinza nas fotos
  227. def grayConversion(arrayphotos):
  228.  
  229.     size = len(arrayphotos)
  230.     for x in range (0,size):
  231.         arrayphotos[x] = cv2.cvtColor(arrayphotos[x], cv2.COLOR_BGR2GRAY)
  232.  
  233.     return arrayphotos
  234.  
  235. # Função de extração de características
  236. def extractCarac (imagensVector):
  237.     shapesTotal = []
  238.     for i in imagensVector:
  239.         shape1 = []
  240.         im2, contours, hierarchy = cv2.findContours(i, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  241.  
  242.         perimeter = cv2.arcLength(contours[0], True)
  243.  
  244.         approx = cv2.approxPolyDP(contours[0], 0.04*perimeter, True)
  245.  
  246.         #area = cv2.contourArea(contours[0])
  247.  
  248.         #shape1.append(area)
  249.         shape1.append(perimeter)
  250.         shape1.append(len(approx))
  251.  
  252.         m = cv2.moments(i)
  253.         #cX = int((m['m10']/m['m00']))
  254.         #cY = int((m['m01']/m['m00']))
  255.  
  256.         #shape1.append(cX)
  257.         #shape1.append(cY)
  258.  
  259.         moments = cv2.HuMoments(m, True).flatten()
  260.  
  261.         for x in moments:
  262.             shape1.append(x)
  263.  
  264.         shapesTotal.append(shape1)
  265.  
  266.     return shapesTotal
  267.  
  268. def WCSSgenetic(x, population):
  269.  
  270.     arrayint = []
  271.     for a in x:
  272.         arrayint.append(int(a))
  273.  
  274.     print(arrayint)
  275.     soma = 0
  276.     for b in arrayint:
  277.         labels, distances = pairwise_distances_argmin_min(population[b],population, metric='minkowski')
  278.         for x in distances:
  279.             soma += x**2
  280.     return soma
  281.  
  282.  
  283. def generatepopulation(X,numberpopu, K, rng):
  284.  
  285.     population = []
  286.  
  287.     for x in range(numberpopu):
  288.         first = rng.permutation(X.shape[0])[:K]
  289.         print(first)
  290.         population.append(np.concatenate(X[first]))
  291.  
  292.     return population
  293.  
  294.  
  295. def find_clusters(X, n_clusters, rng, max_it):
  296.  
  297.     i = rng.permutation(X.shape[0])[:n_clusters]
  298.     centers = X[i]
  299.  
  300.     max_iterator = 0
  301.     distances = []
  302.     while True:
  303.  
  304.         labels,distance = pairwise_distances_argmin_min(X,centers,metric='minkowski')
  305.         distances.append(distance)
  306.  
  307.         new_centers = np.array([X[labels == i].mean(0)
  308.                                 for i in range(n_clusters)])
  309.  
  310.         if np.all(centers == new_centers) or max_iterator > max_it:
  311.             break
  312.         centers = new_centers
  313.         max_iterator += 1
  314.  
  315.     return centers, labels, distances
  316.  
  317.  
  318. def find_clustersgenetic(X, n_clusters, max_it, array):
  319.  
  320.     centers = array
  321.  
  322.     max_iterator = 0
  323.     distances = []
  324.     while True:
  325.  
  326.         labels,distance = pairwise_distances_argmin_min(X,centers,metric='minkowski')
  327.         distances.append(distance)
  328.  
  329.         new_centers = np.array([X[labels == i].mean(0)
  330.                                 for i in range(n_clusters)])
  331.  
  332.         if np.all(centers == new_centers) or max_iterator > max_it:
  333.             break
  334.         centers = new_centers
  335.         max_iterator += 1
  336.  
  337.     return centers, labels, distances
  338.  
  339.  
  340. #FUNÇÃO DE NORMALIZAÇÃO
  341.  
  342.  
  343. def normalize(df1):
  344.     x = df1.values.astype(float)
  345.     min_max_scaler = preprocessing.MinMaxScaler()
  346.     scaled = min_max_scaler.fit_transform(x)
  347.     df_normalized = pd.DataFrame(scaled)
  348.     return df_normalized
  349.  
  350. def normalizearray(array):
  351.     scaled = preprocessing.MinMaxScaler().fit_transform(array)
  352.     return scaled
  353.  
  354. def normalizeArrayofArrays(arrayphotos):
  355.  
  356.     size = len(arrayphotos)
  357.     for x in range (0,size):
  358.         arrayphotos[x] = preprocessing.MinMaxScaler().fit_transform(arrayphotos[x])
  359.  
  360.     return arrayphotos
  361.  
  362. def PCAarray(pcanumber, arrayphotos):
  363.  
  364.     pca = PCA(n_components=pcanumber)
  365.     size = len(arrayphotos)
  366.     for x in range (0,size):
  367.         arrayphotos[x] = pca.fit_transform(arrayphotos[x])
  368.  
  369.     return arrayphotos
  370.  
  371. def PCAarrayONLY(pcanumber, arrayphotos):
  372.  
  373.     pca = PCA(n_components=pcanumber)
  374.     arrayphotos = pca.fit_transform(arrayphotos)
  375.  
  376.     return arrayphotos
  377.  
  378. def PCAdataframe(pcanumber,dataframe):
  379.  
  380.     pca = PCA(n_components=pcanumber)
  381.     dataframe = pca.fit_transform(dataframe)
  382.  
  383.     return dataframe
  384.  
  385. def pca1darray(pcanumber,array):
  386.     pca = PCA(n_components=pcanumber)
  387.     pca.fit(array)
  388.     array = pca.transform(array)
  389.  
  390.     return array
  391.  
  392. def Turntogray(arrayphotos):
  393.  
  394.     size = len(arrayphotos)
  395.     for x in range (0,size):
  396.         arrayphotos[x] = cv2.cvtColor(arrayphotos[x], cv2.COLOR_BGR2GRAY)
  397.  
  398.     return arrayphotos
  399.  
  400.  
  401. def gaussianblurArray(arrayphotos,val1,val2):
  402.  
  403.     for x in range(len(arrayphotos)):
  404.         arrayphotos[x] = cv2.GaussianBlur(arrayphotos[x],(val1,val1), val2)
  405.  
  406.     return arrayphotos
  407.  
  408. def binaryadaptive(arrayphotos,threshold,val1):
  409.  
  410.     for x in range(len(arrayphotos)):
  411.         arrayphotos[x] = cv2.adaptiveThreshold(arrayphotos[x],threshold,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,val1,10)
  412.  
  413.     return arrayphotos
  414.  
  415. def initialize_dic_majority(classes):
  416.     majority = {}
  417.     for c in classes:
  418.         majority[c] = 0
  419.  
  420.     return majority
  421.  
  422. def invertbinaryphotos(arrayphotos):
  423.  
  424.     for x in range(len(arrayphotos)):
  425.         arrayphotos[x] = cv2.bitwise_not(arrayphotos[x])
  426.  
  427.     return arrayphotos
  428.  
  429.  
  430. def loadfolderimgs(path):
  431.  
  432.     arrayphotos = []
  433.  
  434.     for img in glob.glob(path):
  435.         n = cv2.imread(img)
  436.         arrayphotos.append(n)
  437.  
  438.     return arrayphotos
  439.  
  440.  
  441. def imgtoarray(arrayphotos):
  442.  
  443.     size = len(arrayphotos)
  444.     for x in range (0,size):
  445.         arrayphotos[x] = np.array(arrayphotos[x] , dtype=float)
  446.  
  447.     return arrayphotos
  448.  
  449. def gethumoments(arrayphotos):
  450.  
  451.     for x in range(len(arrayphotos)):
  452.  
  453.         arrayphotos[x] = cv2.HuMoments(cv2.moments(arrayphotos[x]), True).flatten()
  454.  
  455.     return arrayphotos
  456.  
  457. def WCSS2(distance):
  458.     soma = 0
  459.     for x in distance:
  460.         soma += x ** 2
  461.  
  462.     return soma
  463.  
  464. def extratorcaracteristicafiggeometrica(arrayimgs):
  465.  
  466.     squarescarac = []
  467.  
  468.     for x in arrayimgs:
  469.  
  470.         aux = []
  471.  
  472.         im2, countours, hierachy = cv2.findContours(x, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  473.  
  474.         peri = cv2.arcLength(countours[0], True)  # perimetro
  475.         aux.append(peri)
  476.  
  477.         aproxx = cv2.approxPolyDP(countours[0], 0.04 * peri, True)  # vertices
  478.         vertc = len(aproxx)
  479.         aux.append(vertc)
  480.  
  481.         area = cv2.contourArea(countours[0])  # area
  482.         aux.append(area)
  483.  
  484.         momentum = cv2.moments(x)
  485.  
  486.         #cX = int(momentum["m10"] / momentum["m00"])
  487.         #cY = int(momentum["m01"] / momentum["m00"])
  488.  
  489.         #aux.append(cX)
  490.         #aux.append(cY)
  491.  
  492.         moments = cv2.HuMoments(momentum, True).flatten()
  493.  
  494.         for i in moments:
  495.             aux.append(i)
  496.  
  497.         squarescarac.append(aux)
  498.  
  499.  
  500.     return squarescarac
Add Comment
Please, Sign In to add comment