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

多疾病预测系统中SVM疟疾预测模块特征数不匹配问题求助

解决SVM疟疾预测模块特征数不匹配问题

核心问题

你遇到的ValueError本质是训练SVM模型时使用的特征数量(17个)与预测时传入的输入特征数量(16个)不一致,模型无法处理维度不匹配的输入。

排查与解决步骤

1. 核对训练阶段的特征集

打开你的Colab训练代码,找到生成训练特征集X_train的代码(比如X = df.drop('target_column', axis=1)),统计该特征集的列数是否为17。把这些特征的名称列出来,和前端收集的user_input对应的特征逐一对比,找出缺失的那一项。

2. 检查前端输入的特征完整性

查看Streamlit代码中收集用户输入的部分:

  • 确认是否遗漏了某个特征的输入控件(比如少了一个滑块、下拉框)
  • 统计最终拼接成user_input的数值数量,确保是17个
  • 额外注意:特征顺序必须和训练时的特征顺序完全一致,即使数量对了,顺序错误也会导致预测逻辑失效

3. 验证预处理逻辑的一致性

如果训练时做过特征工程(比如标准化、独热编码、衍生特征),必须确保预测时执行完全相同的处理:

  • 例如训练时对类别特征做了独热编码,生成了额外列,预测时也要对输入的同类别特征执行相同编码
  • 建议将预处理步骤和模型打包成流水线(sklearn.pipeline.Pipeline)一起保存,避免单独处理时出错。示例代码:
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer

# 定义预处理规则
numeric_features = ['age', 'temperature']
categorical_features = ['gender']

preprocessor = ColumnTransformer(
    transformers=[
        ('num', StandardScaler(), numeric_features),
        ('cat', OneHotEncoder(), categorical_features)
    ])

# 构建流水线
pipeline = Pipeline([
    ('preprocessor', preprocessor),
    ('svc', SVC())
])

# 训练并保存流水线
pipeline.fit(X_train, y_train)
joblib.dump(pipeline, 'malaria_pipeline.pkl')

预测时直接加载流水线使用:

import joblib
pipeline = joblib.load('malaria_pipeline.pkl')
pipeline.predict([user_input])

4. 确认模型保存与加载的正确性

如果是单独保存了SVM模型,检查保存时是否包含了所有必要的预处理信息。避免只保存模型实例而遗漏预处理步骤,导致输入特征维度不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:21:07