Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.64 KB | None | 0 0
  1. def BCS(Eval_Func,m_i=50,n=50,minf=0,dim=None,prog=False,alpha=0.1,beta=1.5,param=0.2):
  2.  
  3. estimate=Eval_Func().evaluate
  4.  
  5. if dim==None:
  6. dim=Eval_Func().check_dimentions(dim)
  7. pa=param
  8. #flag=dr
  9. gens=random_search(n,dim)
  10. fit=[float("-inf") if minf == 0 else float("inf") for _ in range(n)]
  11. pos=[0 for _ in range(n)]
  12. g_pos=[0]*dim
  13. g_val=float("-inf") if minf == 0 else float("inf")
  14. gens_dict={tuple([0]*dim):float("-inf") if minf == 0 else float("inf")}
  15. if prog:
  16. miter=tqdm(range(m_i))
  17. else:
  18. miter=range(m_i)
  19. for it in miter:
  20. for i,g in enumerate(gens):
  21. if tuple(g) in gens_dict:
  22. score=gens_dict[tuple(g)]
  23. else:
  24. score=estimate(g)
  25. gens_dict[tuple(g)]=score
  26. if score > fit[i] if minf==0 else score < fit[i]:
  27. fit[i]=score
  28. pos[i]=g
  29.  
  30. maxfit,maxind=max(fit),fit.index(max(fit))
  31. minfit,minind=min(fit),fit.index(min(fit))
  32. if minf==0:
  33. if maxfit > g_val:
  34. g_val=dc(maxfit)
  35. g_pos=dc(gens[maxind])
  36. else:
  37. if minfit < g_val:
  38. g_val=dc(minfit)
  39. g_pos=dc(gens[minind])
  40.  
  41. if pa < random.uniform(0,1):
  42. if minf==0:
  43. gens[minind]=[0 if 0.5>random.uniform(0,1) else 1 for _ in range(dim)]#rand_gen()
  44. fit[minind]=float("-inf") if minf == 0 else float("inf")
  45. else:
  46. gens[maxind]=[0 if 0.5>random.uniform(0,1) else 1 for _ in range(dim)]#rand_gen()
  47. fit[maxind]=float("-inf") if minf == 0 else float("inf")
  48.  
  49.  
  50. for g in gens:
  51. for d in range(dim):
  52. x=levy_flight(beta,g_pos[d],g[d],alpha)
  53. if random.uniform(0,1) < sigmoid(x):
  54. g[d]=1
  55. else:
  56. g[d]=0
  57. return g_val,g_pos,g_pos.count(1)
  58. class Evaluate:
  59. def __init__(self):
  60. self.train_l = tr_y
  61. self.train_d = tr_x
  62. self.test_l = te_y
  63. self.test_d=te_x
  64. self.K = 2
  65. def evaluate(self,gen):
  66. mask=np.array(gen) > 0
  67. al_data=np.array([al[mask] for al in self.train_d])
  68. #al_test_data=np.array([al[mask] for al in self.test_d])
  69. kf = ms.KFold(n_splits=self.K,random_state=42)
  70. s = 0
  71. for tr_ix,te_ix in kf.split(al_data):
  72. s+= svm.SVR(kernel = 'linear', gamma=0.001, C=1.0, epsilon=0.2).fit(al_data[tr_ix],self.train_l[tr_ix]).score(al_data[te_ix],self.train_l[te_ix])#.predict(al_test_data)
  73. s/=self.K
  74. return s
  75. def check_dimentions(self,dim):
  76. if dim==None:
  77. return len(self.train_d[0])
  78. else:
  79. return dim
  80. def test_score(gen,tr_x,tr_y,te_x,te_y):
  81. mask=np.array(gen) == 1
  82. al_data=np.array(tr_x[:,mask])
  83. al_test_data=np.array(te_x[:,mask])
  84. return np.mean(np.abs(([svm.SVR(kernel = 'linear', gamma=0.001, C=1.0, epsilon=0.2).fit(al_data,tr_y).score(al_test_data,te_y) for i in range(4)])))*100
  85.  
  86. def fitureSelection(data, column):
  87. result = []
  88. n = len(column)
  89. for i in range(0,2):
  90. X = data.loc[data['label']== i].iloc[:,0:n-2]
  91. y = data.loc[data['label']== i].iloc[:,-1]
  92. tr_x, te_x, tr_y, te_y = train_test_split(X,y,test_size=0.2,random_state=42)
  93. sc_X = StandardScaler()
  94. tr_x = sc_X.fit_transform(tr_x)
  95. te_x = sc_X.fit_transform(te_x)
  96. s,g,l = BCS(Eval_Func=Evaluate,n=20,m_i=200)
  97. result.append("".join(map(str,g)))
  98. return result
  99.  
  100. ['0110111011011111010100101111110100001111100111001001111101000001101011110111001111111110011',
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement