11eimilia11

Lista 04 ml update

Dec 17th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 12.94 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 elipses
  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 hexágonos
  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 retângulos
  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. # Incluindo o nome de cada classe no Dataframe
  131.  
  132. sqaresVetorC['Classe'] = 'square'
  133. circlesVetorC['Classe'] = 'circle'
  134. trianglesVetorC['Classe'] = 'triangle'
  135. trapeziaVetorC['Classe'] = 'trapezia'
  136. rhombusesVetorC['Classe'] = 'rhombuse'
  137. rectanglesVetorC['Classe'] = 'rectangle'
  138. linesVetorC['Classe'] = 'line'
  139. hexagonsVetorC['Classe'] = 'hexagon'
  140. ellipsisVetorC['Classe'] = 'ellipsis'
  141.  
  142. dfs =[sqaresVetorC,circlesVetorC,trianglesVetorC,trapeziaVetorC,rhombusesVetorC,rectanglesVetorC,linesVetorC,
  143.                       hexagonsVetorC,ellipsisVetorC]
  144. dataFrame = pd.concat(dfs, ignore_index=True)
  145.  
  146. dataFrame2 = dataFrame.copy()
  147. del dataFrame['Classe']
  148. dataFrame = fun.normalizar(dataFrame)
  149. print(dataFrame)
  150. dataFrame['Classe'] = dataFrame2['Classe']
  151. print(dataFrame)
  152.  
  153.  
  154. # Criando o objeto do tipo k-folds com 10 folds
  155. kfold = KFold(10, True, 1)
  156.  
  157. # Instanciando os algoritmos e seus vetores de tempo e acurácia
  158.  
  159. # SVM com função de kernel linear
  160. SVMachine_L = SVC(kernel='linear')
  161. SVMachine_L_acerto = []
  162. SVMachine_L_tempo = []
  163.  
  164. #SVM com função de kernel RBF
  165. SVMachine_RBF = SVC(kernel='rbf', gamma='scale')
  166. SVMachine_RBF_acerto = []
  167. SVMachine_RBF_tempo = []
  168.  
  169. # KNN com k = 3, 5, 7
  170. KNN_3 = KNeighborsClassifier(n_neighbors=3, metric='euclidean')
  171. KNN_3_acerto = []
  172. KNN_3_tempo = []
  173.  
  174. KNN_5 = KNeighborsClassifier(n_neighbors=5, metric='euclidean')
  175. KNN_5_acerto = []
  176. KNN_5_tempo = []
  177.  
  178. KNN_7 =  KNeighborsClassifier(n_neighbors=7, metric='euclidean')
  179. KNN_7_acerto = []
  180. KNN_7_tempo = []
  181.  
  182. # KNN Ponderado com k = 3, 5, 7
  183. KNNP_3 = KNeighborsClassifier(n_neighbors=3, weights='distance',metric='euclidean')
  184. KNNP_3_acerto = []
  185. KNNP_3_tempo = []
  186.  
  187. KNNP_5 = KNeighborsClassifier(n_neighbors=5, weights='distance', metric='euclidean')
  188. KNNP_5_acerto = []
  189. KNNP_5_tempo = []
  190.  
  191. KNNP_7 = KNeighborsClassifier(n_neighbors=7, weights='distance', metric='euclidean')
  192. KNNP_7_acerto = []
  193. KNNP_7_tempo = []
  194.  
  195. # Naïve Bayes
  196. NaiveBayes = GaussianNB()
  197. NaiveBayes_acerto = []
  198. NaiveBayes_tempo = []
  199.  
  200. # Árvore de decisão
  201. DecisionTree = DecisionTreeClassifier()
  202. DecisionTree_acerto = []
  203. DecisionTree_tempo = []
  204.  
  205. # MultiLayer Perceptron
  206. MLP = MLPClassifier()
  207. MLP_acerto = []
  208. MLP_tempo = []
  209.  
  210. # Regressão Logística
  211. RegrLogistica = LogisticRegression(solver='lbfgs')
  212. RegrLogistica_acerto = []
  213. RegrLogistica_tempo = []
  214.  
  215.  
  216. tempoinicial = time.time()
  217.  
  218. for x in range(0, 5):
  219.  
  220.     tempo1 = time.time()
  221.     cols = list(dataFrame.columns)
  222.     cols.remove('Classe')
  223.     df_images_noclass = dataFrame[cols]
  224.     df_images_class = dataFrame['Classe']
  225.     c = kfold.split(dataFrame)
  226.  
  227.     for train_index, test_index in c:
  228.  
  229.         noclass_train, noclass_test = df_images_noclass.iloc[train_index], df_images_noclass.iloc[test_index]
  230.         class_train, class_test = df_images_class.iloc[train_index], df_images_class.iloc[test_index]
  231.  
  232.         KNN3_inicio = time.time()
  233.         KNN_3.fit(noclass_train, class_train)
  234.         KNN_3_acerto.append(KNN_3.score(noclass_test, class_test))
  235.         KNN3_fim = time.time()
  236.         KNN_3_tempo.append(KNN3_fim - KNN3_inicio)
  237.  
  238.         KNN5_inicio = time.time()
  239.         KNN_5.fit(noclass_train, class_train)
  240.         KNN_5_acerto.append(KNN_5.score(noclass_test, class_test))
  241.         KNN5_fim = time.time()
  242.         KNN_5_tempo.append(KNN5_fim - KNN5_inicio)
  243.  
  244.         KNN7_inicio = time.time()
  245.         KNN_7.fit(noclass_train, class_train)
  246.         KNN_7_acerto.append(KNN_3.score(noclass_test, class_test))
  247.         KNN7_fim = time.time()
  248.         KNN_7_tempo.append(KNN3_fim - KNN3_inicio)
  249.  
  250.         KNNP3_inicio = time.time()
  251.         KNNP_3.fit(noclass_train, class_train)
  252.         KNNP_3_acerto.append(KNNP_3.score(noclass_test, class_test))
  253.         KNNP3_fim = time.time()
  254.         KNNP_3_tempo.append(KNNP3_fim - KNNP3_inicio)
  255.  
  256.         KNNP5_inicio = time.time()
  257.         KNNP_5.fit(noclass_train, class_train)
  258.         KNNP_5_acerto.append(KNNP_5.score(noclass_test, class_test))
  259.         KNNP5_fim = time.time()
  260.         KNNP_5_tempo.append(KNNP5_fim - KNNP5_inicio)
  261.  
  262.         KNNP7_inicio = time.time()
  263.         KNNP_7.fit(noclass_train, class_train)
  264.         KNNP_7_acerto.append(KNNP_7.score(noclass_test, class_test))
  265.         KNNP7_fim = time.time()
  266.         KNNP_7_tempo.append(KNNP7_fim - KNNP7_inicio)
  267.  
  268.         NaiveBayes_inicio = time.time()
  269.         NaiveBayes.fit(noclass_train, class_train)
  270.         NaiveBayes_acerto.append(NaiveBayes.score(noclass_test, class_test))
  271.         NaiveBayes_fim = time.time()
  272.         NaiveBayes_tempo.append(NaiveBayes_fim - NaiveBayes_inicio)
  273.  
  274.         DecisionTree_inicio = time.time()
  275.         DecisionTree.fit(noclass_train, class_train)
  276.         DecisionTree_acerto.append(DecisionTree.score(noclass_test, class_test))
  277.         DecisionTree_fim = time.time()
  278.         DecisionTree_tempo.append(DecisionTree_fim - DecisionTree_inicio)
  279.  
  280.         SVMachine_L_inicio = time.time()
  281.         SVMachine_L.fit(noclass_train, class_train)
  282.         SVMachine_L_acerto.append(SVMachine_L.score(noclass_test, class_test))
  283.         SVMachine_L_fim = time.time()
  284.         SVMachine_L_tempo.append(SVMachine_L_fim - SVMachine_L_inicio)
  285.  
  286.         SVMachine_RBF_inicio = time.time()
  287.         SVMachine_RBF.fit(noclass_train, class_train)
  288.         SVMachine_RBF_acerto.append(SVMachine_RBF.score(noclass_test, class_test))
  289.         SVMachine_RBF_fim = time.time()
  290.         SVMachine_RBF_tempo.append(SVMachine_RBF_fim - SVMachine_RBF_inicio)
  291.  
  292.         RegrLogistica_inicio = time.time()
  293.         RegrLogistica.fit(noclass_train, class_train)
  294.         RegrLogistica_acerto.append(RegrLogistica.score(noclass_test, class_test))
  295.         RegrLogistica_fim = time.time()
  296.         RegrLogistica_tempo.append(RegrLogistica_fim - RegrLogistica_inicio)
  297.  
  298.         MLP_inicio = time.time()
  299.         MLP.fit(noclass_train, class_train)
  300.         MLP_acerto.append(MLP.score(noclass_test, class_test))
  301.         MLP_fim = time.time()
  302.         MLP_tempo.append(MLP_fim - MLP_inicio)
  303.  
  304.     dataFrame = dataFrame.sample(frac=1)
  305.     print("Terminou a ", x)
  306.     tempo2 = time.time()
  307.     print("Tempo da rodada ", x, (tempo2 - tempo1) / 60)
  308.  
  309. tempofinal = time.time()
  310.  
  311. fun.tendencia_central('KNN k = 3', KNN_3_acerto, KNN_3_tempo)
  312. fun.tendencia_central('KNN k = 5', KNN_5_acerto, KNN_5_tempo)
  313. fun.tendencia_central('KNN k = 7', KNN_7_acerto, KNN_7_tempo)
  314. fun.tendencia_central('KNN Ponderado k = 3', KNNP_3_acerto, KNNP_3_tempo)
  315. fun.tendencia_central('KNN Ponderado k = 5', KNNP_5_acerto, KNNP_5_tempo)
  316. fun.tendencia_central('KNN Ponderado k = 7', KNNP_7_acerto, KNNP_7_tempo)
  317. fun.tendencia_central('Naïve Bayes', NaiveBayes_acerto, NaiveBayes_tempo)
  318. fun.tendencia_central('Árvore de decisão', DecisionTree_acerto, DecisionTree_tempo)
  319. fun.tendencia_central('MLP', MLP_acerto, MLP_tempo)
  320. fun.tendencia_central('Regressão Logística', RegrLogistica_acerto, RegrLogistica_tempo)
  321. fun.tendencia_central('SVM linear', SVMachine_L_acerto, SVMachine_L_tempo)
  322. fun.tendencia_central('SVM RBF', SVMachine_RBF_acerto, SVMachine_RBF_tempo)
  323.  
  324. mediasacuracias = {  # CRIANDO UM DICIONARIO QUE VAI TER AS MEDIAS DE CADA ALGORITMO
  325.  
  326.     "KNN k = 3": np.mean(KNN_3_acerto),
  327.     "KNN k = 5": np.mean(KNN_5_acerto),
  328.     "KNN k = 7": np.mean(KNN_7_acerto),
  329.     "KNN Ponderado k = 3": np.mean(KNNP_3_acerto),
  330.     "KNN Ponderado k = 5": np.mean(KNNP_5_acerto),
  331.     "KNN Ponderado k = 7": np.mean(KNNP_7_acerto),
  332.     "Naive Bayes": np.mean(NaiveBayes_acerto),
  333.     "Decision Tree": np.mean(DecisionTree_acerto),
  334.     "SVM Linear": np.mean(SVMachine_L_acerto),
  335.     "SVM RBF": np.mean(SVMachine_RBF_acerto),
  336.     "Regressao Logistica": np.mean(RegrLogistica_acerto),
  337.     "MLP": np.mean(MLP_acerto)
  338. }
  339.  
  340. mediasacuracias = sorted(mediasacuracias.items(),
  341.                          key=lambda x: x[1])  # ORDENANDO EM ORDEM CRESCENTE PARA SABER OS MELHORES
  342. print(mediasacuracias)  # PRINTANDO A ORDEM CRESCENTE DOS DADOS
  343. print("Tempo total: ", (tempofinal - tempoinicial) / 60)
  344.  
  345. stat, p = friedmanchisquare(KNN_3_acerto, KNN_5_acerto, KNN_7_acerto, KNNP_3_acerto, KNNP_5_acerto, KNNP_7_acerto,
  346.                   NaiveBayes_acerto,DecisionTree_acerto,MLP_acerto,RegrLogistica_acerto,SVMachine_RBF_acerto,
  347.                   SVMachine_L_acerto)
  348.  
  349. print("Friendman:")
  350. print("Stat = ", stat, "P = ", p)
  351.  
  352. stat, p = kruskal(KNN_3_acerto, KNN_5_acerto, KNN_7_acerto, KNNP_3_acerto, KNNP_5_acerto, KNNP_7_acerto,
  353.                   NaiveBayes_acerto,DecisionTree_acerto,MLP_acerto,RegrLogistica_acerto,SVMachine_RBF_acerto,
  354.                   SVMachine_L_acerto)
  355.  
  356. print("Kruskal: ")
  357. print("Stat = ", stat, "P = ", p)
Add Comment
Please, Sign In to add comment