Advertisement
11eimilia11

ml l04

Dec 17th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 15.82 KB | None | 0 0
  1. import cv2
  2. import numpy as np
  3. from Lista02 import FuncoesML as fun
  4. import pandas as pd
  5. from sklearn.model_selection import KFold
  6. from sklearn.neighbors import KNeighborsClassifier
  7. from sklearn.tree import DecisionTreeClassifier
  8. from sklearn.naive_bayes import GaussianNB
  9. from sklearn.svm import SVC
  10. import time
  11. from sklearn.linear_model import LogisticRegression
  12. from scipy.stats import friedmanchisquare
  13. from scipy.stats import kruskal
  14. from sklearn.neural_network import MLPClassifier
  15.  
  16. # Carregando as imagens de cada tipo das pastas e salvando em vetores
  17. circles = []
  18. circles = fun.loadFiles('C:/Users/Auricelia/Desktop/2d_geometric_shapes_dataset/circles/*.jpg', circles)
  19.  
  20. ellipsis = []
  21. ellipsis = fun.loadFiles('C:/Users/Auricelia/Desktop/2d_geometric_shapes_dataset/ellipses/*.jpg', ellipsis)
  22.  
  23. hexagons = []
  24. hexagons = fun.loadFiles('C:/Users/Auricelia/Desktop/2d_geometric_shapes_dataset/hexagons/*.jpg', hexagons)
  25.  
  26. lines = []
  27. lines = fun.loadFiles('C:/Users/Auricelia/Desktop/2d_geometric_shapes_dataset/lines/*.jpg', lines)
  28.  
  29. rectangles = []
  30. rectangles = fun.loadFiles('C:/Users/Auricelia/Desktop/2d_geometric_shapes_dataset/rectangles/*.jpg', rectangles)
  31.  
  32. rhombuses = []
  33. rhombuses = fun.loadFiles('C:/Users/Auricelia/Desktop/2d_geometric_shapes_dataset/rhombuses/*.jpg', rhombuses)
  34.  
  35. squares = []
  36. squares = fun.loadFiles('C:/Users/Auricelia/Desktop/2d_geometric_shapes_dataset/squares/*.jpg', squares)
  37.  
  38. trapezia = []
  39. trapezia = fun.loadFiles('C:/Users/Auricelia/Desktop/2d_geometric_shapes_dataset/trapezia/*.jpg', trapezia)
  40.  
  41. triangles = []
  42. triangles = fun.loadFiles('C:/Users/Auricelia/Desktop/2d_geometric_shapes_dataset/triangles/*.jpg', triangles)
  43.  
  44. # Pré-processamento das imagens
  45.  
  46. # Conversão de RGB para tons de cinza
  47. circles = fun.grayConversion(circles)
  48.  
  49. # Aplicando o blur
  50. circles = fun.blurConversion(circles, 5, 0)
  51.  
  52. # Aplicando a binarização
  53. circles = fun.binaryConversion(circles, 255, 31)
  54.  
  55. # Invertendo as imagens
  56. circles = fun.invertConversion(circles)
  57.  
  58. # Imagens de elipse
  59. ellipsis = fun.grayConversion(ellipsis)
  60. ellipsis = fun.blurConversion(ellipsis, 5, 0)
  61. ellipsis = fun.binaryConversion(ellipsis, 255, 31)
  62. ellipsis = fun.invertConversion(ellipsis)
  63.  
  64. #Imagens de hexagonos
  65. hexagons = fun.grayConversion(hexagons)
  66. hexagons = fun.blurConversion(hexagons, 5, 0)
  67. hexagons = fun.binaryConversion(hexagons, 255, 31)
  68. hexagons = fun.invertConversion(hexagons)
  69.  
  70. #Imagens de linhas
  71. lines = fun.grayConversion(lines)
  72. lines = fun.blurConversion(lines, 5, 0)
  73. lines = fun.binaryConversion(lines, 255, 31)
  74. lines = fun.invertConversion(lines)
  75.  
  76. #Imagens de retangulos
  77. rectangles = fun.grayConversion(rectangles)
  78. rectangles = fun.blurConversion(rectangles, 5, 0)
  79. rectangles = fun.binaryConversion(rectangles, 255, 31)
  80. rectangles = fun.invertConversion(rectangles)
  81.  
  82. #Imagens de losangos
  83. rhombuses = fun.grayConversion(rhombuses)
  84. rhombuses = fun.blurConversion(rhombuses, 5, 0)
  85. rhombuses = fun.binaryConversion(rhombuses, 255, 31)
  86. rhombuses = fun.invertConversion(rhombuses)
  87.  
  88. #Imagens de quadrados
  89. squares = fun.grayConversion(squares)
  90. squares = fun.blurConversion(squares, 5, 0)
  91. squares = fun.binaryConversion(squares, 255, 31)
  92. squares = fun.invertConversion(squares)
  93.  
  94. #Imagens de trapezios
  95. trapezia = fun.grayConversion(trapezia)
  96. trapezia = fun.blurConversion(trapezia, 5, 0)
  97. trapezia = fun.binaryConversion(trapezia,255,31)
  98. trapezia = fun.invertConversion(trapezia)
  99.  
  100. #Imagens de triangulos
  101. triangles = fun.grayConversion(triangles)
  102. triangles = fun.blurConversion(triangles, 5, 0)
  103. triangles = fun.binaryConversion(triangles, 255, 31)
  104. triangles = fun.invertConversion(triangles)
  105.  
  106. # Extraindo características
  107.  
  108. sqaresVetorC = fun.extractCarac(squares)
  109. trianglesVetorC = fun.extractCarac(triangles)
  110. trapeziaVetorC = fun.extractCarac(trapezia)
  111. rhombusesVetorC = fun.extractCarac(rhombuses)
  112. rectanglesVetorC = fun.extractCarac(rectangles)
  113. linesVetorC = fun.extractCarac(lines)
  114. hexagonsVetorC = fun.extractCarac(hexagons)
  115. ellipsisVetorC = fun.extractCarac(ellipsis)
  116. circlesVetorC = fun.extractCarac(circles)
  117.  
  118. # Transformando em DataFrames
  119.  
  120. sqaresVetorC = pd.DataFrame(sqaresVetorC)
  121. circlesVetorC = pd.DataFrame(circlesVetorC)
  122. trianglesVetorC = pd.DataFrame(trianglesVetorC)
  123. trapeziaVetorC = pd.DataFrame(trapeziaVetorC)
  124. rhombusesVetorC = pd.DataFrame(rhombusesVetorC)
  125. rectanglesVetorC = pd.DataFrame(rectanglesVetorC)
  126. linesVetorC = pd.DataFrame(linesVetorC)
  127. hexagonsVetorC = pd.DataFrame(hexagonsVetorC)
  128. ellipsisVetorC = pd.DataFrame(ellipsisVetorC)
  129.  
  130. sqaresVetorC['Classe'] = 'square'
  131. circlesVetorC['Classe'] = 'circle'
  132. trianglesVetorC['Classe'] = 'triangle'
  133. trapeziaVetorC['Classe'] = 'trapezia'
  134. rhombusesVetorC['Classe'] = 'rhombuse'
  135. rectanglesVetorC['Classe'] = 'rectangle'
  136. linesVetorC['Classe'] = 'line'
  137. hexagonsVetorC['Classe'] = 'hexagon'
  138. ellipsisVetorC['Classe'] = 'ellipsis'
  139.  
  140. dfs =[sqaresVetorC,circlesVetorC,trianglesVetorC,trapeziaVetorC,rhombusesVetorC,rectanglesVetorC,linesVetorC,
  141.                       hexagonsVetorC,ellipsisVetorC]
  142. dataFrame = pd.concat(dfs, ignore_index=True)
  143.  
  144. dataFrame2 = dataFrame.copy()
  145. del dataFrame['Classe']
  146. dataFrame = fun.normalizar(dataFrame)
  147. print(dataFrame)
  148. dataFrame['Classe'] = dataFrame2['Classe']
  149. print(dataFrame)
  150.  
  151. kfold = KFold(10, True, 1)  
  152.  
  153. knn1 = KNeighborsClassifier(n_neighbors=1, metric='euclidean')
  154. knn3 = KNeighborsClassifier(n_neighbors=3, metric='euclidean')
  155. knn5 = KNeighborsClassifier(n_neighbors=5, metric='euclidean')
  156. knnpounded1 = KNeighborsClassifier(n_neighbors=1, weights='distance',metric='euclidean')
  157. knnpounded3 = KNeighborsClassifier(n_neighbors=3, weights='distance', metric='euclidean')
  158. knnpounded5 = KNeighborsClassifier(n_neighbors=5, weights='distance', metric='euclidean')
  159. naive = GaussianNB()
  160. tree = DecisionTreeClassifier()
  161. svmlinear = SVC(kernel='linear')  # ESCOLHENDO OS KERNELS DA SVM
  162. svmrbf = SVC(kernel='rbf', gamma='scale')
  163. logRegre = LogisticRegression(solver='lbfgs')
  164. neuralnetwork = MLPClassifier()
  165.  
  166. knn1array = []  # INSTANCIANDO OS ARRAYS QUE IRAO ARMAZENAR AS MEDIAS DE ACERTO/ACURACIA DE CADA PREDIÇÃO
  167. knn3array = []
  168. knn5array = []
  169. naivearray = []
  170. treearray = []
  171. knnpounded1array = []
  172. knnpounded3array = []
  173. knnpounded5array = []
  174. svmlineararray = []
  175. svmrbfarray = []
  176. logRegrearray = []
  177. nnarray = []
  178.  
  179. knn1time = []  # INSTANCIANDO OS ARRAYS QUE IRAO ARMAZENAR AS MEDIAS DE ACERTO/ACURACIA DE CADA PREDIÇÃO
  180. knn3time = []
  181. knn5time = []
  182. naivetime = []
  183. treetime = []
  184. knnpounded1time = []
  185. knnpounded3time = []
  186. knnpounded5time = []
  187. svmlineartime = []
  188. svmrbftime = []
  189. logRegretime = []
  190. nntime = []
  191.  
  192. tempoinicial = time.time()
  193. for x in range(0, 5):  # FOR QUE VAI REALIZAR O KFOLD DE 10 5 VEZES
  194.  
  195.     tempo1 = time.time()
  196.     cols = list(dataFrame.columns)
  197.     cols.remove('Classe')
  198.     df_images_noclass = dataFrame[cols]  # SEPARANDO EM DOIS DATAFRAMES UM COM A CLASSE E OUTRO SEM
  199.     df_images_class = dataFrame['Classe']
  200.     c = kfold.split(dataFrame)  # REALIZANDO O KFOLD DO MEU DATAFRAME NORMALIZADO
  201.  
  202.     for train_index, test_index in c:
  203.         # ARMAZENANDO OS DADOS DE TREINO E TEST EM NOVOS DATAFRAMES
  204.         noclass_train, noclass_test = df_images_noclass.iloc[train_index], df_images_noclass.iloc[test_index]
  205.         class_train, class_test = df_images_class.iloc[train_index], df_images_class.iloc[test_index]
  206.  
  207.         knn1start = time.time()
  208.         knn1.fit(noclass_train, class_train)
  209.         knn1array.append(knn1.score(noclass_test, class_test))
  210.         knn1end = time.time()
  211.         knn1time.append(knn1end - knn1start)
  212.  
  213.         knn3start = time.time()
  214.         knn3.fit(noclass_train, class_train)
  215.         knn3array.append(knn3.score(noclass_test, class_test))
  216.         knn3end = time.time()
  217.         knn3time.append(knn3end - knn3start)
  218.  
  219.         knn5start = time.time()
  220.         knn5.fit(noclass_train, class_train)
  221.         knn5array.append(knn5.score(noclass_test, class_test))
  222.         knn5end = time.time()
  223.         knn5time.append(knn5end - knn5start)
  224.  
  225.         naivestart = time.time()
  226.         naive.fit(noclass_train, class_train)
  227.         naivearray.append(naive.score(noclass_test, class_test))
  228.         naiveend = time.time()
  229.         naivetime.append(naiveend - naivestart)
  230.  
  231.         treestart = time.time()
  232.         tree.fit(noclass_train, class_train)
  233.         treearray.append(tree.score(noclass_test, class_test))
  234.         treeend = time.time()
  235.         treetime.append(treeend - treestart)
  236.  
  237.         wknn1start = time.time()
  238.         knnpounded1.fit(noclass_train, class_train)
  239.         knnpounded1array.append(knnpounded1.score(noclass_test, class_test))
  240.         wknn1end = time.time()
  241.         knnpounded1time.append(wknn1end - wknn1start)
  242.  
  243.         wknn3start = time.time()
  244.         knnpounded3.fit(noclass_train, class_train)
  245.         knnpounded3array.append(knnpounded3.score(noclass_test, class_test))
  246.         wknn3end = time.time()
  247.         knnpounded3time.append(wknn3end - wknn3start)
  248.  
  249.         wknn5start = time.time()
  250.         knnpounded5.fit(noclass_train, class_train)
  251.         knnpounded5array.append(knnpounded5.score(noclass_test, class_test))
  252.         wknn5end = time.time()
  253.         knnpounded5time.append(wknn5end - wknn5start)
  254.  
  255.         svmlinearstart = time.time()
  256.         svmlinear.fit(noclass_train, class_train)
  257.         svmlineararray.append(svmlinear.score(noclass_test, class_test))
  258.         svmlinearend = time.time()
  259.         svmlineartime.append(svmlinearend - svmlinearstart)
  260.  
  261.         svmrbfstart = time.time()
  262.         svmrbf.fit(noclass_train, class_train)
  263.         svmrbfarray.append(svmrbf.score(noclass_test, class_test))
  264.         svmrbfend = time.time()
  265.         svmrbftime.append(svmrbfend - svmrbfstart)
  266.  
  267.         logRegrestart = time.time()
  268.         logRegre.fit(noclass_train, class_train)
  269.         logRegrearray.append(logRegre.score(noclass_test, class_test))
  270.         logRegreend = time.time()
  271.         logRegretime.append(logRegreend - logRegrestart)
  272.  
  273.         nnstart = time.time()
  274.         neuralnetwork.fit(noclass_train, class_train)
  275.         nnarray.append(neuralnetwork.score(noclass_test, class_test))
  276.         nnend = time.time()
  277.         nntime.append(nnend - nnstart)
  278.  
  279.     dataFrame = dataFrame.sample(
  280.         frac=1)  # FUNÇÃO QUE FAZ O SHUFFLE DO DATAFRAME PARA O PROXIMO K FOLD PEGAR VALORES DIFERENTES
  281.     print("Terminou a ", x)
  282.     tempo2 = time.time()
  283.     print("Tempo da rodada ", x, (tempo2 - tempo1) / 60)
  284.  
  285. tempofinal = time.time()
  286.  
  287. mediaknn1 = np.mean(knn1array)  # FUNÇÕES QUE FAZEM A MEDIA, MODA E MEDIANA DO KNN DE K 1 K3 E K5
  288. medianaknn1 = np.median(knn1array)
  289. stdknn1 = np.std(knn1array)
  290. timeknn1 = np.mean(knn1time)
  291. mediaknn3 = np.mean(knn3array)  # MEDIA
  292. medianaknn3 = np.median(knn3array)  # MEDIANA
  293. stdknn3 = np.std(knn3array)
  294. timeknn3 = np.mean(knn3time)
  295. mediaknn5 = np.mean(knn5array)
  296. medianaknn5 = np.median(knn5array)
  297. stdknn5 = np.std(knn5array)
  298. timeknn5 = np.mean(knn5time)
  299.  
  300. print("-------------- KNN ---------------")  # PRINT DOS DADOS PARA FICAR VISIVEL
  301. print("Media:\nK = 1: ", mediaknn1, " K = 3: ", mediaknn3, " K = 5: ", mediaknn5)
  302. print("Mediana:\nK = 1: ", medianaknn1, " K = 3: ", medianaknn3, " K = 5: ", medianaknn5)
  303. print("Desvio Padrão:\nK = 1: ", stdknn1, " K = 3: ", stdknn3, " K = 5: ", stdknn5)
  304. print("Tempo médio:\nK = 1: ", timeknn1, " K = 3: ", timeknn3, " K = 5: ", timeknn5)
  305.  
  306. mediaknnpounded1 = np.mean(knnpounded1array)  # FUNÇÕES QUE REALIZAM MEDIA MODA E MEDIANA DO KNN PONDERADO
  307. medianaknnpounded1 = np.median(knnpounded1array)
  308. stdknnpounded1 = np.std(knnpounded1array)
  309. timewknn1 = np.mean(knnpounded1time)
  310. mediaknnpounded3 = np.mean(knnpounded3array)
  311. medianaknnpounded3 = np.median(knnpounded3array)
  312. stdknnpounded3 = np.std(knnpounded3array)
  313. timewknn3 = np.mean(knnpounded3time)
  314. mediaknnpounded5 = np.mean(knnpounded5array)
  315. medianaknnpounded5 = np.median(knnpounded5array)
  316. stdknnpounded5 = np.std(knnpounded5array)
  317. timewknn5 = np.mean(knnpounded5time)
  318.  
  319. print("\n\n-------------- KNN PONDERADO---------------")
  320. print("Media:\nK = 1: ", mediaknnpounded1, " K = 3: ", mediaknnpounded3, " K = 5: ", mediaknnpounded5)
  321. print("Mediana:\nK = 1: ", medianaknnpounded1, " K = 3: ", medianaknnpounded3, " K = 5: ", medianaknnpounded5)
  322. print("Desvio padrão:\nK = 1: ", stdknnpounded1, " K = 3: ", stdknnpounded3, " K = 5: ", stdknnpounded5)
  323. print("Tempo médio:\nK = 1: ", timewknn1, " K = 3: ", timewknn3, " K = 5: ", timewknn5)
  324.  
  325. medianaive = np.mean(naivearray)  # FUNÇÕES QUE REALIZAM MEDIA MODA E MEDIANA DO NAIVE BAYES
  326. mediananaive = np.median(naivearray)
  327. stdnaive = np.std(naivearray)
  328. timenaive = np.mean(naivetime)
  329.  
  330. print("\n\n-------------- NAIVE BAYES ---------------")
  331. print("Media: ", medianaive)
  332. print("Mediana: ", mediananaive)
  333. print("Desvio padrão: ", stdnaive)
  334. print("Tempo médio: ", timenaive)
  335.  
  336. mediatree = np.mean(treearray)  # FUNÇÕES QUE REALIZAM A MEDIA MODA E MEDIANA DA ARVORE DE DECISAO
  337. medianatree = np.median(treearray)
  338. stdtree = np.std(treearray)
  339. timetree = np.mean(treetime)
  340.  
  341. print("\n\n-------------- DECISION TREE ---------------")
  342. print("Media: ", mediatree)
  343. print("Mediana: ", medianatree)
  344. print("Desvio padrão: ", stdtree)
  345. print("Tempo médio: ", timetree)
  346.  
  347. mediasvmlinear = np.mean(svmlineararray)  # FUNÇÕES QUE REALIZAM A MODA MEDIA E MEDIANA DA SVM LINEAR
  348. medianasvmlinear = np.median(svmlineararray)
  349. stdsvmlinear = np.std(svmlineararray)
  350. timesvmlinear = np.mean(svmlineartime)
  351.  
  352. print("\n\n-------------- SVM LINEAR ---------------")
  353. print("Media: ", mediasvmlinear)
  354. print("Mediana: ", medianasvmlinear)
  355. print("Desvio padrão: ", stdsvmlinear)
  356. print("Tempo médio: ", timesvmlinear)
  357.  
  358. mediasvmrbf = np.mean(svmrbfarray)  # FUNÇÕES QUE REALIZAM A MODA MEDIA E MEDIANA DA SVM RBF
  359. medianasvmrbf = np.median(svmrbfarray)
  360. stdsvmrbf = np.std(svmrbfarray)
  361. timesvmrbf = np.mean(svmrbftime)
  362.  
  363. print("\n\n-------------- SVM RBF ---------------")
  364. print("Media: ", mediasvmrbf)
  365. print("Mediana: ", medianasvmrbf)
  366. print("Desvio padrão: ", stdsvmrbf)
  367. print("Tempo médio: ", timesvmrbf)
  368.  
  369. medialogregre = np.mean(logRegrearray)
  370. medianalogregre = np.median(logRegrearray)
  371. stdlogregre = np.std(logRegrearray)
  372. timelogregre = np.mean(logRegretime)
  373.  
  374. print("\n\n-------------- REGRESSAO LOGISTICA ---------------")
  375. print("Media: ", medialogregre)
  376. print("Mediana: ", medianalogregre)
  377. print("Desvio padrão: ", stdlogregre)
  378. print("Tempo médio: ", timelogregre)
  379.  
  380. mediann = np.mean(nnarray)
  381. medianann = np.median(nnarray)
  382. stdnn = np.std(nnarray)
  383. timenn = np.median(nntime)
  384.  
  385. print("\n\n-------------- MLP ---------------")
  386. print("Media: ", mediann)
  387. print("Mediana: ", medianann)
  388. print("Desvio padrão: ", stdnn)
  389. print("Tempo médio: ", timenn)
  390.  
  391. mediasacuracias = {  # CRIANDO UM DICIONARIO QUE VAI TER AS MEDIAS DE CADA ALGORITMO
  392.  
  393.     "KNN K = 1": mediaknn1,
  394.     "KNN K = 3": mediaknn3,
  395.     "KNN K = 5": mediaknn5,
  396.     "KNN PONDERADO K = 1": mediaknnpounded1,
  397.     "KNN PONDERADO K = 3": mediaknnpounded3,
  398.     "KNN PONDERADO K = 5": mediaknnpounded5,
  399.     "NAIVE BAYES": medianaive,
  400.     "DECISION TREE": mediatree,
  401.     "SVM LINEAR": mediasvmlinear,
  402.     "SVM RBF": mediasvmrbf,
  403.     "REGRESSAO LOGISTICA": medialogregre,
  404.     "MLP": mediann
  405. }
  406.  
  407. mediasacuracias = sorted(mediasacuracias.items(),
  408.                          key=lambda x: x[1])  # ORDENANDO EM ORDEM CRESCENTE PARA SABER OS MELHORES
  409. print(mediasacuracias)  # PRINTANDO A ORDEM CRESCENTE DOS DADOS
  410. print("Tempo total: ", (tempofinal - tempoinicial) / 60)
  411.  
  412. stat, p = friedmanchisquare(knn1array, knn3array, knn5array, knnpounded1array, knnpounded3array,
  413.                             knnpounded5array, naivearray, treearray, svmlineararray, svmrbfarray, logRegrearray,
  414.                             nnarray)
  415.  
  416. print("Friendman:")
  417. print("Stat = ", stat, "P = ", p)
  418.  
  419. stat, p = kruskal(knn1array, knn3array, knn5array, knnpounded1array, knnpounded3array,
  420.                   knnpounded5array, naivearray, treearray, svmlineararray, svmrbfarray, logRegrearray, nnarray)
  421.  
  422. print("Kruskal: ")
  423. print("Stat = ", stat, "P = ", p)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement