manifold
Manifold 是一款由 Uber 开源的机器学习可视化调试工具,旨在帮助开发者透过黑箱,直观地理解模型表现。在机器学习中,仅依赖 AUC、RMSE 等整体统计指标往往难以定位模型出错的具体原因。Manifold 解决了这一痛点,它不局限于单一模型或特定算法,而是支持对多个模型进行横向对比,帮助用户快速识别出模型在哪些数据子集上预测不准,并进一步分析导致性能差异的特征分布根源。
这款工具特别适合机器学习工程师、数据科学家及算法研究人员使用。无论是需要优化现有模型的性能,还是希望在多个候选模型中做出最佳选择,Manifold 都能提供有力的视觉支持。其核心技术亮点在于“模型无关”的设计架构,这意味着无论底层使用的是何种算法,用户均可通过统一的界面进行分析。此外,Manifold 提供了性能对比视图和特征归因视图,不仅能宏观展示不同数据片段上的表现差异,还能微观揭示影响预测结果的关键特征分布变化。通过将抽象的数据关系转化为直观的图表,Manifold 让复杂的模型诊断过程变得更加清晰高效,是提升机器学习可解释性与调试效率的得力助手。
使用场景
某金融风控团队正在优化信用卡欺诈检测模型,试图在保持高召回率的同时降低误报率。
没有 manifold 时
- 团队仅依赖 AUC 或 RMSE 等汇总指标评估模型,无法察觉模型在特定用户群体(如年轻租户)中的严重失效。
- 面对整体性能瓶颈,开发人员只能盲目调整超参数或尝试不同算法,缺乏针对错误数据子集的定位依据。
- 难以解释为何模型在某些样本上表现糟糕,无法直观对比“预测准确”与“预测错误”两组数据的特征分布差异。
- 多模型对比耗时费力,需要手动编写大量代码生成图表才能判断哪个模型在关键细分场景下更优。
使用 manifold 后
- 通过性能对比视图,团队迅速锁定模型在“无固定住所”这一细分数据子集上准确率极低,而不仅仅是看到整体平均分下降。
- 利用特征归因视图,直接发现该失败子集中“交易地点变动频率”的分布与成功子集存在显著偏差,明确了模型失效的根本原因。
- 无需编写额外绘图代码,即可在同一界面并排对比三个候选模型在不同数据段的表现,快速选出在高风险群体中表现最稳健的模型。
- 基于可视化的洞察,团队针对性地增加了相关特征工程,而非盲目重试,显著提升了迭代效率。
Manifold 将黑盒模型的调试过程从“猜谜游戏”转变为基于数据分布差异的精准诊断,让开发者能透过汇总指标看清模型在具体场景中的真实行为。
运行环境要求
- 未说明
未说明
未说明

