机器学习模型有强大而复杂的数学结构。了解其错综复杂的工作原理是模型开发的一个重要方面。模型可视化对于获得见解、做出明智的决策和有效传达结果至关重要。
在本文中,我们将深入探讨机器学习可视化的艺术,探索帮助我们理解复杂数据驱动系统的各种技术。文末,还提供了一个可视化示例的实践代码。
什么是机器学习中的可视化?
机器学习可视化(简称ML可视化)一般是指通过图形或交互方式表示机器学习模型、数据及其关系的过程。目标是使理解模型的复杂算法和数据模式更容易,使技术和非技术利益相关者更容易理解它。
可视化弥合了机器学习模型神秘的内部运作与我们通过视觉理解模式之间的差距。
通过可视化 ML 模型主要有如下作用:
模型结构可视化:常见的模型类型,如决策树、支持向量机或深度神经网络,通常由许多计算和交互层组成,人类很难掌握这些计算和交互。通过可视化,我们可以更轻松地查看数据如何流经模型以及转换发生的位置。
可视化性能指标:一旦我们训练了一个模型,我们就需要评估它的性能。可视化准确性、精确度、召回率和 F1 分数等指标有助于我们了解模型的表现以及需要改进的地方。
比较模型分析:在处理多个模型或算法时,结构或性能差异的可视化使我们能够为特定任务选择最佳模型或算法。
特征重要性:了解哪些特征对模型的预测影响最大至关重要。特征重要性图等可视化技术可以轻松识别驱动模型结果的关键因素。
可解释性:由于其复杂性,ML模型对人类创建者来说通常是“黑匣子”,因此很难解释他们的决定。可视化可以阐明特定特征如何影响输出或模型预测的鲁棒性。
利于沟通:可视化是一种通用语言,用于简单直观地传达复杂的想法。它们对于与管理层和其他非技术利益相关者有效共享信息至关重要。
模型结构可视化
了解数据如何流经模型对于了解机器学习模型如何将输入特征转换为其输出至关重要。
决策树可视化
决策树具有大多数人都熟悉的类似流程图的结构。每个内部节点都表示基于特定功能值的决策。节点中的每个分支都表示该决策的结果。叶节点表示模型的输出。
这种结构的可视化提供了决策过程的直接表示,使数据科学家和业务利益相关者能够理解模型所学习的决策规则。
在训练过程中,决策树根据特定标准(通常是基尼杂质或信息增益)识别最能分离分支中样本的特征。换句话说,它决定了最具辨别性的特征。
可视化决策树(或它们的集合,如随机森林或梯度增强树)涉及其整体结构的图形渲染,清晰直观地显示每个节点的拆分和决策。树的深度和宽度以及叶子节点一目了然。此外,决策树可视化有助于识别关键特征,这些特征是导致准确预测的最具辨别性的属性。
准确预测的路径可以归纳为四个步骤:
功能清晰:决策树可视化就像剥开复杂性层,以揭示关键功能。这类似于查看决策流程图,其中每个分支表示一个特征,每个决策节点都包含我们数据的关键方面。
判别属性:决策树可视化的美妙之处在于它能够突出显示最具判别性的特征。这些因素会严重影响结果,指导模型进行预测。通过可视化树,我们可以精确定位这些特征,从而了解驱动模型决策的核心因素。
通往精确度的路径:决策树上的每条路径都是通往精确度的旅程。可视化展示了导致特定预测的决策序列。这是理解我们的模型用来得出特定结论的逻辑和标准的黄金。
复杂中的简单:尽管机器学习算法很复杂,但决策树可视化具有简单性。它将复杂的数学计算转换为直观的表示形式,使技术和非技术利益相关者都可以访问。
机器学习中的决策树可视化示例:在 Iris 数据集上训练的决策树分类器 |来源:作者
上图显示了在著名的 Iris 数据集上训练的决策树分类器的结构。该数据集由150 个鸢尾花样本组成,每个样本属于以下三个物种之一:setosa、versicolor 或 virginica。每个样品有四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。
从决策树可视化中,我们可以了解模型如何对花朵进行分类:
根节点:在根节点处,模型确定花瓣长度是否为 2.45 厘米或更小。如果是这样,它将花归类为 setosa。否则,它将移动到下一个内部节点。
基于花瓣长度的第二次分割:如果花瓣长度大于 2.45 厘米,则树再次使用此功能做出决定。决定标准是花瓣长度是否小于或等于 4.75 厘米。
根据花瓣宽度进行分割:如果花瓣长度小于或等于 4.75 厘米,则模型接下来会考虑花瓣宽度并确定它是否高于 1.65 厘米。如果是这样,它将花归类为弗吉尼亚。否则,模型的输出是多色的。
根据萼片长度进行分割:如果花瓣长度大于 4.75 厘米,则模型在训练期间确定萼片长度最适合区分花色和维吉尼亚。如果萼片长度大于 6.05 厘米,则将花归类为弗吉尼亚花。否则,模型的输出是多色的。
可视化捕获了这种分层决策过程,并以一种比简单的决策规则列表更易于理解的方式表示它。
集成模型可视化
随机森林、AdaBoost、梯度提升和装袋等集成方法将多个更简单的模型(称为基础模型)合并到一个更大、更准确的模型中。例如,随机森林分类器包含许多决策树。在调试和评估集成时,了解组成模型的贡献和复杂的相互作用至关重要。
可视化集成模型的一种方法是创建一个图表,显示基本模型如何为集成模型的输出做出贡献。一种常见的方法是绘制基础模型的决策边界(也称为曲面),突出显示它们对特征空间不同部分的影响。通过研究这些决策边界如何重叠,我们可以了解基础模型如何产生集合的集体预测能力。
集成模型可视化示例:各个分类器如何通过调整其决策边界来适应不同的数据分布。较暗的区域表示更高的置信度,即模型对其预测的置信度更高。较轻的区域表示置信度较低的区域 |源
集成模型可视化还可以帮助用户更好地理解分配给集成中每个基本模型的权重。通常,基础模型对特征空间的某些区域有很强的影响,而对其他区域的影响很小。但是,也可能存在从未对集成输出做出重大贡献的基本模型。识别权重特别低或特别高的基本模型有助于使集成模型更加稳健并提高其泛化性。
直观地构建模型
Visual ML 是一种使用低代码或无代码平台设计机器学习模型的方法。它使用户能够通过用户友好的可视化界面创建和修改复杂的机器学习过程、模型和结果。Visual ML 不是追溯生成模型结构可视化,而是将它们置于 ML 工作流的核心。
简而言之,Visual ML 平台提供拖放式模型构建工作流程,允许各种背景的用户轻松创建 ML 模型。它们弥合了算法的抽象世界与我们通过视觉掌握模式和关系的天生能力之间的差距。
这些平台可以节省我们的时间,并帮助我们快速构建模型原型。由于可以在几分钟内创建模型,因此训练和比较不同的模型配置很容易。然后,可以进一步优化性能最佳的模型,也许可以使用更以代码为中心的方法。
数据科学家和机器学习工程师可以利用 Visual ML 工具创建:
1实验原型
2 MLOps 管道
3为生产生成最佳的 ML 代码
4扩展现有 ML 模型代码库以获得更大的示例
如何在没有代码的情况下创建 ML/DL 模型的示例。这种类型的界面是敏捷的,可以详细了解模型的工作原理 |源
Visual ML 工具的示例包括 TensorFlow 的 Neural Network Playground 和 KNIME,后者是一个完全围绕 Visual ML 和无代码概念构建的开源数据科学平台。
可视化机器学习模型性能
在许多情况下,我们不太关心模型在内部是如何工作的,而是有兴趣了解它的性能。对于哪种样品是可靠的?它经常在哪里得出错误的结论?我们应该选择模型 A 还是模型 B?
在本节中,我们将介绍机器学习可视化效果,这些可视化效果有助于我们更好地了解模型的性能。
混淆矩阵
混淆矩阵是评估分类模型性能的基本工具。混淆矩阵将模型的预测与基本事实进行比较,清楚地显示模型错误分类了哪种样本,或者它难以区分类别。
对于二元分类器,混淆矩阵只有四个字段:真阳性、假阳性、假阴性和真阴性:
模型预测:0 | 模型预测:1 | |
真值:0 | 真阴性 | 误报 |
真值:1 | 假阴性 | 真阳性 |
有了这些信息,就可以直接计算精度、召回率、F1 分数和准确性等基本指标。
多类模型的混淆矩阵遵循相同的一般思路。对角线元素表示正确分类的实例(即,模型的输出与真实值匹配),而非对角线元素表示错误分类。
下面是一个小片段,用于为 sci-kit-learn 分类器生成混淆矩阵:
import matplotlib.pyplot as plt from sklearn.datasets import make_classification from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay from sklearn.model_selection import train_test_split from sklearn.svm import SVC # generate some sample data X, y = make_classification(n_samples=1000, n_features=10, n_informative=6, n_redundant = 2, n_repeated = 2, n_classes = 6, n_clusters_per_class=1, random_state = 42 ) # split the data into train and test set X_train, X_test, y_train, y_test = train_test_split(X, y,random_state=0) # initialize and train a classifier clf = SVC(random_state=0) clf.fit(X_train, y_train) # get the model’s prediction for the test set predictions = clf.predict(X_test) # using the model’s prediction and the true value, # create a confusion matrix cm = confusion_matrix(y_test, predictions, labels=clf.classes_) # use the built-in visualization function to generate a plot disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=clf.classes_) disp.plot() plt.show()
模型性能可视化示例:6×6 混淆矩阵 |来源:作者
让我们看一下输出。如前所述,对角线中的元素表示真实的类,对角线外的元素表示模型混淆类的情况,因此得名“混淆矩阵”。
以下是该图的三个关键要点:
对角线:理想情况下,矩阵的主对角线应填充最高数字。这些数字表示模型正确预测类的实例,与真实类一致。看起来我们的模型在这里做得很好!
非对角线条目:主对角线外的数字同样重要。它们揭示了模型出错的情况。例如,如果查看第 5 行与第 3 列相交的单元格,您会看到有 5 种情况,其中真正的类是“5”,但模型预测的类是“3”。也许我们应该看看受影响的样本,以更好地了解这里发生了什么!
一目了然地分析性能:通过检查非对角线条目,您可以立即看到它们非常低。总的来说,分类器似乎做得很好。您还会注意到,我们每个类别的样本数量大致相同。在许多现实世界的场景中,情况并非如此。然后,生成第二个混淆矩阵,显示正确分类的可能性(而不是样本的绝对数量)可能会有所帮助。
颜色渐变和百分比注释等视觉增强功能使混淆矩阵更加直观且易于解释。样式类似于热图的混淆矩阵会引起对错误率高的类的注意,从而指导进一步的模型开发。
混淆矩阵还可以帮助非技术利益相关者掌握模型的优势和劣势,促进讨论在使用模型预测进行关键决策时是否需要额外的数据或预防措施。
可视化聚类分析
聚类分析根据特定特征对相似的数据点进行分组。可视化这些聚类可以揭示数据中的模式、趋势和关系。
散点图中每个点根据其聚类分配进行着色,是可视化聚类分析结果的标准方法。聚类边界及其在要素空间中的分布清晰可见。成对图或平行坐标有助于了解多个要素之间的关系。
可视化聚类分析示例:由 k 均值聚类生成的两个不同数据聚类。您可以看到,在这两种情况下,模型找到的聚类(颜色编码)都与数据中的实际聚类不匹配 |源
一种流行的聚类算法 k-means 从选择称为质心的起点开始。一种简单的方法是从数据集中随机选取 k 个样本。
一旦建立了这些初始质心,k-means 将在两个步骤之间交替:
1它将每个样本与最近的质心相关联,从而创建由与同一质心关联的样本组成的聚类。
2它通过对聚类中所有样本的值求平均值来重新校准质心。
随着此过程的继续,质心会移动,并且点与聚类的关联会迭代细化。一旦新旧质心之间的差值低于设定的阈值,则表示稳定,k-means 结束。
结果是一组质心和聚类,您可以在如上图所示的图中可视化它们。
对于较大的数据集,可以使用 t-SNE(t 分布的随机邻域嵌入)或 UMAP(均匀流形近似和投影)来减少维度,同时保留聚类结构。这些技术有助于有效地可视化高维数据。
t-SNE 获取复杂的高维数据,并将其转换为低维表示。该算法首先为每个数据点分配一个低维空间中的位置。然后,它查看原始数据,并考虑其相邻点,决定每个点在这个新空间中的实际位置。在高维空间中相似的点在新空间中被拉得更近,而那些不同的点被推开。
重复此过程,直到点找到其完美位置。最终结果是一个聚类表示,其中相似的数据点形成组,使我们能够看到隐藏在高维混沌中的模式和关系。这就像一首交响乐,每个音符都能找到它和谐的位置,创造出一个美丽的数据组合。
t-SNE 算法从低维空间中的高维数据创建聚类 |源
UMAP也试图在高维空间中寻找星团,但采用了不同的方法。以下是UMAP的工作原理:
邻居查找:UMAP 首先识别每个数据点的邻居。它确定在原始高维空间中哪些点彼此靠近。
模糊简单集构造:想象一下在这些相邻点之间创建一个连接网络。UMAP 根据点的相关或相似程度对这些连接的强度进行建模。
低维布局:在确定它们的接近度后,UMAP在低维空间中仔细排列数据点。在这个新空间中,在高维空间中紧密相连的点被紧密地放置在一起。
优化:UMAP旨在找到较低维度的最佳表示形式。它最小化了原始高维空间和新的低维空间中的距离差异。
聚类:UMAP使用聚类算法对相似的数据点进行分组。想象一下,将相似颜色的弹珠聚集在一起——这使我们能够更清楚地看到图案和结构。
比较模型分析
比较不同的模型性能指标对于确定哪种机器学习模型最适合任务至关重要。无论是在机器学习项目的实验阶段,还是在重新训练生产模型时,通常都需要可视化来将复杂的数值结果转化为可操作的见解。
因此,模型性能指标的可视化,如ROC曲线和校准图,是每个数据科学家和机器学习工程师都应该在其工具箱中拥有的工具。它们是理解和传达机器学习模型有效性的基础。
模型分析示例:使用 ROC 曲线和 ROC-AUC 指标比较三个不同的模型
ROC 曲线
在分析机器学习分类器和比较 ML 模型性能时,受试者工作特征曲线(简称 ROC 曲线)至关重要。
ROC 曲线将模型的真阳性率与其假阳性率作为截止阈值的函数进行对比。它描述了我们总是必须做出的真阳性和假阳性之间的权衡,并提供了对模型判别力的洞察。
靠近左上角的曲线表示卓越的性能:该模型实现了较高的真阳性率,同时保持了较低的误报率。比较 ROC 曲线有助于我们选择最佳模型。
以下是 ROC 曲线工作原理的分步说明:
在二元分类中,我们感兴趣的是预测两种可能的结果之一,通常标记为阳性(例如,存在疾病)和阴性(例如,没有疾病)。
请记住,我们可以通过选择一个类作为正结果并将所有其他类指定为负结果,将任何分类问题转换为二元问题。因此,ROC曲线对于多类或多标签分类问题仍然有帮助。
ROC 曲线的轴代表两个指标:
真阳性率(灵敏度):模型正确识别的实际阳性病例的比例。
假阳性率:实际阴性病例被错误识别为阳性的比例。
机器学习分类器通常输出样本属于正类的可能性。例如,逻辑回归模型输出的值介于 0 和 1 之间,这些值可以解释为似然。
作为数据科学家,我们有责任选择阈值,高于该阈值,我们分配正面标签。ROC 曲线向我们展示了该选择对分类器性能的影响。
如果我们将阈值设置为 0,则所有样本都将分配给阳性类,误报率为 1。因此,在任何 ROC 曲线图的右上角,您将看到曲线在 (1, 1) 处结束。
如果我们将阈值设置为 1,则不会将任何样本分配给正类。但是,由于在这种情况下,我们永远不会错误地将负样本分配给正类,因此误报率将为 0。您可能已经猜到了,这就是我们在 ROC 曲线图的左下角看到的:曲线总是从 (0, 0) 开始。
通过更改将样本分类为阳性的阈值来绘制这些点之间的曲线。由此产生的曲线(ROC 曲线)反映了真阳性率和假阳性率如何随着该阈值的变化而相互变化。
但是我们从中学到了什么?
ROC 曲线显示了我们必须在灵敏度(真阳性率)和特异性(1 – 假阳性率)之间做出的权衡。用更通俗的术语来说,我们可以找到所有阳性样本(高灵敏度),或者确保我们的分类器识别为阳性的所有样本实际上都属于阳性类别(高特异性)。
考虑一个可以完美区分正样本和负样本的分类器:它的真阳性率始终为 1,其假阳性率始终为 0,与我们选择的阈值无关。它的 ROC 曲线将从 (0,0) 直线向上射到 (0,1),然后类似于 (0,1) 和 (1,1) 之间的直线。
因此,ROC曲线越接近图的左侧边界,然后是顶部边界,模型的判别性就越强,就越能满足敏感性和特异性目标。
为了比较不同的模型,我们通常不直接使用曲线,而是计算曲线下的面积。这量化了模型区分正类和负类的整体能力。
这个所谓的 ROC-AUC(ROC 曲线下的面积)可以取 0 到 1 之间的值,值越高表示性能越好。事实上,我们的完美分类器将达到正好 1 的 ROC-AUC。
使用 ROC-AUC 指标时,必须记住基线不是 0,而是 0.5——完全随机分类器的 ROC-AUC。如果我们使用 np.random.rand() 作为分类器,则生成的 ROC 曲线将是一条从 (0,0) 到 (1,1) 的对角线。
比较模型分析示例:随机分类器的 ROC 曲线是对角线的,因此 ROC-AUC 为 0.5。以黄色显示的实际 ML 分类器的 ROC 曲线始终位于该线上方,ROC-AUC 为 0.78 |源
使用 scikit-learn 生成 ROC 曲线和计算 ROC-AUC 非常简单。只需在模型训练脚本中编写几行代码,即可为每个训练运行创建此评估数据。使用 ML 实验跟踪工具记录 ROC-AUC 和 ROC 曲线图时,您可以稍后比较不同的模型版本。
实验记录
在可视化、比较和调试模型时,有条不紊地记录所有实验非常有用。
计算和记录 ROC-AUC from sklearn.metrics import roc_auc_score clf.fit(x_train, y_train) y_test_pred = clf.predict_proba(x_test) auc = roc_auc_score(y_test, y_test_pred[:, 1]) # optional: log to an experiment-tracker like neptune.ai neptune_logger.run["roc_auc_score"].append(auc) 创建和记录 ROC 图 from scikitplot.metrics import plot_roc import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(16, 12)) plot_roc(y_test, y_test_pred, ax=ax) # optional: log to an experiment tracker like neptune.ai from neptune.types import File neptune_logger.run["roc_curve"].upload(File.as_html(fig))
校准曲线
虽然机器学习分类器通常为每个类输出介于 0 和 1 之间的值,但这些值并不代表统计意义上的可能性或置信度。在许多情况下,这完全没问题,因为我们只对获得正确的标签感兴趣。
但是,如果我们想报告置信水平以及分类结果,我们必须确保我们的分类器经过校准。校准曲线是了解分类器校准情况的有用视觉辅助工具。我们还可以使用它们来比较不同的模型或检查我们重新校准模型的尝试是否成功。
让我们再次考虑输出介于 0 和 1 之间的值的模型的情况。如果我们选择一个阈值,比如 0.5,我们可以将其转换为二元分类器,其中模型输出较高值的所有样本都分配给正类(反之亦然)。
校准曲线根据模型的输出绘制“正分数”。“正分数”是给定模型输出的样本实际属于正类的条件概率(P(样本属于正类|模型的输出介于 0 和 1 之间))。
这听起来是不是太抽象了?让我们看一个例子:
校准曲线示例:比较不同型号 | 来源:作者
首先,看一下对角线。它代表了一个完美校准的分类器:模型的输出介于 0 和 1 之间,恰好是样本属于正类的概率。例如,如果模型输出 0.5,则样本属于正类或负类的几率为 50:50。如果模型对样本输出 0.2,则该样本属于正类的可能性只有 20%。
接下来,考虑朴素贝叶斯分类器的校准曲线:您会看到,即使此模型输出 0,样本也有大约 10% 的几率为正。如果模型输出 0.8,则样本仍有 50% 的可能性属于负类。因此,分类器的输出不能反映其置信度。
计算“正数的分数”远非易事。我们需要根据模型的输出创建条柱,由于模型值范围内的样本分布通常不是均匀的,因此这很复杂。例如,逻辑回归分类器通常将接近 0 或 1 的值分配给许多样本,但很少输出接近 0.5 的值。您可以在 scikit-learn 文档中找到有关此主题的更深入讨论。在那里,您还可以深入了解重新校准模型的可能方法,这超出了本文的范围。
就我们的目的而言,我们已经了解了校准曲线如何以易于掌握的方式可视化复杂的模型行为。通过快速浏览图,我们可以看到模型是否经过良好校准以及哪个模型最接近理想。
可视化超参数优化
超参数优化是开发机器学习模型的关键步骤。目的是选择超参数的最佳配置——超参数的通用名称,不是模型从数据中学习的,而是由其人类创建者预定义的。可视化可以帮助数据科学家了解不同超参数对模型性能和属性的影响。
找到超参数的最佳配置本身就是一项技能,远远超出了我们将在这里重点关注的机器学习可视化方面。要了解有关超参数优化的更多信息,我推荐这篇由前 Amazon AI 研究人员撰写的关于提高 ML 模型性能的文章。
系统超参数优化的常用方法是创建可能的参数组合列表,并为每个参数组合训练一个模型。这通常称为“网格搜索”。
例如,如果您正在训练支持向量机 (SVM),您可能希望尝试参数 C(正则化参数)和 gamma(核系数)的不同值:
import numpy as np C_range = np.logspace(-2, 10, 13) gamma_range = np.logspace(-9, 3, 13) param_grid = {“gamma”: gamma_range, “C”: C_range}
使用 scikit-learn 的 GridSearchCV,您可以为每个可能的组合(使用交叉验证策略)训练模型,并找到与评估指标相关的最佳组合:
from sklearn.model_selection import GridSearchCV, grid = GridSearchCV(SVC(), param_grid=param_grid, scoring=’accuracy’) grid.fit(X, y)
网格搜索结束后,可以检查结果:
print( "The best parameters are %s with a score of %0.2f" % (grid.best_params_, grid.best_score_) )
但我们通常不仅对找到最佳模型感兴趣,还想了解其参数的影响。例如,如果一个参数不影响模型的性能,我们就不需要浪费时间和金钱来尝试更多不同的值。另一方面,如果我们看到随着参数值的增加,模型的性能变得更好,我们可能希望为这个参数尝试更高的值。
下面是我们刚刚执行的网格搜索的可视化效果:
网格搜索可视化示例:使用不同值的 gamma 和 C 进行 SVM 分类器训练如何在测试集上执行 |源
从图中可以看出,伽马的值对支持向量机的性能影响很大。如果伽玛设置得太高,则支持向量的影响半径很小,即使通过 C 进行大量正则化,也可能导致过度拟合。在这种情况下,任何支持向量的影响区域都跨越整个训练集,使模型类似于线性模型,使用超平面来分隔不同类别的密集区域。
最佳模型位于 C 和 gamma 的对角线上,如第二个绘图面板所示。通过调整 gamma(较低的值表示更平滑的模型)和增加 C(较高的值表示更强调正确的分类),我们可以遍历这条对角线以获得性能良好的模型。
即使从这个简单的示例中,您也可以看到可视化对于深入了解模型性能差异的根本原因有多么有用。这就是为什么许多机器学习实验跟踪工具使数据科学家能够创建不同类型的可视化来比较模型版本的原因。
特征重要性可视化
特征重要性可视化提供了一种清晰直观的方式来掌握模型决策过程中每个特征的贡献。在许多应用中,了解哪些特征会显著影响预测至关重要。
从机器学习模型中提取有关特征重要性的见解有很多不同的方法。从广义上讲,我们可以将它们分为两类:
某些类型的模型(如决策树和随机森林)本身包含特征重要性信息作为其模型结构的一部分。我们需要做的就是提取和可视化它。
目前使用的大多数机器学习模型都无法提供开箱即用的特征重要性信息。我们必须使用统计技术和算法方法来揭示它们的每个输入特征对模型最终输出的重要性。
在下文中,我们将查看每个类别的一个示例:随机森林模型的杂质平均减少方法和与模型无关的 LIME 可解释性方法。您可能想要研究的其他方法包括排列重要性、SHAP 和积分梯度。
就本文而言,我们不太关心如何获取特征重要性数据,而是关心其可视化。为此,条形图是结构化数据的首选,每个条形的长度表示要素的重要性。热图显然是图像的最爱,而对于文本数据,突出显示最重要的单词或短语是典型的。
在业务环境中,特征重要性可视化是利益相关者沟通的宝贵工具。它提供了一个直截了当的叙述,展示了主要影响预测的因素。这种透明度增强了决策能力,并可以培养对模型结果的信任。
使用杂质平均减少法进行特征重要性可视化示例 |来源:作者
杂质平均减少法进行特征重要性评估
杂质(不纯度)的平均减少量是衡量每个特征对决策树性能的贡献的指标。要理解这一点,我们首先需要了解“杂质”在这种情况下的含义。
我们先打个比方:
假设我们有一个水果篮,里面有苹果、梨和橙子。当水果片放在篮子里时,它们被彻底混合,我们可以说这套水果的杂质很高。
现在,我们的任务是按种类对它们进行分类。如果我们把所有的苹果都放进一个碗里,把橘子放在托盘上,把梨放在篮子里,我们就会剩下三套纯度完美的苹果。
但转折点来了:我们在做决定时看不到果实。对于每块水果,我们都会被告知它的颜色、直径和重量。然后,我们需要决定它应该去哪里。因此,这三个属性是我们的特点。
水果块的重量和直径将非常相似。它们对我们进行分类没有多大帮助——或者换一种说法,它们对减少杂质没有帮助。
但是颜色会有所帮助。我们可能仍然难以区分绿色或黄色的苹果和绿色或黄色的梨,但如果我们得知颜色是红色或橙色,我们就可以自信地做出决定。因此,“颜色”将给我们带来最大的杂质平均减少。
现在,让我们在决策树和随机森林的上下文中使用这个类比:
在构建决策树时,我们希望每个节点在目标变量方面尽可能纯粹。用更通俗的术语来说,在为我们的树创建新节点时,我们的目标是找到最能将到达节点的样本分成两个不同集的特征,以便具有相同标签的样本位于同一集合中。(有关完整的数学详细信息,请参阅 scikit-learn 文档)。
决策树中的每个节点都减少了杂质——粗略地说,它有助于按目标标签对训练样本进行排序。假设一个特征是树中许多节点的决策标准,并且它可以有效地干净地划分样本。在这种情况下,它将负责决策树总体上实现的杂质减少的很大一部分。这就是为什么查看一个特征所负责的“杂质平均减少”是衡量特征重要性的一个很好的指标。
呜,这真是太复杂了!
幸运的是,可视化并不难阅读。我们可以清楚地识别模型的主要驱动因素,并在特征选择中使用这些信息。将模型的输入空间减少到最关键的特征可以降低其复杂性,并可以防止过度拟合。
此外,了解特征重要性有助于数据准备。重要性较低的要素可能是移除或合并的候选要素,从而简化了输入数据预处理。
不过,在我们继续之前,我想提一下一个重要的警告。由于节点的杂质减少是在训练期间确定的,因此使用训练数据集,“杂质的平均减少”不一定转化为以前看不见的测试数据:
假设我们的训练样本已编号,此编号是模型的输入特征。然后,如果我们的决策树足够复杂,它可以只知道哪个样本具有哪个标签(例如,“水果 1 是橙子”、“水果 2 是苹果”......数字特征的杂质平均减少将是巨大的,它将在我们的可视化中作为一个非常重要的特征出现,尽管在将我们的模型应用于以前从未见过的数据时,它完全没有用。
局部可解释模型无关解释 (LIME)
局部可解释性方法旨在阐明模型在特定实例中的行为。(与此相反的是全局可解释性,即检查模型在其整个特征空间中的行为。
局部可解释模型不可知解释 (LIME) 和产生重要特征的示例 |来源:作者
最古老且仍然广泛使用的技术之一是 LIME(本地可解释模型不可知解释)。为了揭示每个输入特征对模型预测的贡献,需要拟合一个线性模型,该模型近似于模型在特征空间特定区域的行为。粗略地说,线性模型的系数反映了输入要素的重要性。结果可以可视化为特征重要性图,突出显示对特定预测最有影响力的特征。
局部可解释性技术可以从复杂的算法中提取直观的见解。这些结果的可视化可以支持与业务利益相关者的讨论,或者成为与领域专家交叉检查模型学习行为的基础。它们提供实用的、可操作的见解,增强对模型复杂内部运作的信任,并且可以成为促进机器学习采用的重要工具。
如何在机器学习中采用模型可视化?
在本节中,我将分享有关将模型可视化无缝集成到日常数据科学和机器学习例程中的技巧。
1. 从明确的目标开始
在深入研究模型可视化之前,请确定一个明确的目的。问问自己,“我打算通过可视化实现哪些具体目标?
您是否正在寻求...
...提高模型性能?
...增强可解释性?
...更好地将结果传达给利益相关者?
定义目标将提供有效可视化所需的方向。
2. 选择合适的可视化效果
始终采用自上而下的方法。这意味着您从非常抽象的级别开始,然后更深入地探索以获得更多见解。
例如,如果您正在寻求提高模型的性能,请确保首先从简单的方法开始,例如使用简单的折线图绘制模型的精度和损失。
假设您的模型过拟合。然后,您可以使用特征重要性技术根据特征对模型性能的贡献对特征进行排名。您可以绘制这些特征重要性分数,以可视化模型中最具影响力的特征。重要性较高的特征可能指向过拟合和信息泄露。
同样,您可以为相关要素创建部分依赖关系图。PDP 显示目标变量的预测如何随着特定特征的变化而变化,同时保持其他特征不变。您必须查找曲线中的不稳定行为或剧烈波动,这可能表明由于该特征而导致的过度拟合。
3. 选择合适的工具
选择正确的工具取决于手头的任务和工具提供的功能。Python 提供了大量库,如 Matplotlib、Seaborn 和 Plotly,用于创建静态和交互式可视化。特定于框架的工具(例如用于 TensorFlow 的 TensorBoard 和用于 scikit-learn 的 scikit-plot)对于特定于模型的可视化非常有价值。
4. 迭代和改进
请记住,模型可视化是一个迭代过程。根据团队和利益相关者的反馈不断优化可视化效果。最终目标是使您的模型透明、可解释且可供所有利益相关者访问。他们的意见和不断变化的项目要求可能意味着您需要重新考虑和调整您的方法。
将模型可视化整合到您的日常数据科学或机器学习实践中,使您能够清晰、自信地做出数据驱动的决策。无论您是数据科学家、领域专家还是决策者,将模型可视化作为常规实践都是充分利用机器学习项目潜力的关键一步。
总结
有效的机器学习模型可视化是任何数据科学家不可或缺的工具。它使从业者能够获得洞察力,做出明智的决策,并透明地传达结果。
在本文中,我们介绍了大量有关如何可视化机器学习模型的信息。总而言之,以下是一些关键要点:
机器学习中可视化的目的:
可视化简化了复杂的 ML 模型结构和数据模式,以便更好地理解。
交互式可视化和 Visual ML 工具使用户能够与数据和模型进行动态交互。他们可以调整参数,放大细节,并更好地了解ML系统。
可视化有助于做出明智的决策和有效的结果沟通。
机器学习可视化的类型:
模型结构可视化可帮助数据科学家、AI 研究人员和业务利益相关者了解复杂的算法和数据流。
通过模型性能可视化,可以深入了解单个模型和模型集成的性能特征。
用于比较模型分析的可视化可帮助从业者选择性能最佳的模型或验证新模型版本是否是一种改进。
特征重要性可视化揭示了每个输入特征对模型输出的影响。
模型可视化的实践:
从明确的目标和简单的可视化开始。
选择适合您需求且目标受众可以使用的适当可视化方法。
选择合适的工具和库,帮助您高效地制作准确的可视化效果。
持续听取反馈,并根据利益相关者的需求调整可视化效果。
审核编辑:黄飞
评论
查看更多