def eaSimple(population, toolbox, cxpb, mutpb, ngen, stats=None, halloffame=None, verbose=__debug__, pset=None, store=True): """ Parameters ---------- population toolbox cxpb mutpb ngen stats halloffame verbose pset store Returns ------- """ len_pop = len(population) logbook = Logbook() logbook.header = ['gen', 'nevals'] + (stats.fields if stats else []) random_seed = random.randint(1, 1000) # Evaluate the individuals with an invalid fitness invalid_ind = [ind for ind in population if not ind.fitness.valid] fitnesses = toolbox.map(toolbox.evaluate, invalid_ind) # fitnesses = parallelize(n_jobs=4, func=toolbox.evaluate, iterable=invalid_ind) for ind, fit in zip(invalid_ind, fitnesses): ind.fitness.values = fit[0], ind.expr = fit[1] if halloffame is not None: halloffame.update(population) random.seed(random_seed) record = stats.compile_(population) if stats else {} logbook.record(gen=0, nevals=len(invalid_ind), **record) if verbose: print(logbook.stream) data_all = {} # Begin the generational process for gen in range(1, ngen + 1): if store: if pset: subp = partial(sub, subed=pset.rep_name_list, subs=pset.name_list) data = [{"score": i.fitness.values[0], "expr": subp(i.expr)} for i in halloffame.items[-5:]] else: data = [{"score": i.fitness.values[0], "expr": i.expr} for i in halloffame.items[-5:]] data_all['gen%s' % gen] = data # select_gs the next generation individuals offspring = toolbox.select_gs(population, len_pop) # Vary the pool of individuals offspring = varAnd(offspring, toolbox, cxpb, mutpb) if halloffame is not None: offspring.extend(halloffame) random_seed = random.randint(1, 1000) # Evaluate the individuals with an invalid fitness invalid_ind = [ind for ind in offspring if not ind.fitness.valid] fitnesses = toolbox.map(toolbox.evaluate, invalid_ind) # fitnesses = parallelize(n_jobs=4, func=toolbox.evaluate, iterable=invalid_ind) for ind, fit in zip(invalid_ind, fitnesses): ind.fitness.values = fit[0], ind.expr = fit[1] # Update the hall of fame with the generated individuals if halloffame is not None: halloffame.update(offspring) if halloffame.items[-1].fitness.values[0] >= 0.95: print(halloffame.items[-1]) print(halloffame.items[-1].fitness.values[0]) break random.seed(random_seed) # Replace the current population by the offspring population[:] = offspring # Append the current generation statistics to the logbook record = stats.compile_(population) if stats else {} logbook.record(gen=gen, nevals=len(invalid_ind), **record) if verbose: print(logbook.stream) store = Store() store.to_txt(data_all) return population, logbook
param_grid3 = [{'n_estimators': [100, 200], 'learning_rate': [0.1, 0.05]}] # 2 model ref = RFECV(me2, cv=3) x_ = ref.fit_transform(x, y) gd = GridSearchCV(me2, cv=3, param_grid=param_grid2, scoring="r2", n_jobs=1) gd.fit(x_, y) score = gd.best_score_ # 1,3 model # gd = GridSearchCV(me1, cv=3, param_grid=param_grid1, scoring="r2", n_jobs=1) # gd.fit(x,y) # es = gd.best_estimator_ # sf = SelectFromModel(es, threshold=None, prefit=False, # norm_order=1, max_features=None) # sf.fit(x,y) # feature = sf.get_support() # # gd.fit(x[:,feature],y) # score = gd.best_score_ # 其他模型 # 穷举等... # 导出 # pd.to_pickle(gd,r'C:\Users\Administrator\Desktop\skk\gd_model') # pd.read_pickle(r'C:\Users\Administrator\Desktop\skk\gd_model') store.to_pkl_sk(gd) store.to_csv(x) store.to_txt(score)
def multiEaSimple(population, toolbox, cxpb, mutpb, ngen, stats=None, halloffame=None, verbose=__debug__, pset=None, store=True, alpha=1): """ Parameters ---------- population toolbox cxpb mutpb ngen stats halloffame verbose pset store alpha Returns ------- """ logbook = Logbook() logbook.header = ['gen', 'nevals'] + (stats.fields if stats else []) # Evaluate the individuals with an invalid fitness invalid_ind = [ind for ind in population if not ind.fitness.valid] random_seed = random.randint(1, 1000) # fitnesses = list(toolbox.map(toolbox.evaluate, [str(_) for _ in invalid_ind])) # fitnesses2 = toolbox.map(toolbox.evaluate2, [str(_) for _ in invalid_ind]) fitnesses = parallelize(n_jobs=6, func=toolbox.evaluate, iterable=[str(_) for _ in invalid_ind]) fitnesses2 = parallelize(n_jobs=6, func=toolbox.evaluate2, iterable=[str(_) for _ in invalid_ind]) def funcc(a, b): """ Parameters ---------- a b Returns ------- """ return (alpha * a + b) / 2 for ind, fit, fit2 in zip(invalid_ind, fitnesses, fitnesses2): ind.fitness.values = funcc(fit[0], fit2[0]), ind.values = (fit[0], fit2[0]) ind.expr = (fit[1], fit2[1]) if halloffame is not None: halloffame.update(population) random.seed(random_seed) record = stats.compile_(population) if stats else {} logbook.record(gen=0, nevals=len(invalid_ind), **record) if verbose: print(logbook.stream) data_all = {} # Begin the generational process for gen in range(1, ngen + 1): # select_gs the next generation individuals offspring = toolbox.select_gs(population, len(population)) # Vary the pool of individuals offspring = varAnd(offspring, toolbox, cxpb, mutpb) if halloffame is not None: offspring.extend(halloffame.items[-2:]) # Evaluate the individuals with an invalid fitness invalid_ind = [ind for ind in offspring if not ind.fitness.valid] random_seed = random.randint(1, 1000) # fitnesses = toolbox.map(toolbox.evaluate, [str(_) for _ in invalid_ind]) # fitnesses2 = toolbox.map(toolbox.evaluate2, [str(_) for _ in invalid_ind]) fitnesses = parallelize(n_jobs=6, func=toolbox.evaluate, iterable=[str(_) for _ in invalid_ind]) fitnesses2 = parallelize(n_jobs=6, func=toolbox.evaluate2, iterable=[str(_) for _ in invalid_ind]) for ind, fit, fit2 in zip(invalid_ind, fitnesses, fitnesses2): ind.fitness.values = funcc(fit[0], fit2[0]), ind.values = (fit[0], fit2[0]) ind.expr = (fit[1], fit2[1]) # Update the hall of fame with the generated individuals if halloffame is not None: halloffame.update(offspring) if halloffame.items[-1].fitness.values[0] >= 0.95: print(halloffame.items[-1]) print(halloffame.items[-1].fitness.values[0]) print(halloffame.items[-1].values[0]) print(halloffame.items[-1].values[1]) break if store: if pset: subp = partial(sub, subed=pset.rep_name_list, subs=pset.name_list) data = [{"score": i.values[0], "expr": subp(i.expr[0])} for i in halloffame.items[-2:]] data2 = [{"score": i.values[1], "expr": subp(i.expr[1])} for i in halloffame.items[-2:]] else: data = [{"score": i.values[0], "expr": i.expr} for i in halloffame.items[-2:]] data2 = [{"score": i.values[1], "expr": i.expr[2]} for i in halloffame.items[-2:]] data_all['gen%s' % gen] = list(zip(data, data2)) random.seed(random_seed) # Replace the current population by the offspring population[:] = offspring # Append the current generation statistics to the logbook record = stats.compile_(population) if stats else {} logbook.record(gen=gen, nevals=len(invalid_ind), **record) if verbose: print(logbook.stream) if store: store1 = Store() store1.to_txt(data_all) return population, logbook