使用 RANSACRegressor 限制多项式的允许值
limit allowed values for polynomial with RANSACRegressor
我将以下白色像素作为输入数据并使用 sklearn.linear_model.RANSACRegressor 来拟合 2 次多项式(二次)以避免异常值。本例结果以红色显示,完全正确:
但是,我知道在我的应用程序中,二次曲线将始终在该图像的右侧有它的 minimum/maximum(但我不知道在哪个高度)并且曲率不能要那么坚强。
换句话说:我已经知道我的最佳拟合点应该像蓝线,而其他点是损坏的异常值。
有没有办法通过(例如)提供一个损失函数来控制或限制 RANSACRegressor 的结果,该损失函数会惩罚非常强的曲率,但在使用较低曲率时仍会尝试找到最佳拟合?
提前感谢任何提示或链接:-)
好的,我找到了一种简单(但很可能:成本高昂)的方法:
def is_model_valid(estimator, X, y):
return abs(estimator.coef_[2]) < 0.001
并将此函数用作 RANSACRegressor 的输入参数以禁止具有高曲率的模型..
或者只允许 min/max 在图片的右侧
(假设图片为700像素):
def is_model_valid2(estimator, X, y):
return ((-1.0 * estimator.coef_[1]) / (2.0*estimator.coef_[2])) > 600
我将以下白色像素作为输入数据并使用 sklearn.linear_model.RANSACRegressor 来拟合 2 次多项式(二次)以避免异常值。本例结果以红色显示,完全正确:
但是,我知道在我的应用程序中,二次曲线将始终在该图像的右侧有它的 minimum/maximum(但我不知道在哪个高度)并且曲率不能要那么坚强。 换句话说:我已经知道我的最佳拟合点应该像蓝线,而其他点是损坏的异常值。
有没有办法通过(例如)提供一个损失函数来控制或限制 RANSACRegressor 的结果,该损失函数会惩罚非常强的曲率,但在使用较低曲率时仍会尝试找到最佳拟合?
提前感谢任何提示或链接:-)
好的,我找到了一种简单(但很可能:成本高昂)的方法:
def is_model_valid(estimator, X, y):
return abs(estimator.coef_[2]) < 0.001
并将此函数用作 RANSACRegressor 的输入参数以禁止具有高曲率的模型..
或者只允许 min/max 在图片的右侧
(假设图片为700像素):
def is_model_valid2(estimator, X, y):
return ((-1.0 * estimator.coef_[1]) / (2.0*estimator.coef_[2])) > 600