分类目录归档:数据

打开黑箱:机器学习模型的可解释性技术

刷 TDS(TowardDataScience.com) 和统计之都发现三个好东西:

  • 从任何机器学习模型中抽取人类可理解的洞察(Extracting human understandable insights from any Machine Learning model,作者 Parul Pandey),文章介绍了最为常用的 Permutation Importance, Partial Dependence Plots, SHAP values,Advanced Uses of SHAP Values 四种方法;
  • 可解释的机器学习指南(Guide to Interpretable Machine Learning,作者 Matthew Stewart, PhD Researcher),主要讲可视化,相对更加专业。
  • Christoph Molnar 的新书 Interpretable Machine Learning,该书籍对机器学习可解释性有较为系统的介绍。

最近没时间仔细学习,故快速浏览了一下两篇文章和这本书目录,以 [1]、[2]、[3 ] 分别标注来源作简单小结,以备后用。


可解释的模型(Interpretable Models)

  • Linear Regression 线性回归 [2] [3]
  • Logistic Regression  逻辑回归 [3]
  • GLM, GAM and more 广义线性模型、广义加法模型和更多 [3]
  • Decision Tree 决策树 [2] [3]
  • Decision Rules 判定准则(不仅是贝叶斯判定准则) [3]
  • RuleFit 规则拟合 [3]
  • Other Interpretable Models 其他可解释模型 [3]
    • Naive Bayes Classifier 朴素贝叶斯分类器 [3]
    • K-nearest Neighbors K 近邻法 [3]

模型不可知方法(Example-Based Explanations)

  • Partial Dependence Plots 部分依赖图 [1] [2] [3]
  • Individual Conditional Expectation (ICE) [2] [3]
  • Accumulated Local Effects (ALE) Plot  [2]  [3]
  • Feature Interaction  [2] [3]
  • Permutation Importance 排列重要性 [1]  [3]
  • Global Surrogate [3]
  • Local Surrogate (LIME) [2]  [3]
  • Scoped Rules (Anchors)  [2] [3]
  • Shapley Values [3]
  • SHAP Values SHapley Additive exPlanation 值 [1] [2] [3]
  • Advanced Uses of SHAP Values SHAP 值的高级应用 [1]  [3]
  • Dimensional Reduction Techniques (PCA, t-SNE) 降维技术 [2]
  • Model Distillation 模型蒸馏 [2]

基于例子的解释(Example Based Explanations)

  • Counterfactual Explanations 反事实解释 [2] [3]
  • Adversarial Examples 对抗样本 [3]
  • Prototypes and Criticisms 原型和批评 [3]
  • Influential Instances 有影响力的实例 [3]

神经网络的解释(Neural Network Interpretation)

  • Learned Features 学成特征 [3]

参考

第一篇文章 https://towardsdatascience.com/interpretable-machine-learning-1dec0f2f3e6b

第二篇文章 https://towardsdatascience.com/guide-to-interpretable-machine-learning-d40e8a64b6cf

那本书 https://christophm.github.io/interpretable-ml-book/

Pandas 已不允许使用“存在缺失标签的列表”进行索引(Indexing with list with missing labels is deprecated)

为了 .reindex 这一方法,自 0.21.0开始,pandas 不再支持使用 .loc[] 方法对存在一个或多个缺失标签的列表 (a list with one or more missing labels) 进行索引。

Starting in 0.21.0, using .loc or [] with a list with one or more missing labels, is deprecated, in favor of .reindex.

引自官方文档

例如对这一 数据:

s = pd.Series([1, 2, 3])
In [99]: s
Out[99]: 
0    1
1    2
2    3
dtype: int64

更改前

在此之前,我们可以直接:

s.loc[[1, 2, 3]]

得到:

Out[4]:
1    2.0
2    3.0
3    NaN
dtype: float64

在上面的操作中,尽管并不存在 3 这样一个索引,pandas 还是正确选取了存在的索引并用 NaN 对不存在的索引对应的值进行填充 (上述输出中的 3 NaN)。

更改后

现在我们只能得到:

In [4]: s.loc[[1, 2, 3]]
Passing list-likes to .loc with any non-matching elements will raise
KeyError in the future, you can use .reindex() as an alternative.
See the documentation here:
https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike
Out[4]:
1    2.0
2    3.0
3    NaN
dtype: float64

在这里 pandas 跑出了错误和解决指引。但是这个指引对不熟悉 pandas 的人来说并不友好,下面给出类似结果的简单操作。

简单实现相同的操作

在当前版本(>0.21.0),我们可以根据官方指引,使用 .reindex 得到相同结果:

s.reindex([1, 2, 3])

在 DataFrame 中,也类似; 若需使用列而非行,则需要指定 axis:

df.reindex([1, 2, 3], axix=1) # 列

更多样例可参见原文档

Pandas 真是更新狂魔。

线性回归的多重共线性问题

#每日一题 在多元线性回归中,自变量间的多重共线性问题如何判断和处理?
【定义】当自变量之间存在某种线性关系或高度相关的时候,就会发生多重共线性问题。
多重共线性问题的两种情形都会给回归模型的参数估计带来困难。完全多重共线性问题指矩阵X’X严格不可逆的情形,造成了模型的不可估计;近似多重共线性问题即数据矩阵中的一个或几个列向量可以近似地表达为其他列向量的线性组合的情形,会导致参数估计值的标准误过大。
【判断】一个判断是否存在严重近似共线性问题的经验性原则是:(1)自变量中最大的方差膨胀因子VIF大于10;(2)平均方差膨胀因子VIF明显大于1。
【解决】当多重共线性问题发生时,我们需要对其进行处理才能保证模型本身的有效性。
如果发生的是完全多重共线性问题,则直接删除在数据中不必要的变量即可。这些变量可能是虚拟变量中的参照组,也可是包含了某些变量或其线性组合而生成的新变量。只要保证删除变量后无完全多重共线性问题即可。
如果发生的是近似多重共线性问题,就没有特别简单的方法来解决。如果在理论上我们可以识别某些自变量,即自变量在理论上都是有意义且意义不重复或每个自变量都不可以被其他自变量线性解释,那么当在实际中出现近似多重共线性问题时,我们可以通过增大样本量来解决多重共线性问题。
但是当没有明确的理论,不能在理论上识别某些自变量的时候,可以利用一些技术上的处理方法来减少自变量的数目。比较典型的方法是把彼此之间存在一定相关性的变量综合成较少的几个变量。这种综合变量信息的方法包括偏最小二乘回归分析、主成分分析法以及由主成分分析法推广得到的因子分析。
【参考】谢宇《回归分析》
每日一题历史记录 https://data-analysis-mining-cn.github.io/tags/每日一题/