快速开始
Manifold
本项目现已稳定,并处于长期支持的孵化阶段。
Manifold 是一款与模型无关的机器学习可视化调试工具。
鉴于机器学习算法本身的不透明性,理解模型性能和行为并非易事。诸如 AUC、RMSE 等性能汇总统计指标往往不足以帮助我们找出模型的问题所在或改进方向。
作为一款可视化分析工具,Manifold 使机器学习从业者能够超越整体汇总指标,定位出模型预测不准确的数据子集。同时,它还能通过比较表现较好与较差数据子集之间的特征分布差异,揭示模型性能不佳的潜在原因。
目录
准备您的数据
有两种方式可以将数据输入到 Manifold 中:
无论哪种方式,直接输入到 Manifold 的数据都应遵循以下格式:
const data = {
x: [...], // 特征数据
yPred: [[...], ...] // 预测数据
yTrue: [...], // 真实标签数据
};
这些数组中的每个元素代表评估数据集中的一个数据点,且 x、yPred 和 yTrue 中数据实例的顺序必须一致。建议每份数据集包含 10,000 至 15,000 个样本。如果您拥有更大的数据集,通常只需抽取其中的一个随机子集,即可揭示数据中的重要模式。
x: {Object[]}
包含特征的实例列表。示例(2 个数据实例):
[{feature_0: 21, feature_1: 'B'}, {feature_0: 36, feature_1: 'A'}];
yPred: {Object[][]}
由多个列表组成的列表,其中每个子列表对应于某一模型对每个数据实例的预测结果。示例(3 个模型,2 个数据实例,2 个类别 ['false', 'true']):
[
[{false: 0.1, true: 0.9}, {false: 0.8, true: 0.2}],
[{false: 0.3, true: 0.7}, {false: 0.9, true: 0.1}],
[{false: 0.6, true: 0.4}, {false: 0.4, true: 0.6}],
];
yTrue: {Number[] | String[]}
真实标签的列表,每个数据实例对应一个标签。对于回归模型,标签必须是数值;而对于分类模型,标签则必须是字符串,且需与 yPred 中的对象键相匹配。示例(2 个数据实例,2 个类别 ['false', 'true']):
['true', 'false'];
解读可视化结果
本指南将介绍如何解读 Manifold 的可视化结果。
Manifold 包含以下两部分:
性能对比视图
该可视化展示了您的模型在数据不同分段上的整体性能概况,有助于识别表现欠佳的数据子集以便进一步检查。
图表说明
- X 轴: 性能指标。可以是对数损失、平方误差或原始预测值。
- 分段: 数据集会根据各实例在不同模型下的性能相似性自动划分为若干分段。
- 颜色: 代表不同的模型。
- 曲线: 某一模型在某一特定分段上的性能分布。
- Y 轴: 数据数量/密度。
- 十字标记: 左端、中心线和右端分别对应该分布的第 25、50 和 75 百分位数。
原理说明
Manifold 使用聚类算法(k-Means)基于性能相似性将预测数据划分为 N 个分段。
k-Means 算法的输入是每个实例的性能得分。默认情况下,对于分类模型,该得分是对数损失值;对于回归模型,则为平方误差值。对数损失或平方误差越低,模型性能越好。
如果您正在分析多个模型,所有模型的性能指标都将被纳入 k-Means 的输入中。
使用方法
- 查找误差较高的数据分段(位于图表右侧)。这些区域需要重点分析并尝试改进。
- 如果您在比较不同模型,请留意哪些分段中各模型的对数损失存在显著差异。如果两个模型在同一数据集上表现不同,可考虑针对该部分数据选用表现更优的模型以提升整体性能。
- 在发现分段中的性能模式或问题后,您可以切分数据来比较感兴趣的数据子集的特征分布。您可以创建两组分段进行对比(分别用粉色和蓝色标注),每组可以包含一个或多个分段。
示例
与第 1 和第 2 分段相比,第 0 分段的对数损失预测误差更低,因为其曲线更靠近左侧。
在第 1 和第 2 分段中,XGBoost 模型的表现优于深度学习模型;而在第 0 分段中,深度学习模型却优于 XGBoost。
特征归因视图
此可视化展示了您数据的特征值,并按用户定义的分段进行聚合。它有助于您识别任何可能与不准确预测输出相关的输入特征分布。
阅读图表
- 直方图/热力图: 每个数据切片的数据分布,以对应的颜色显示。
- 分段组: 表示您选择相互比较的数据切片。
- 排名: 特征按照各切片之间的分布差异进行排序。
- X轴: 特征值。
- Y轴: 数据计数/密度。
- 差异分数: 衡量各切片之间分布差异的指标。
解释
在您对数据进行切分以创建分段组后,此视图将显示两个分段组的特征分布直方图/热力图。
根据特征类型,地理特征可以以地图上的热力图形式展示,数值特征以分布曲线形式展示,而分类特征则以分布条形图形式展示。(在条形图中,x轴上的类别按实例数量差异排序。请在每个特征中寻找两种分布之间的差异。)
特征按照其KL散度进行排序——这是一种衡量两种对比分布之间_差异_的指标。差异越大,该特征就越有可能与区分两个分段组的因素相关联。
使用方法
- 查看每个特征中两种分布(粉色和蓝色)之间的差异。它们代表您在“性能比较视图”中所选两个分段组之间的数据差异。
示例
第0组和第1组的数据在特征0、1、2和3上存在明显差异;但在特征4和5上则不太相同。
假设第0组和第1组分别对应于低误差和高误差的数据实例,则这意味着误差较高的数据在特征0和1上的特征值往往_较低_,因为粉色曲线的峰值位于蓝色曲线的左侧。
地理特征视图
如果您的数据集中包含地理空间特征,它们将被显示在地图上。目前支持的地理特征类型包括经纬度坐标和h3六边形ID。
阅读图表
- 特征名称: 当存在多个地理特征时,您可以选择在地图上显示哪一个。
- 颜色依据: 如果选择了经纬度特征,则数据点会根据分组ID进行着色。
- 地图: Manifold默认使用热力图来显示这些数据点的位置和密度。
- 特征名称: 选择显示六边形ID特征时,具有相同六边形ID的数据点会以聚合形式显示。
- 颜色依据: 您可以选择按以下方式为六边形着色:平均模型性能、第0分段组的百分比,或每个六边形的总数量。
- 地图: 所有用于着色的指标也会在六边形级别的工具提示中显示。
使用方法
- 查找两个分段组(粉色和灰色)之间的地理位置差异。它们代表您先前选择的两个子集之间的空间分布差异。
示例
在上面的第一张地图中,第0组更明显地集中在旧金山市中心区域。
使用演示应用
要使用您的ML模型的静态输出进行一次性评估,请使用演示应用。 否则,如果您有一个能够程序化生成ML模型输出的系统,您可以考虑直接使用Manifold组件。
在本地运行演示应用
运行以下命令以设置环境并运行演示:
# 在根目录下安装所有依赖项
yarn
# 演示应用位于examples/manifold目录
cd examples/manifold
# 安装演示应用的依赖项
yarn
# 运行应用
yarn start
现在您应该会在localhost:8080看到演示应用正在运行。
将CSV上传到演示应用
应用启动后,您将看到上述界面,要求您将“特征”、“预测”和“真实值”数据集上传到Manifold。
它们分别对应于“准备您的数据”部分中的x、yPred和yTrue,您应相应地准备您的CSV文件,如下所示:
| 字段 | x (特征) |
yPred (预测) |
yTrue (真实值) |
|---|---|---|---|
| CSV文件数量 | 1 | 多个 | 1 |
| CSV格式示例 | ![][feature csv image] | ![][prediction csv image] | ![][ground truth csv image] |
请注意,输入文件中应排除索引列。 数据集上传完成后,您将看到由这些数据集生成的可视化效果。
使用组件
将Manifold组件嵌入您的应用程序中,可以让您程序化地生成ML模型数据并进行可视化。 否则,如果您有一些模型的静态输出,并希望进行一次性评估,您可以考虑直接使用演示应用。
以下是将Manifold导入您的应用并加载数据以进行可视化的基本步骤。您也可以查看示例文件夹。
安装Manifold
$ npm install @mlvis/manifold styled-components styletron-engine-atomic styletron-react
加载和转换数据
为了将您的数据文件加载到 Manifold 中,可以使用 loadLocalData 操作。您也可以使用 dataTransformer 将数据重塑为 Manifold 所需的格式。
import {loadLocalData} from '@mlvis/manifold/actions';
// 创建以下操作并传递给 dispatch
loadLocalData({
fileList,
dataTransformer,
});
fileList: {Object[]}
一个或多个 CSV 格式的数据集。这些数据可以由您的后端返回。
dataTransformer: {Function}
一个将 fileList 转换为 Manifold 输入数据格式 的函数。默认值如下:
const defaultDataTransformer = fileList => ({
x: [],
yPred: [],
yTrue: [],
});
挂载 reducer
Manifold 使用 Redux 来管理其内部状态。您需要将 manifoldReducer 注册到应用的主要 reducer 中:
import manifoldReducer from '@mlvis/manifold/reducers';
import {combineReducers, createStore, compose} from 'redux';
const initialState = {};
const reducers = combineReducers({
// 在您的应用中挂载 manifold reducer
manifold: manifoldReducer,
// 其他 reducer
app: appReducer,
});
// 使用 createStore
export default createStore(reducer, initialState);
挂载组件
如果您在上一步中将 manifoldReducer 挂载到了除 manifold 之外的其他路径,则在使用 getState 属性挂载组件时,需要指定该路径。width 和 height 都需要显式指定。如果您有地理空间特征并且需要在地图上查看它们,还需要一个 Mapbox 令牌。
import Manifold from '@mlvis/manifold';
const manifoldGetState = state => state.pathTo.manifold;
const yourMapboxToken = ...;
const Main = props => (
<Manifold
getState={manifoldGetState}
width={width}
height={height}
mapboxToken={yourMapboxToken}
/>
);
样式
Manifold 使用 baseui,而 baseui 则以 Styletron 作为样式引擎。如果您在应用的其他部分尚未使用 Styletron,请确保使用 styletron 提供者 包裹 Manifold。
Manifold 使用 baseui 的 主题化 API。Manifold 默认使用的主题被导出为 THEME。您可以扩展 THEME 并将其作为 Manifold 组件的 theme 属性来传递,从而自定义样式。
import Manifold, {THEME} from '@mlvis/manifold';
import {Client as Styletron} from 'styletron-engine-atomic';
import {Provider as StyletronProvider} from 'styletron-react';
const engine = new Styletron();
const myTheme = {
...THEME,
colors: {
...THEME.colors,
primary: '#ff0000',
},
}
const Main = props => (
<StyletronProvider value={engine}>
<Manifold
getState={manifoldGetState}
theme={myTheme}
/>
</StyletronProvider>
);
构建于
贡献
请在贡献之前阅读我们的 行为准则! 关于提交拉取请求的详细信息,请参阅 CONTRIBUTING.md 文件。请参考 issue 模板。
版本控制
我们会在变更日志中记录版本和更改内容——详情请参阅 CHANGELOG.md 文件。
许可证
Apache 2.0 许可证
版本历史
v1.1.42020/01/13v1.1.22020/01/08常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

