能否加载已保存的ML模型实现自定义特征与目标的预测?
问题解答
能不能用一个已训练好的模型换不同特征预测不同目标,得看你当初训练模型的方式,分两种情况:
可行的场景:如果你的模型是多任务/多输出模型,训练时就把所有可能用到的特征和目标都纳入了(比如同时训练预测房价、房屋面积、楼层这三个目标,特征包含户型、地段、房龄等所有用户可能选的项),那完全可以。加载模型后,用户选某个目标,就对应取模型的对应输出分支;选特征子集的话,只要把没选的特征补成训练时的默认值(比如均值、众数),保证输入维度和训练时一致,就能正常预测。比如用Scikit-learn的
MultiOutputClassifier/MultiOutputRegressor训练的模型,就支持这种操作。不可行的场景:如果模型是单任务单输出的(比如只训了用户型+地段预测房价),那肯定没法直接换特征(比如换成用房龄+楼层)或换目标(比如换成预测房屋面积)。这种情况下,你要么针对每一种目标-特征的组合单独训练模型,要么重新训练一个支持多任务的模型。
针对你要部署到Streamlit的需求,给两个实操方向:
- 用多输出模型:提前把所有用户可能选的特征和目标都放进训练集,训一个多任务模型。在Streamlit里做交互组件让用户选目标和特征,选完后把未选的特征填充默认值,再喂给模型得到对应目标的预测结果。
- 多模型映射:把每种目标-特征组合对应的模型单独训练好,用字典把组合和模型路径对应起来。用户选完后,加载对应的模型进行预测。
注意:不管哪种方式,用户选的特征必须是模型训练时见过的,目标也得是模型训练过的输出项,不然传统ML模型没法处理没见过的特征或目标。
内容的提问来源于stack exchange,提问作者naranara
相关产品推荐
相关产品推荐

