Advertisement
11eimilia11

HELP

Apr 21st, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.64 KB | None | 0 0
  1. import pandas as pd
  2. import FuncoesML as fun
  3. from scipy import stats
  4. import numpy as np
  5. import time
  6.  
  7.  
  8. #Criando a classe receita que irá conter nome, classe e vetor de ingredientes
  9. class Receita:
  10.     Name = None
  11.     Class = 0
  12.     ingredientes = []
  13.     ingredientesnorm = []
  14.  
  15.  
  16. #Método que retorna o vetor de ingredientes
  17.     def getingrednorm(self):
  18.         return self.ingredientesnorm
  19.  
  20. #Construtor da classe receita
  21.     def __init__(self, name, Class, ingredientes):
  22.         self.Name = name
  23.         self.Class = Class
  24.         self.ingredientes = ingredientes
  25.  
  26. #Método que adiciona ingredientes no vetor de ingredientes
  27.     def adicionaringrediente(self, ingrediente):
  28.         self.ingredientes.append(ingrediente)
  29.  
  30. #abrindo o arquivo com a base de dados
  31. reshipe = open('C:/Users/Auricelia/Documents/Ciencia da Computacao/Computação Evolutiva/Base de dados/ReshibaseQ.txt'
  32.                , "rt", encoding="utf8")
  33.  
  34. #criando o vetor de receitas
  35. receitas = []
  36.  
  37. # preenchendo o vetor de receitas
  38. for receita in reshipe:
  39.     dividido = receita.split(sep=',')
  40.     dividido[(len(dividido) - 1)] = dividido[(len(dividido) - 1)].replace('\n', '')
  41.     ingredientes = []
  42.  
  43.     for x in range(2, len(dividido)):
  44.         ingredientes.append(dividido[x])
  45.  
  46.     receitas.append(Receita(dividido[1], dividido[0], ingredientes))
  47.  
  48. #vetor que irá receber todos os ingredientes sem repetição para fazer os vetores binários
  49. todosingredientes = []
  50.  
  51. #preenchendo o vetor 'todosingredientes' sem repetição
  52. for rec in receitas:
  53.     for ingrediente in rec.ingredientes:
  54.  
  55.         if todosingredientes.__contains__(ingrediente) == False:
  56.             todosingredientes.append(ingrediente)
  57.  
  58. #ordenando o vetor
  59. todosingredientes = sorted(todosingredientes)
  60.  
  61. # preenchendo nos objetos receita o vetor binário com 0
  62.  
  63. for rec in receitas:
  64.     norm = []
  65.     for y in range(0, len(todosingredientes)):
  66.         norm.append(0)
  67.     rec.ingredientesnorm = norm
  68.  
  69. # Colocando 1 na posição em que existe o ingrediente
  70.  
  71. for rec in receitas:
  72.     for y in rec.ingredientes:
  73.         pos = todosingredientes.index(y)
  74.         rec.ingredientesnorm[pos] = 1
  75.  
  76. # Vetor que irá receber os vetores binários de ingreientes de cada receita
  77. arrayingredientesnorm = []
  78.  
  79. # Preenchendo o vetor com os ingredientes normalizados
  80.  
  81. for rec in receitas:
  82.     arrayingredientesnorm.append(rec.ingredientesnorm)
  83.  
  84. # Vetor que irá receber as classes de cada receita
  85. arrayclasse = []
  86.  
  87. # preenchendo o vetor com as classes de cada receita
  88. for rec in receitas:
  89.     arrayclasse.append(rec.Class)
  90.  
  91. # criando o dataframe que irá armazenar os ingredientes
  92. df = pd.DataFrame(arrayingredientesnorm)
  93.  
  94. # Vetor que irá receber as classes de cada receita
  95. arrayclasse = []
  96.  
  97. # preenchendo o vetor com as classes de cada receita
  98. for rec in receitas:
  99.     arrayclasse.append(rec.Class)
  100.  
  101. # criando o dataframe que irá armazenar os ingredientes
  102. df = pd.DataFrame(arrayingredientesnorm)
  103.  
  104. # adicionando a classe ao dataframe
  105. df['Class'] = arrayclasse
  106.  
  107.  
  108. #Salvando a base de dados normalizada
  109. df.to_csv('C:/Users/Auricelia/Documents/Ciencia da Computacao/Computação Evolutiva/Base de dados/Receitas_norm.csv')
  110.  
  111.  
  112. # separando as receitas por classe
  113. df_1 = df.loc[df['Class'] == '1']
  114. df_2 = df.loc[df['Class'] == '2']
  115. df_3 = df.loc[df['Class'] == '3']
  116. df_4 = df.loc[df['Class'] == '4']
  117.  
  118. print('df 1')
  119. print('shape df1', df_1.shape)
  120. print(df_1.head())
  121.  
  122. print()
  123. print('df 2')
  124. print('shape  df2', df_2.shape)
  125. print(df_2.head())
  126. print()
  127. print('df 3')
  128. print('shape df3', df_3.shape)
  129.  
  130. print(df_3.head())
  131. print()
  132. print('df 4')
  133. print('shape df4', df_4.shape)
  134. print(df_4.head())
  135. print()
  136.  
  137. # j = 0
  138. # y = df[j:j+1]
  139. # df_2.append(y)
  140. # print(df.at[7, 'Class'])
  141. # print(df[0:1])
  142. # print('adicionando 1 linha ao df_2')
  143. # print(df_2)
  144.  
  145. # print(df.loc[df['Class']== '1'])
  146.  
  147. # criando os vetores que irão armazenar as probabilidades de cada ingrediente por classe
  148. p_ingrediente_1 = []
  149. p_ingrediente_2 = []
  150. p_ingrediente_3 = []
  151. p_ingrediente_4 = []
  152.  
  153. df_noclass = df.copy()
  154. del df_noclass['Class']
  155. total_ing = df_noclass.shape[1]
  156.  
  157. # gerando as probabilidades para a classe '1'
  158.  
  159. total_rec_1 = df_1.shape[1]
  160. df_1_noclass = df_1.copy()
  161. del df_1_noclass['Class']
  162.  
  163. for i in range(total_ing):
  164.     soma = df_1_noclass[i].sum()
  165.     prob_ingrediente = soma / total_rec_1
  166.     p_ingrediente_1.append(prob_ingrediente)
  167.  
  168. print('len p_ingredientes_1', len(p_ingrediente_1))
  169. print(p_ingrediente_1)
  170.  
  171. # gerando as probabilidades para a classe '2'
  172.  
  173. total_rec_2 = df_2.shape[0]
  174. df_2_noclass = df_2.copy()
  175. del df_2_noclass['Class']
  176.  
  177. for j in range(total_ing):
  178.     soma = df_2_noclass[j].sum()
  179.     prob_ingrediente = soma / total_rec_2
  180.     p_ingrediente_2.append(prob_ingrediente)
  181.  
  182.  
  183. print('len p_ingredientes_2', len(p_ingrediente_2))
  184. print(p_ingrediente_2)
  185.  
  186. # gerando as probabilidades para a classe '3'
  187.  
  188. total_rec_3 = df_3.shape[0]
  189. df_3_noclass = df_3.copy()
  190. del df_3_noclass['Class']
  191.  
  192. for k in range(total_ing):
  193.     soma = df_3_noclass[k].sum()
  194.     prob_ingrediente = soma / total_rec_3
  195.     p_ingrediente_3.append(prob_ingrediente)
  196.  
  197.  
  198. print('len p_ingredientes_3', len(p_ingrediente_3))
  199. print(p_ingrediente_3)
  200.  
  201. # gerando as probabilidades para a classe '4'
  202.  
  203. total_rec_4 = df_4.shape[0]
  204. df_4_noclass = df_4.copy()
  205. del df_4_noclass['Class']
  206.  
  207. for l in range(total_ing):
  208.     soma = df_4_noclass[l].sum()
  209.     prob_ingrediente = soma / total_rec_4
  210.     p_ingrediente_4.append(prob_ingrediente)
  211.  
  212. print('len p_ingredientes_4', len(p_ingrediente_4))
  213. print(p_ingrediente_4)
  214.  
  215. """
  216. COMECA O ALGORITMO GENETICO
  217. """
  218.  
  219. tempototalinicioGA = time.time()
  220. # tamanho do cromossomo (quantidade de ingredientes total)
  221. tamanho = 402
  222.  
  223. # gerando população de cromossomos
  224. population = fun.create_population(150, 404)
  225.  
  226. # vetor que irá receber o fitness dos cromossomos
  227. scores = []
  228. scoresfinal = []
  229.  
  230. for popu in population:
  231.  
  232.     scores.append(fun.fitness(popu,p_ingrediente_1,p_ingrediente_2,p_ingrediente_3,p_ingrediente_4))
  233.  
  234. scoresfinal.append(scores[np.argmax(scores)])
  235.  
  236. for x in range(2):
  237.  
  238.     population = fun.newgentournement(scores, population)
  239.  
  240.     scores = []
  241.     for popu in population:
  242.         scores.append(fun.fitness(popu,p_ingrediente_1,p_ingrediente_2,p_ingrediente_3,p_ingrediente_4))
  243.  
  244.     scoresfinal.append(scores[np.argmax(scores)])
  245.     print("terminou")
  246.  
  247. tempototalfimGA = time.time()
  248. tempototalGA = tempototalfimGA - tempototalinicioGA
  249. print(np.array(scoresfinal))
  250. print(tempototalGA)
  251. print('len scores final',len(scoresfinal))
  252. print(scoresfinal)
  253. print('len scores', len(scores))
  254. print(scores)
  255. print(population)
  256. print('TERMINOU GA')
  257.  
  258. """
  259. TERMINA O ALGORITMO GENETICO
  260. """
  261.  
  262. tempoinicialEE = time.time()
  263. sizeEE = 10
  264. populationEE, stdsEE = fun.creatpopuEE(sizeEE, 306)
  265. scoresEE = []
  266. scoresfinalEE = []
  267.  
  268. for popu in populationEE:
  269.     scoresEE.append(fun.fitness(popu,p_ingrediente_1,p_ingrediente_2,p_ingrediente_3,p_ingrediente_4))
  270.  
  271. scoresfinalEE.append(scoresEE[np.argmax(scoresEE)])
  272.  
  273. for x in range(10):
  274.  
  275.     miEE, mistdEE = fun.newgentournementEE(scoresEE, populationEE, stdsEE, len(populationEE) * 2)
  276.     miEE, mistdEE = fun.mutationEE(miEE, mistdEE)
  277.  
  278.     scoresEE = []
  279.     for popu in miEE:
  280.         scoresEE.append(fun.fitness(popu,p_ingrediente_1,p_ingrediente_2,p_ingrediente_3,p_ingrediente_4))
  281.  
  282.     scoresfinalEE.append(scoresEE[np.argmax(scoresEE)])
  283.  
  284.     bestsEE = fun.bestindEE(scoresEE, sizeEE)
  285.     populationEE = miEE[bestsEE]
  286.     stdsEE = mistdEE[bestsEE]
  287.     scoresEE = np.array(scoresEE)
  288.     bestscoresEE = scoresEE[bestsEE]
  289.     # print("terminou")
  290.  
  291. tempofinalEE = time.time()
  292. tempototalEE = tempofinalEE - tempoinicialEE
  293. print("TERMINOU EE")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement