我正在尝试构建的遗传特征优化算法遇到问题。想法是测试特定的特征组合,如果使用这些特征的模型精度高于先前的最大值,则特征组合将替换先前的最大组合。通过以这种方式遍历剩余的潜在特征,最终组合应该是给定特征向量大小的特征的最佳组合。当前,实现此目的的代码如下:
def mutate_features(features, feature):
new_features = features
index = random.randint(0,len(features)-1)
new_features[index] = feature
return new_features
def run_series(n, f_list, df):
features_list = []
results_list = []
max_results_list = [[0,0,0,0,0]]
max_feature_list = []
features = [0,0,0,0,1]
for i in range(0,5): # 5 has just been chosen as the range for testing purposes
results = run_algorithm(df, f_list, features)
features_list.append(features)
results_list.append(results)
if (check_result_vector(max_results_list, results)):
max_results_list.append(results)
max_feature_list.append(features)
else:
print("Revert to previous :" +str(max_feature_list[-1]))
features = max_feature_list[-1]
features = mutate_features(features, f_list[i])
print("Feature List = " +str(features_list))
print("Results List = " +str(results_list))
print("Max Results List = " +str(max_results_list))
print("Max Feature List = "+str(max_feature_list))
此代码的输出已包含在下面;
我不理解的部分是max_feature_list
和feature_list
的输出。
如果在for循环内通过使用.append()
将任何内容添加到max_feature_list
或feature_list
中,似乎已将列表中所有已经成为成员的项更改为与最新添加的项相同。名单。我可能未完全了解与此相关的语法/逻辑,因此,非常感谢您提供有关程序为何执行此操作的任何反馈。
我正在尝试构建的遗传特征优化算法遇到问题。这个想法是,将测试特征的特定组合,以及是否使用...
发生这种情况是因为您在features
函数中更改了mutate_features
的值,然后,由于max_feature_list
的追加是通过引用进行的,因此max_feature_list
中的填充值也正在更改,因为它们的基础值已更改。防止这种行为的一种方法是在deepcopy
内单击features
mutate_features
,根据需要更改复制的要素,然后将其返回。例如: