首页 > 解决方案 > PDP 的 4D 热图

问题描述

现在,我正在同时针对 3 个功能进行 PDP 交互的自定义​​实现,但在可视化数据时遇到了问题。前段时间我认为最好为特征交互表示一个 3D 热图,其中表面形状表示 3 个特征中的 2 个(x&y 和 x&z)的 PDP 交互,热图纹理层表示最后两个特征的交互特征 (z&y)。

现在我有一个 PDP 热图的工作(不过是准系统)实现,用于 2 个功能。

def pdp_custom_3D(estimated_model, X, y, n_splits, target_name_1, target_name_2, prefit = True, X_train = None, y_train = None):

import matplotlib.pyplot as plt
import seaborn as sb

if prefit == False:
    try:
        estimated_model.fit(X_train, y_train)
    except:
        logging.warning("Estimated model must have fit method.")
            
PDP_list_1 = list()
PDP_list_2 = list()

feature_list_1 = list()
feature_list_2 = list()

x_max_1 = X[target_name_1].max()
x_min_1 = X[target_name_1].min()

x_max_2 = X[target_name_2].max()
x_min_2 = X[target_name_2].min()


print('x_max_1', x_max_1)
print('x_min_1', x_min_1)
print('x_max_2', x_max_2)
print('x_min_2', x_min_2)

X_copy = X.copy() 

step_1 = abs(x_max_1 - x_min_1)/n_splits
step_2 = abs(x_max_2 - x_min_2)/n_splits

x_axis = int(n_splits+1)
y_axis = int(n_splits+1)

s = (x_axis, y_axis)  
PDP_result = np.zeros(s)

counter_1 = x_min_1
counter_2 = x_min_2


for i in range(n_splits+1):
    
    feature_list_1.append(counter_1 + (i*step_1))
    X_copy[target_name_1] = counter_1 + i * step_1

    for j in range(n_splits+1):
        
        feature_list_2.append(counter_2 + j * step_2)
        X_copy[target_name_2] = counter_2 + j * step_2
        temp = estimated_model.predict(X_copy)
        PDP_result[i][j] = temp.mean()
    
sb.heatmap(PDP_result)


return  
    
    

它让我得到了一些不错的热图

它让我得到了一些不错的热图

有什么办法可以得到 3D 热图(3 轴是选定的特征,第 4 轴是预测模型的平均值给我回来 - 它在这里被表示为热特征,我想要一个表面作为预测的第二个表示) 具有相同的数据形式?

有点像这样

有点像这样

谢谢大家,祝你有美好的一天!

标签: pythondata-science

解决方案


推荐阅读