无监督学习的功能拆分#

最初的无监督学习模块只有聚类,功能单一。我向 AI 提出了拆分需求:

我觉得应该将无监督学习拆分成三个子功能:

  1. 帮我找群体(自动聚类)
  2. 找出异常样本(IsolationForest 异常检测)
  3. 简化数据看规律(PCA + t-SNE 降维可视化)

AI 发现的 3 个并发 Bug#

我提出拆分需求时,AI 在实现过程中主动发现了 3 个我完全没意识到的问题

Bug 1:轮廓系数显示为 0

代码中 c.get('silhouette_score') or 0None 强制转成了 0,用户会误以为聚类效果极差。

修复None 值在 ECharts 中显示为缺口(“N/A”),不再误导用户。

Bug 2:SpectralClustering 没有运行

它不在 DEFAULT_CLUSTER_ALGORITHMS 列表中,等于少了一种聚类算法。AI 加上了。

Bug 3:无监督任务出现在预测页

无监督模型没有保存 .joblib 文件,用户选了预测会报"模型文件不存在"。

修复:前端过滤仅显示 task_type === 'supervised' 的任务。

这就是 Vibe Coding 的核心价值之一:你提出一个功能需求,AI 在实现的同时帮你发现你没想到的问题。

异常检测的 contamination 参数#

用户选择的 contamination(异常比例)对结果影响是决定性的。AI 的解释:

contamination 不改变 IsolationForest 的评分本身,只改变阈值——把评分最低的 N% 标记为异常。

contamination效果
设低了(如 0.01)只标记最极端的异常,漏检风险大
设对了匹配真实异常比例
设高了(如 0.5)一半数据被标记异常,基本失去意义

用户正确用法:先用默认 0.1 跑一次看评分分布直方图,根据分布的双峰分界点判断合理的异常比例,再调整重新训练。

提示词工程心得:角色设定 + 领域背景#

当你在提示词中加入领域背景时,AI 的回答质量会显著提升:

“我是做电池数据分析的工程师,用户上传的数据通常是电池循环充放电的实验数据。”

这会让 AI 在建议 ML 参数范围时考虑到你数据的特性(比如建议用 contamination=0.05 因为电池异常数据通常占比很低)。