如何可视化含5自变量1因变量的数据集?求最优fitness值展示方案
针对5自变量最优Fitness的可视化方案
首先先预处理数据,提取每组自变量对应的最优Fitness值(假设你要找最大值,若需最小值替换max为min):
import pandas as pd # 假设你的数据集存储在df中 optimal_df = df.groupby(['α', 'c1', 'c2', 'ww', 'p_rate'])['fitness'].max().reset_index()
以下是几种直观易读的可视化方法,适配你的多变量场景:
1. 成对变量热力图
聚焦两两自变量的组合,固定其余变量,用热力图展示对应最优Fitness的高低,适合快速定位局部最优组合:
import seaborn as sns import matplotlib.pyplot as plt # 筛选固定c1=2、c2=2、p_rate=0.3的子集(可根据你的数据调整固定值) subset = optimal_df[(optimal_df['c1'] == 2) & (optimal_df['c2'] == 2) & (optimal_df['p_rate'] == 0.3)] # 转换为透视表格式 heatmap_data = subset.pivot(index='α', columns='ww', values='fitness') plt.figure(figsize=(10, 6)) sns.heatmap(heatmap_data, annot=True, cmap='viridis', fmt='.0f') plt.title('α与ww组合下的最优Fitness(c1=2, c2=2, p_rate=0.3)') plt.show()
颜色越深代表Fitness值越高,标注的数字可直接读取具体数值,能清晰看到两两变量搭配的优劣。
2. 交互式平行坐标图
适合展示所有自变量与Fitness的关联,每条线代表一组参数的最优值,支持交互筛选,比静态多维图更易理解:
import plotly.express as px fig = px.parallel_coordinates( optimal_df, dimensions=['α', 'c1', 'c2', 'ww', 'p_rate', 'fitness'], color='fitness', color_continuous_scale=px.colors.sequential.Viridis, labels={ 'α':'学习率α', 'c1':'加速因子c1', 'c2':'加速因子c2', 'ww':'权重ww', 'p_rate':'概率p_rate', 'fitness':'最优适应度' } ) fig.show()
拖动轴的范围可筛选特定区间的参数,鼠标悬停能查看单组参数的具体数值,快速定位Fitness最高的参数组合。
3. 三维散点图
聚焦3个对Fitness影响较大的自变量,用点的颜色和大小反映Fitness值,支持旋转视角观察多维关系:
import matplotlib.pyplot as plt fig = plt.figure(figsize=(12, 8)) ax = fig.add_subplot(projection='3d') # 以α、ww、p_rate为例,点颜色代表Fitness,大小与Fitness正相关 scatter = ax.scatter( optimal_df['α'], optimal_df['ww'], optimal_df['p_rate'], c=optimal_df['fitness'], s=optimal_df['fitness'] / 10, cmap='viridis', alpha=0.7 ) ax.set_xlabel('α') ax.set_ylabel('ww') ax.set_zlabel('p_rate') plt.colorbar(scatter, label='Fitness') plt.title('α、ww、p_rate与最优Fitness的3D关系') plt.show()
通过旋转视角,能直观看到三个变量组合形成的最优区域,点越大、颜色越深代表Fitness越高。
4. 变量重要性+单变量趋势图
先定位核心影响变量,再聚焦这些变量观察Fitness的变化趋势,避免无效分析:
from sklearn.ensemble import RandomForestRegressor import seaborn as sns import matplotlib.pyplot as plt # 准备特征与目标变量 X = optimal_df[['α', 'c1', 'c2', 'ww', 'p_rate']] y = optimal_df['fitness'] # 训练随机森林模型计算特征重要性 rf = RandomForestRegressor(random_state=42) rf.fit(X, y) # 可视化特征重要性 importances = pd.Series(rf.feature_importances_, index=X.columns) importances.sort_values().plot(kind='barh', figsize=(8, 4)) plt.title('自变量对Fitness的影响重要性') plt.show() # 以重要性最高的ww为例,绘制不同α下的Fitness趋势 sns.lineplot(data=optimal_df, x='ww', y='fitness', hue='α', marker='o') plt.title('不同α下,ww与最优Fitness的变化趋势') plt.show()
先通过特征重要性找到对Fitness影响最大的变量,再针对性分析其与Fitness的趋势,能快速抓住核心规律。
内容的提问来源于stack exchange,提问作者Sharif Al-Mahmud
相关产品推荐
相关产品推荐

