11eimilia11

FuncoesML

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