在使用lightgbm模型上线时可能会遇到预测打分时变量范围超出训练时候的变量范围。从而发生打分数据异常。修复该问题有两种方法,一个是人为的在转pmml文件里把变量的上下界进行修改,比如年龄原值范围0-99,修改成-9999999999~9999999999这个范围;另一种是在源头就把输入的变量框定在一个0-1范围内。要修复上下界问题,可以使用sklearn2pmml.preprocessing.MinMaxScaler
类将特征值缩放到0到1的范围内。以下是一个示例代码:
from sklearn2pmml.pipeline import PMMLPipeline
from sklearn2pmml.preprocessing import MinMaxScaler
from lightgbm import LGBMRegressor
# 创建LightGBM模型
model = LGBMRegressor()
model.fit(X_train, y_train)
# 创建MinMaxScaler来调整特征值范围
scaler = MinMaxScaler(feature_range=(0, 1))
# 创建PMMLPipeline并加载模型和缩放器
pipeline = PMMLPipeline([
("scaler", scaler),
("model", model)
])
# 将模型和缩放器转换为PMML
pipeline.export("lgb_model.pmml", with_repr=True)
当然了这个里仍然是有bug的,就是新的数据还是可能超过MinMaxScaler的设定上下界
如果在使用MinMaxScaler进行特征缩放后,预测的新数据超过了指定的上下边界,可以考虑进行以下处理:
-
检测超过边界的值:在进行预测之前,检查预测输入数据中是否存在超过上下边界的值。如果存在,则可以对这些值进行修正或采取其他合适的处理方式。
-
调整边界值:根据实际情况,可能需要重新定义MinMaxScaler的上下边界。通过扩大或缩小边界范围,使其能够包容更广泛的数据范围,以应对可能出现的超出边界值。
-
使用离群值处理方法:如果超出边界的值被视为离群值,并且不符合模型的预期行为,可以使用离群值处理方法来处理这些数据点。例如,你可以选择将超出边界的值替换为边界值、删除这些数据点或者将其视为缺失值进行处理。
-
重新训练模型:如果经常遇到超出边界的预测结果,可能需要重新评估模型和特征工程的设计。考虑调整特征选择、特征工程或模型参数,以更好地适应可能出现的超出边界的情况。
请注意,在处理超出边界的预测数据时,需要根据具体问题和数据的特点选择适当的方法。根据数据的分布和领域知识,对于超出边界的情况进行合理的处理,以确保预测结果的准确性和可靠性。