# 如果已经进行过特征筛选,则直接保留重要特征 if os.path.exists('model/easy_feature_select.csv'): df_importances = pd.read_csv('model/easy_feature_select.csv', encoding='gbk') important_features = df_importances.features.tolist() x_train, x_test = x_train[important_features], x_test[important_features] df_ft = df_ft[['label'] + important_features] # 如果为进行特征筛选,则直接删除无用特征 elif cfg_dict['features']['features_not_use_temp']!='': drop_features = cfg_dict['features']['features_not_use_temp'].split(',') x_train.drop(drop_features, axis=1, inplace=True) x_test.drop(drop_features, axis=1, inplace=True) # x_train, x_test = x_train[important_features], x_test[important_features] df_ft = df_ft.drop(drop_features, axis=1, inplace=True)
时间: 2024-04-18 17:31:58 浏览: 106
这段代码用于特征筛选。
首先,代码检查是否存在名为 'model/easy_feature_select.csv' 的文件。如果文件存在,则读取该文件的内容到一个名为 df_importances 的数据框中,其中包含了特征的重要性信息。然后,将重要特征的列名存储在一个名为 important_features 的列表中。接着,代码根据重要特征列表,从 x_train 和 x_test 数据框中保留这些特征,同时从 df_ft 数据框中保留 'label' 列和重要特征列。
如果文件 'model/easy_feature_select.csv' 不存在,则检查配置参数 cfg_dict['features']['features_not_use_temp'] 的值是否为空。如果不为空,说明存在需要删除的无用特征。将 cfg_dict['features']['features_not_use_temp'] 字符串以逗号为分隔符拆分成一个名为 drop_features 的列表。然后,代码分别从 x_train、x_test 和 df_ft 数据框中删除 drop_features 中包含的特征列。
这段代码的作用是根据特征的重要性或者配置参数来进行特征筛选。如果已经进行过特征筛选,则保留重要特征;如果没有进行特征筛选,则直接删除无用特征。最终得到的 x_train、x_test 和 df_ft 数据框中只包含需要使用的特征列。
相关问题
if not os.path.exists('model/easy_feature_select.csv'): df_importances = df_importances[:150] df_importances.to_csv('model/easy_feature_select.csv', encoding='gbk', index=False) # 根据筛选后的特征重新加载数据 x_train, x_test, y_train, y_test, df_ft = set_data(df_0, df_1, df_9, cfg_dict) # 相关系数,补充未被筛选为重要特征但与重要特征相关性较大的其他特征 feature_list = x_train.columns.tolist() df_corr = x_train.corr() df_corr = df_corr.replace(1, 0) # 筛选出相关系数大于0.85的特征 for i in range(len(df_corr.columns)): if i >= len(df_corr.columns): break column = df_corr.columns[i] names = df_corr[abs(df_corr[column]) >= 0.85].index.tolist() if names: print(column, '的强相关特征:', names) feature_list = [i for i in feature_list if i not in names] df_corr = x_train[feature_list].corr() continue #feature_list = list(set(feature_list + ['呼叫次数', '入网时长(月)', # 'MOU_avg', 'DOU_avg', '省外流量占比_avg'])) df_feature = pd.DataFrame(feature_list, columns=['features']) df_importances = pd.merge(df_feature, df_importances, on='features', how='left') df_importances.to_csv('model/easy_feature_select.csv', encoding='gbk', index=False) # 根据筛选后的特征重新加载数据 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=True) df_importances.to_csv('model/easy_feature_select.csv', encoding='gbk', index=False) # 根据重新排序的特征训练模型 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)
这段代码用于特征选择和重新训练模型的过程。
首先,代码通过判断是否存在 'model/easy_feature_select.csv' 文件来判断是否需要进行特征选择。如果文件不存在,则进行特征选择的步骤。
在特征选择的过程中,首先将 df_importances 数据框的前150个特征保存到 'model/easy_feature_select.csv' 文件中,然后重新加载数据,获取新的训练集和测试集。
接着,计算特征之间的相关系数,并筛选出相关系数大于0.85的特征。如果存在相关系数大于0.85的特征,则将这些特征从特征列表 feature_list 中移除,并重新计算相关系数。
然后,将筛选后的特征列表 feature_list 和 df_importances 数据框进行合并,并将合并结果保存到 'model/easy_feature_select.csv' 文件中。再次重新加载数据,获取新的训练集和测试集。
接下来,重新训练模型,并将训练好的模型保存到 bst 变量中。然后,通过调用 feature_imp 函数获取新模型的特征重要性信息,并将其保存到 'model/easy_feature_select.csv' 文件中。
最后,再次重新加载数据,获取新的训练集和测试集。重新训练模型,并将训练好的模型保存到 bst 变量中。
这段代码的作用是进行特征选择和重新训练模型的过程。在特征选择中,通过计算特征之间的相关系数,筛选出与重要特征相关性较大的其他特征,并将这些特征从特征列表中移除。然后,重新训练模型,并保存新模型的特征重要性信息。最后,再次重新加载数据,重新训练模型。
if not os.path.exists(result_train_file): os.makedirs(result_train_file) if not os.path.exists(result_test_file): os.makedirs(result_test_file) data = pd.read_csv(data_file).values
这段代码的作用是检查指定的文件路径是否存在,如果不存在则创建该路径。首先,代码使用 `os.path.exists()` 函数来检查 `result_train_file` 和 `result_test_file` 是否存在。
如果 `result_train_file` 不存在,那么 `os.makedirs()` 函数将被调用来创建该路径。同样地,如果 `result_test_file` 不存在,也会调用 `os.makedirs()` 来创建该路径。
接下来,代码使用 `pd.read_csv()` 函数从指定的 `data_file` 文件中读取数据,并将其转换为一个 NumPy 数组。`pd.read_csv()` 函数是 pandas 库中的一个函数,用于从 CSV 文件中读取数据。在这里,它将 CSV 文件解析为一个包含数据的二维数组。
阅读全文