Advertisement
Moraxno

Untitled

Jul 5th, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. import numpy as np
  2. from mifs import mifs
  3. from tqdm import tqdm
  4.  
  5. from sklearn.metrics import balanced_accuracy_score
  6.  
  7. from keras.models import Sequential
  8. from keras.layers import Dense, Activation
  9. from keras.optimizers import RMSprop
  10.  
  11. x = np.load("ANI_Training.Input.npy")
  12. y = np.load("ANI_Training.Label.npy")
  13.  
  14. ixx = np.load("ixx.npy")
  15. ixy = np.load("ixy.npy")
  16.  
  17. x_train = x[:2700]
  18. x_test = x[2700:]
  19.  
  20. y_train = y[:2700]
  21. y_test = y[2700:]
  22.  
  23.  
  24. def minus1(x):
  25. if x == 0:
  26. return -1
  27. else:
  28. return 1
  29.  
  30. def divide(x):
  31. if x < 0:
  32. return -1
  33. else:
  34. return 1
  35.  
  36. def ber(y_true, y_pred):
  37. return 1 - balanced_accuracy_score(y_true, y_pred)
  38.  
  39. def main():
  40. sel = 9
  41. pop = []
  42.  
  43. selection = mifs(ixx, ixy, sel)
  44.  
  45. for _ in range(4):
  46. pop.append(make_gene(selection))
  47.  
  48. bers = []
  49.  
  50.  
  51. while(1):
  52.  
  53. for gene in tqdm(pop):
  54. model = Sequential()
  55. model.add(Dense(sel, input_dim=len(gene_to_selection(gene))))
  56. model.add(Activation('tanh'))
  57.  
  58. model.add(Dense(sel))
  59. model.add(Activation('tanh'))
  60.  
  61. model.add(Dense(sel))
  62. model.add(Activation('tanh'))
  63.  
  64. model.add(Dense(1))
  65. model.add(Activation('sigmoid'))
  66.  
  67. gene = np.array(gene)
  68.  
  69. x_train_sel = x_train[:,gene_to_selection(gene)]
  70. x_test_sel = x_test[:,gene_to_selection(gene)]
  71.  
  72. model.compile(optimizer=RMSprop(lr=4e-3),
  73. loss='mse')
  74.  
  75.  
  76. for _ in tqdm(range(20)):
  77. model.fit(x_train_sel, y_train, epochs=50, batch_size=len(x_train), verbose=0)
  78.  
  79.  
  80. y_pred = np.round(model.predict(x_test_sel)).astype(int)
  81.  
  82. bers.append(ber(y_test, y_pred))
  83.  
  84. print(bers)
  85. ber_ranks = np.argsort(bers)
  86. print(ber_ranks)
  87. best_ber_ranks = ber_ranks[:2]
  88. print(best_ber_ranks)
  89. best_bers = bers[best_ber_ranks]
  90. print(best_bers)
  91. best_genes = pop[best_ber_ranks]
  92. print(best_genes)
  93.  
  94. new_genes = []
  95.  
  96. for g1, ber1 in zip(best_genes, best_bers):
  97. for g2, ber2 in zip(best_genes, best_bers):
  98. new_genes.append(crossover(selection, g1, 1-ber1, g2, 1-ber2))
  99.  
  100. pop = new_genes
  101. print("BEST:", best_bers)
  102.  
  103.  
  104. def make_gene(selection, size=250, high_bits=10):
  105. gene = np.array([0] * size)
  106. gene[selection] = 1
  107.  
  108. choices = np.random.choice(range(size), size=high_bits)
  109.  
  110. gene[choices] = 1
  111.  
  112. return gene
  113.  
  114. def crossover(selection, gene_1, score_1, gene_2, score_2, size=250, mutation_rate=0.05):
  115. gene = []
  116. weight = score_1 / (score_1 + score_2)
  117.  
  118. randoms = np.random.random(size=size)
  119. mutate = np.random.random(size=size)
  120.  
  121. for g1, g2, r, m in zip(gene_1, gene_2, randoms, mutate):
  122. if m < mutation_rate:
  123. gene.append(np.random.choice([0,1]))
  124. else:
  125. if r > weight:
  126. gene.append(g1)
  127. else:
  128. gene.append(g2)
  129.  
  130. gene[selection] = 1
  131.  
  132. return gene
  133.  
  134. def gene_to_selection(gene):
  135. selection = []
  136. for g, i in zip(gene, range(len(gene))):
  137. if g == 1:
  138. selection.append(i)
  139.  
  140. return np.array(selection)
  141.  
  142.  
  143.  
  144.  
  145. if __name__ == '__main__':
  146.  
  147. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement