首页 > 解决方案 > 如何预测不超过目标示例?

问题描述

我有变量,我需要预测它的值尽可能接近,但不要大于它。例如,给定 y_true = 9000,我希望 y_pred 是 [0,9000] 范围内的任何值,尽可能接近 9000。如果 y_true = 8000 分别 y_pred 应该是 [0,8000]。也就是说,我想对预测值进行某种限制。对于样本中的每对预测变量和目标变量,该阈值都是单独的。如果 y_true = [8750,9200,8900,7600],则 y_pred 应为 [<=8750,<=9200,<=8900,<=7600]。唯一的任务是不再准确预测并更接近。处处为零被认为是正确答案,但我只需要尽可能接近

data, target = np.array(data),np.array(df_tar)
X_train,X_test,y_train,y_test=train_test_split(data,target)
gbr = GradientBoostingRegressor(max_depth=1,n_estimators=100)
%time gbr.fit(X_train,np.ravel(y_train))
print(gbr.score(X_test,y_test),gbr.score(X_train,y_train))

标签: pythonmachine-learningscikit-learn

解决方案


由于实际更改和提出模型的复杂性,该模型可以将您希望的这种方法用于 sklearn 的函数并应用它,我强烈建议您在预测后通过此过滤器,并将所有预测值替换为 9000 到 9000。然后,手动计算分数,我相信这是mse在这种情况下。

这是我的方法的完整工作示例:

from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_squared_error as mse
import numpy as np

X = [[8500,9500],[9200,8700],[8500,8250],[5850,8800]]
y = [8750,9200,8900,7600]
data, target = np.array(X),np.array(y)
gbr = GradientBoostingRegressor(max_depth=1,n_estimators=100)
gbr.fit(data,np.ravel(target))
predictions = gbr.predict(data)
print(predictions) ## The original predicitions

输出:

[8750.14958301 9199.23464805 8899.87846735 7600.73730159]

执行替换:

fixed_predictions = np.array([z if y>z else y for y,z in zip(target,predictions)])
print(fixed_predictions)

[8750.         9199.23464805 8899.87846735 7600.        ]

计算新分数:

score = mse(target,predictions)
print(score)

输出:

10000.145189724533

推荐阅读