如何从PKL格式模型文件中获取输入数组形状,避免手动硬编码特征维度
解决方案
你使用scikit-learn训练的线性回归模型自带输入特征维度属性,直接读取即可替换硬编码的数值:
- 训练完成的
LinearRegression模型会生成n_features_in_属性,存储的就是训练时X_train的特征列数,也就是你需要的输入数组长度。
修改后的Flask代码
from flask import Flask, request, render_template import numpy as np import joblib app = Flask(__name__) model = joblib.load('MC_Model.pkl') # 新增:直接从模型读取输入特征维度,不需要手动修改数值 input_feature_num = model.n_features_in_ @app.route('/', methods=["GET", "POST"]) def home(): # default values for `GET` cluster = None material = None # 替换硬编码的21为动态获取的特征数 MC_features = [np.zeros((input_feature_num,), dtype=int)] MC_text = 'Usage Amount: ???' if request.method == 'POST': cluster = request.form.get('cluster') print('cluster:', cluster) material = request.form.get('material') print('material:', material) if cluster: index = int(cluster) MC_features[0][index] = 1.0 if material: index = int(material) MC_features[0][index] = 1.0 print(MC_features) MC_prediction = model.predict(MC_features) #prediction = [np.random.randint(0, 100)] MC_text = 'Usage Amount: {}'.format(MC_prediction[0]) return render_template('BOM.html',MC_prediction=MC_text, MC_features=MC_features[0], cluster=cluster, material=material)
补充说明
如果后续你换用其他scikit-learn模型(比如决策树、随机森林等),这个方法同样适用,所有scikit-learn的监督学习模型训练完成后都会携带n_features_in_属性。
内容的提问来源于stack exchange,提问作者Yanjie Koo
相关产品推荐
相关产品推荐

