趋近智
单纯比较准确率或AUC等总体性能指标,理解模型为何如此运行通常很重要。机器学习 (machine learning)实用性的一项要点是,用合成数据训练的模型是否学习到与用相应真实数据训练的模型相似的底层模式和特征关联。如果合成数据导致模型依赖完全不同的特征,或赋予非常不同的权重 (weight),那么即使总体性能指标看起来可以接受,其实际用处也可能有限。评估特征重要性一致性有助于我们衡量这种对齐 (alignment)程度。
特征重要性量化 (quantization)了每个输入特征对模型预测的贡献。常用方法包括:
我们的目的不是重新解释这些方法,而是运用它们的输出来比较在真实数据和合成数据上训练的模型。其核心思路遵循“训练-合成-测试-真实”(TSTR)原则,但除了仅评估真实测试集上的预测,我们还会分析学习到的特征重要性。
最直接的方法包含以下步骤:
可以采用几种比较技术:
排名相关性: 计算基于特征重要性得分的特征排名之间的相关性。斯皮尔曼等级相关系数(Spearman's Rho)或肯德尔等级相关系数(Kendall's Tau)是合适的度量标准。较高的排名相关性(接近1)表明两个模型对特征的优先级排序相似。
斯皮尔曼等级相关系数公式,式中是特征在两个模型中排名之间的差异,是特征数量。
值比较(散点图): 创建一个散点图,其中每个点代表一个特征。x坐标是它在模型R中的重要性,y坐标是它在模型S中的重要性。靠近线的特征表明重要性幅度一致性良好。
散点图比较了在真实数据上训练的模型与在合成数据上训练的模型之间的特征重要性得分。靠近虚线对角线的点表示重要性一致。
在进行这种比较时,一致性很重要。
sklearn.ensemble.RandomForestClassifier)。sklearn.inspection.permutation_importance使用相同的设置)。以下是一个简化的Python代码片段,使用scikit-learn的置换重要性和SciPy进行排名相关性计算:
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import permutation_importance
from scipy.stats import spearmanr
from sklearn.model_selection import train_test_split
# 假设 X_real, y_real, X_synth 已预加载
# 拆分真实数据以训练模型R
X_real_train, X_real_test, y_real_train, y_real_test = train_test_split(
X_real, y_real, test_size=0.3, random_state=42
)
# 1 & 2: 在真实数据上训练,获取重要性R
model_r = RandomForestClassifier(n_estimators=100, random_state=42)
model_r.fit(X_real_train, y_real_train)
perm_importance_r = permutation_importance(
model_r, X_real_test, y_real_test, n_repeats=10, random_state=42, n_jobs=-1
)
importance_r = perm_importance_r.importances_mean
# 3 & 4: 在合成数据上训练,获取重要性S
# 假设 X_synth 具有与 X_real 相同的特征
# 注意:我们使用*相同*的真实测试集以保持评估一致性
model_s = RandomForestClassifier(n_estimators=100, random_state=42) # 相同模型,相同超参数
model_s.fit(X_synth, y_real_train) # 在合成数据上拟合
perm_importance_s = permutation_importance(
model_s, X_real_test, y_real_test, n_repeats=10, random_state=42, n_jobs=-1
)
importance_s = perm_importance_s.importances_mean
# 5: 比较
# 排名相关性
spearman_corr, p_value = spearmanr(importance_r, importance_s)
print(f"斯皮尔曼排名相关性:{spearman_corr:.3f}")
# Top-K 重叠 (例如,K=5)
k = 5
top_k_indices_r = np.argsort(importance_r)[-k:]
top_k_indices_s = np.argsort(importance_s)[-k:]
overlap = len(set(top_k_indices_r) & set(top_k_indices_s))
print(f"Top-{k} 特征重叠:{overlap}/{k}")
# (散点图的可视化代码将放在此处)
评估特征重要性一致性,比单独查看性能指标,能提供更深入的实用性评估层面。这有助于建立信心,即合成数据不仅能够进行准确预测,而且还反映了原始数据中显著的特征和关联。然而,请记住,特征重要性方法有其自身的假设和局限性,因此将这些一致性结果视为有价值的相对比较,而不是关于特征相关性的绝对真理。
这部分内容有帮助吗?
permutation_importance 函数的官方文档,包含解释和使用示例。© 2026 ApX Machine Learning用心打造