python - 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 轴是预测模型的平均值给我回来 - 它在这里被表示为热特征,我想要一个表面作为预测的第二个表示) 具有相同的数据形式?
有点像这样
谢谢大家,祝你有美好的一天!
解决方案
推荐阅读
- javascript - Set() 作为 Javascript 对象的键
- javascript - 如何从对象中删除“未定义”值
- java - 瓷砖从魔方旋转消失
- join - 合并每列两行的值:CONCAT 还是 SPLIT/JOIN?
- go - golang.org/x/crypto/bcrypt 生成哈希时的错误情况
- python - 来自文本文件的 8 个值的中位数
- javascript - 在 JavaScript 中的数字选择器小部件中居中选定项目
- c# - 使用 oledbcommand 在多个列中搜索相同值的最佳方法是什么
- ios - 在后台检测 Kontakt 信标
- r - 以迭代方式将新列连接到循环结构中的现有表