Advertisement
11eimilia11

Funcoes ML update

Dec 17th, 2018
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.54 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 glob
  14.  
  15.  
  16. # função que calcula a quantidade de elementos por classe
  17. # a partir do data frame original, o nome da classe e a classificação
  18.  
  19. def quantidade_por_classe (dados, nome_classe, classe):
  20.     cont = 0
  21.     for x in range(len(dados.index)):
  22.         if (dados[nome_classe].iloc[x] == classe):
  23.             cont += 1
  24.     return cont
  25. # função de inicialização do algoritmo KNN , recebe o k
  26. # e a distância que vai ser usada como referência
  27.  
  28. def inicializacao_KNN (k):
  29.  
  30.     knn = KNeighborsClassifier(n_neighbors=k, metric='euclidean')
  31.     return knn
  32.  
  33.  
  34. # função de normalização dos dados usando o modelo de
  35. # normalização por reescala
  36.  
  37. def normalizar(dados):
  38.     x = dados.values
  39.     min_max_scaler = preprocessing.MinMaxScaler()
  40.     x_scaled = min_max_scaler.fit_transform(x)
  41.     dados_norm = pd.DataFrame(x_scaled)
  42.     return dados_norm
  43.  
  44. # função que calcula os valores de média, moda , mediana e desvio padrão
  45. # para os vetores de acerto de um algoritmo, recebe como parâmetro o vetor
  46. # de acerto e o nome do algoritmo
  47.  
  48. def tendencia_central (nomeAlgoritmo, vetorAcerto, vetorTempo):
  49.     print('________________________________________________\n')
  50.     print(nomeAlgoritmo)
  51.     print('Tempo médio = ', np.mean(vetorTempo))
  52.     print('Média = ', np.mean(vetorAcerto))
  53.     print('Mediana = ', np.median(vetorAcerto))
  54.     print('Moda = ', stats.mode(vetorAcerto, axis=None))
  55.     print('Desvio padrão = ', statistics.pstdev(vetorAcerto))
  56.     print('________________________________________________\n')
  57.  
  58. # função que cria amostras estratificadas a partir
  59. # dos Data frame, o tamanho desejado para a amostra
  60. # e a classe dos dados
  61.  
  62. def amostra_estrat(dados, tamanho_amostra, classe):
  63.     classes = dados[classe].unique()
  64.     qtde_por_classe = round(tamanho_amostra / len(classes))
  65.     amostras_por_classe = []
  66.     for c in classes:
  67.         indices_c = dados[classe] == c
  68.         obs_c = dados[indices_c]
  69.         amostra_c = obs_c.sample(qtde_por_classe)
  70.         amostras_por_classe.append(amostra_c)
  71.  
  72.     amostra_estratificada = pd.concat(amostras_por_classe)
  73.     return amostra_estratificada
  74.  
  75. # função que realiza o treinamento dos algoritmos usados na base de dados
  76.  
  77. def treinaralgoritmos(noclass_train, class_train , tree, knnp1 , knnp2 , knnp3, knn1 , knn2 , knn3, naive, svmlinear , svmrbf):
  78.  
  79.     knn1.fit(noclass_train, class_train)
  80.     knn2.fit(noclass_train, class_train)
  81.     knn3.fit(noclass_train, class_train)
  82.     naive.fit(noclass_train, class_train)
  83.     tree.fit(noclass_train, class_train)
  84.     knnp1.fit(noclass_train, class_train)
  85.     knnp2.fit(noclass_train, class_train)
  86.     knnp3.fit(noclass_train, class_train)
  87.     svmlinear.fit(noclass_train, class_train)
  88.     svmrbf.fit(noclass_train, class_train)
  89.  
  90. # função de inicialização do algoritmo KNN Ponderado
  91. # recebe como parâmentro o valor do k
  92.  
  93. def inicializando_KNNW (k):
  94.  
  95.     knnp = KNeighborsClassifier(n_neighbors=k, weights='distance', metric='euclidean')
  96.     return knnp
  97.  
  98.  
  99. def find_clusters(X, n_clusters, rng, max_it):
  100.  
  101.     i = rng.permutation(X.shape[0])[:n_clusters]
  102.     centers = X[i]
  103.  
  104.     max_iterator = 0
  105.     distances = []
  106.     while True:
  107.  
  108.         labels,distance = pairwise_distances_argmin_min(X,centers,metric='minkowski')
  109.         distances.append(distance)
  110.  
  111.         new_centers = np.array([X[labels == i].mean(0)
  112.                                 for i in range(n_clusters)])
  113.  
  114.  
  115.         if np.all(centers == new_centers) or max_iterator > max_it:
  116.             break
  117.         centers = new_centers
  118.         max_iterator += 1
  119.  
  120.     return centers, labels, distances
  121.  
  122.  
  123. def find_clustersGENETIC(X, n_clusters, max_it, array):
  124.  
  125.     centers = array
  126.  
  127.     max_iterator = 0
  128.     distances = []
  129.     while True:
  130.  
  131.         labels,distance = pairwise_distances_argmin_min(X,centers,metric='minkowski')
  132.         distances.append(distance)
  133.  
  134.         new_centers = np.array([X[labels == i].mean(0)
  135.                                 for i in range(n_clusters)])
  136.  
  137.  
  138.         if np.all(centers == new_centers) or max_iterator > max_it:
  139.             break
  140.         centers = new_centers
  141.         max_iterator += 1
  142.  
  143.     return centers, labels, distances
  144.  
  145. # Carregando fotos da pasta
  146. def loadFiles(path, array):
  147.  
  148.     for i in glob.glob(path):
  149.  
  150.         img = cv2.imread(i)
  151.         array.append(img)
  152.  
  153.     return array
  154.  
  155. # Função que aplic o filtro blur nas fotos do array
  156. def blurConversion(arrayphotos ,val1, val2):
  157.  
  158.     for x in range(len(arrayphotos)):
  159.         arrayphotos[x] = cv2.GaussianBlur(arrayphotos[x],(val1,val1), val2)
  160.  
  161.     return arrayphotos
  162.  
  163. #Função que faz a binarização das fotos
  164. def binaryConversion(arrayphotos,threshold,val1):
  165.  
  166.     for x in range(len(arrayphotos)):
  167.         arrayphotos[x] = cv2.adaptiveThreshold(arrayphotos[x],threshold,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,val1,10)
  168.  
  169.     return arrayphotos
  170.  
  171. #Função que inverte as fotos binárias
  172. def invertConversion(arrayphotos):
  173.  
  174.     for x in range(len(arrayphotos)):
  175.         arrayphotos[x] = cv2.bitwise_not(arrayphotos[x])
  176.  
  177.     return arrayphotos
  178.  
  179. # Função que faz o filtro cinza nas fotos
  180. def grayConversion(arrayphotos):
  181.  
  182.     size = len(arrayphotos)
  183.     for x in range (0,size):
  184.         arrayphotos[x] = cv2.cvtColor(arrayphotos[x], cv2.COLOR_BGR2GRAY)
  185.  
  186.     return arrayphotos
  187.  
  188. # Função de extração de características
  189. def extractCarac (imagensVector):
  190.     shapesTotal = []
  191.     for i in imagensVector:
  192.         shape1 = []
  193.         im2, contours, hierarchy = cv2.findContours(i, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  194.  
  195.         perimeter = cv2.arcLength(contours[0], True)
  196.  
  197.         approx = cv2.approxPolyDP(contours[0], 0.04*perimeter, True)
  198.  
  199.         # area = cv2.contourArea(contours[0])
  200.         #
  201.         # shape1.append(area)
  202.         shape1.append(perimeter)
  203.         shape1.append(len(approx))
  204.  
  205.         m = cv2.moments(i)
  206.         cX = int((m['m10']/m['m00']))
  207.         cY = int((m['m01']/m['m00']))
  208.  
  209.         shape1.append(cX)
  210.         shape1.append(cY)
  211.  
  212.         moments = cv2.HuMoments(m, True).flatten()
  213.  
  214.         for x in moments:
  215.             shape1.append(x)
  216.  
  217.         shapesTotal.append(shape1)
  218.  
  219.     return shapesTotal
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement