You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask搭建KNN前列腺癌预测网站固定输出恶性结果问题

问题根因及修复方案

固定输出恶性结果的问题由以下几个常见bug导致,按优先级排查修复即可:

  • 预测结果类型不匹配,模板判断逻辑失效
    model.predict()返回的是shape为(1,)的numpy数组(格式类似np.array([1])),不是Python原生整数类型。Jinja2模板在对numpy数组和整数做==判断时存在类型兼容问题,会出现固定命中某一分支、或两个判断分支都不触发的异常。
    修复方式:提取预测结果的标量值转为原生整数后再传入模板,将接口中对应代码修改为:
    my_prediction = int(model.predict(mypred)[0])
    
  • KNN模型缺失特征标准化步骤,距离计算完全失真
    KNN算法依赖欧氏距离判断样本相似度,你传入的特征量级差异极大:perimeter、area的数值通常在几十到上千区间,而smoothness、fractal_dimension等特征取值仅在0~1的小数区间,大数值特征会完全主导距离计算结果,导致模型预测逻辑彻底失效,输出结果和输入特征无关联。
    修复方式:训练阶段使用StandardScaler对训练集特征做标准化,预测阶段必须使用训练集拟合好的同一个scaler对输入特征做转换,绝对不能在预测接口中重新拟合scaler,否则会造成数据泄露,参考实现:
    # 以下逻辑在模型训练阶段执行,不要放到预测接口中
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    X_train_processed = scaler.fit_transform(X_train)
    model.fit(X_train_processed, y_train)
    
    # 预测接口内的特征处理逻辑
    mypred = np.array([[rad, tex, par, area, smooth, compact,symme, frac]])
    mypred_processed = scaler.transform(mypred)
    my_prediction = int(model.predict(mypred_processed)[0])
    
  • 标签映射逻辑与数据集定义不匹配
    公开医疗细胞分类数据集的标签定义没有统一标准,部分数据集以0标记恶性、1标记良性,也有部分定义相反。取训练集中已知类别的样本单独跑预测,确认模型输出值对应的实际类别,再调整模板中的判断条件即可。

内容的提问来源于stack exchange,提问作者Devika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:31:10