如何拆解DataFrame字典型超参列并开展超参相关性分析?
超参列拆分与分类超参数值化方案
一、拆分hyperparam_name列为独立特征列
你的hyperparam_name列存储的是字典格式数据,直接用pandas的json_normalize就能快速拆分成独立列。如果列中是字符串格式的字典(比如打印出来带引号),需要先转成实际字典:
import pandas as pd import ast # 先处理字符串格式的字典(如果需要) if isinstance(hyperparam_df['hyperparam_name'].iloc[0], str): hyperparam_df['hyperparam_name'] = hyperparam_df['hyperparam_name'].apply(ast.literal_eval) # 拆分字典列为独立列 expanded_hyperparams = pd.json_normalize(hyperparam_df['hyperparam_name']) # 合并原表的仓库、文件信息与拆分后的超参列 final_df = pd.concat([hyperparam_df[['repo_name', 'file_name']], expanded_hyperparams], axis=1)
这个方法会自动把所有字典的键作为列,不同文件缺失的超参会填充为NaN,完美适配不同文件超参不一致的场景。
二、分类超参转数值型
根据分类特征的类型,选择对应的转换方式:
1. 二分类特征(如布尔值、是/否)
直接转成整数类型即可:
# 示例:把log_metrics列的True/False转成1/0 final_df['log_metrics'] = final_df['log_metrics'].astype(int)
2. 无序多分类特征(如agent的'central'、'ppo')
用独热编码避免给类别强加顺序,同时避免多重共线性:
# 对agent列生成独热编码,prefix指定前缀,drop_first去掉冗余列 one_hot_agent = pd.get_dummies(final_df['agent'], prefix='agent', drop_first=True) # 合并编码列并删除原列 final_df = pd.concat([final_df.drop('agent', axis=1), one_hot_agent], axis=1)
3. 有序多分类特征(如row的1、2、3,代表层级)
用标签编码分配有序数值,注意仅适用于有明确顺序的类别:
from sklearn.preprocessing import LabelEncoder le = LabelEncoder() final_df['row'] = le.fit_transform(final_df['row'])
4. 字符串格式的数值
如果超参是字符串形式的数字,直接转成数值类型:
final_df['some_numeric_col'] = pd.to_numeric(final_df['some_numeric_col'], errors='coerce')
三、超参相关性分析
处理完特征后,就可以用常规方法分析相关性:
皮尔逊相关系数(适用于正态分布的数值型特征)
# 只选择数值型特征计算相关矩阵 corr_matrix = final_df.select_dtypes(include=['int64', 'float64']).corr() # 用热力图可视化(可选) import seaborn as sns import matplotlib.pyplot as plt sns.heatmap(corr_matrix, annot=True, cmap='coolwarm') plt.show()
斯皮尔曼秩相关(适用于有序分类或非正态分布的数值)
spearman_corr = final_df.select_dtypes(include=['int64', 'float64']).corr(method='spearman')
内容的提问来源于stack exchange,提问作者Brie MerryWeather
相关产品推荐
相关产品推荐

