def main(cfg_dict): df_0, df_1, df_9 = load_data(cfg_dict) # 设置训练集、测试集、仿真集 x_train, x_test, y_train, y_test, df_ft = set_data(df_0, df_1, df_9, cfg_dict) bst = fit(cfg_dict, x_train, y_train, x_test, y_test) # 查看模型中重要的特征 df_importances = feature_imp(model=bst, x_train=x_train, plot=False) df_importances.reset_index(drop=True, inplace=True)
时间: 2023-12-24 19:36:29 浏览: 144
这段代码定义了一个名为 main 的函数,用于主程序的执行。
首先,函数调用 load_data 函数,将配置参数 cfg_dict 传递给该函数,获取返回的三个数据框 df_0, df_1, df_9,分别表示类别为0、类别为1和类别为9的数据集。
接着,函数调用 set_data 函数,将 df_0, df_1, df_9 和 cfg_dict 作为参数传递给该函数,获取返回的训练集 x_train, 测试集 x_test, 训练集标签 y_train, 测试集标签 y_test,以及仿真集 df_ft。
然后,函数调用 fit 函数,将 cfg_dict, x_train, y_train, x_test, y_test 作为参数传递给该函数,获取训练好的模型 bst。
接下来,函数调用 feature_imp 函数,将 bst 和 x_train 作为参数传递给该函数,获取特征重要性信息,并将其保存到一个名为 df_importances 的数据框中。然后,通过调用 reset_index 方法重置 df_importances 的索引,使其从零开始。
这段代码的主要作用是加载数据、设置训练集、测试集和仿真集、训练模型,并获取模型中重要的特征信息。
相关问题
def set_data(df_0, df_1, df_9, cfg_dict): cfg_train_dict = cfg_dict['train'] df_train_1 = df_1.sample(len(df_1) - int(cfg_train_dict['simulate_pos_count']), random_state=int(cfg_train_dict['random_state'])) print('df_train_1 : ',len(df_train_1)) if cfg_train_dict['use_neg_sample'] == 'True': df_train_0 = df_0.copy() if len(df_0) >= len(df_1): df_train_0 = df_0.sample(len(df_1)) #else: # df_train_0 = df_0.append(df_9.sample(len(df_train_1) - len(df_0), # random_state=int(cfg_train_dict['random_state'])), # sort=False) else: df_train_0 = df_9.sample(round(len(df_train_1)), random_state=int(cfg_train_dict['random_state'])) df_train_0['label'] = 0 print('train set: pos_num--%i nag_num--%i' % (len(df_train_1), len(df_train_0))) df_train = df_train_1.append(df_train_0, sort=False) df_1_final_test = df_1.loc[list(set(df_1.index.tolist()).difference(set(df_train_1.index.tolist())))] #df_9_final_test = df_9.copy() 使负样本验证集等于正样本的验证集 df_9_final_test = df_9.sample(round(len(df_1_final_test)), random_state=int(cfg_train_dict['random_state'])) df_9_final_test['label'] = 0 df_ft = df_1_final_test.append(df_9_final_test, sort=False)
这段代码是一个名为 set_data 的函数,它用于设置数据集。
首先,函数从 cfg_dict 字典中获取了一个名为 cfg_train_dict 的子字典,其中包含了训练配置的相关参数。
接着,函数从 df_1 数据框中随机抽样了一部分样本作为训练集 df_train_1,抽样数量为 len(df_1) 减去 cfg_train_dict['simulate_pos_count'],random_state 参数用于设置随机种子。函数打印了 df_train_1 的长度。
然后,根据 cfg_train_dict['use_neg_sample'] 的值,函数决定如何选择负例样本。如果值为 'True',则将 df_0 数据框复制给 df_train_0,并根据 df_1 的长度进行抽样。如果 df_0 的长度大于等于 df_1 的长度,则抽样数量为 len(df_1);否则,函数还会从 df_9 数据框中抽样剩余的样本,抽样数量为 len(df_train_1) 减去 len(df_0),random_state 参数同样用于设置随机种子。
如果 cfg_train_dict['use_neg_sample'] 的值不为 'True',则直接从 df_9 数据框中抽样数量为 round(len(df_train_1)) 的样本作为负例样本,并将其赋值给 df_train_0。
接下来,函数给 df_train_0 添加了一个名为 'label' 的列,并将所有行的值都设置为 0。函数打印了 df_train_1 和 df_train_0 的长度。
然后,函数将 df_train_1 和 df_train_0 两个数据框按行合并成一个新的数据框 df_train。
接着,函数根据 df_train_1 的索引和 df_1 的索引的差异,获取了 df_1 中不在训练集中的样本,并将其赋值给 df_1_final_test。
接下来,函数从 df_9 数据框中随机抽样数量为 round(len(df_1_final_test)) 的样本作为负例测试集,并给其添加一个名为 'label' 的列,所有行的值都设置为 0。
最后,函数将 df_1_final_test 和 df_9_final_test 两个数据框按行合并成一个新的数据框 df_ft。
这段代码的作用是根据配置参数设置训练集和测试集。训练集由正例样本和负例样本组成,而测试集则包含了未在训练集中出现的正例样本和负例样本。
def data_to_month(df_1, cfg_dict): cfg_train_dict = cfg_dict['train'] year_m = int(cfg_train_dict['data_year_month'][:4]) - df_1['时间'].astype(str).str[:4].astype(int) month_m = int(cfg_train_dict['data_year_month'][-2:]) - df_1['时间'].astype(str).str[4:6].astype(int) month_fix = df_1['入网时长(月)'] - (year_m * 12 + month_m) return month_fix
这段代码是一个数据处理函数,根据输入的数据框 df_1 和配置字典 cfg_dict,将数据中的时间转换为月份,并计算出入网时长(月)。
首先,函数从配置字典中获取训练相关的配置信息 cfg_train_dict。然后,通过将字符串类型的年份和月份转换为整型,并与数据框中的时间进行比较,计算出相对于训练数据的年份差值 year_m 和月份差值 month_m。
接下来,函数通过将年份差值乘以 12,并加上月份差值,计算出相对于训练数据的总月份差值 month_fix。最后,函数返回入网时长(月)减去总月份差值的结果。
这段代码的作用是根据训练数据的时间信息和入网时长,调整测试数据的入网时长,以使其相对于训练数据具有一致的时间参考。
阅读全文