2017-02-01 71 views
1

我有以下白色像素作爲輸入數據,並使用sklearn.linear_model.RANSACRegressor來擬合2次(二次)的多項式以避免異常值。在這種情況下,結果顯示爲紅色,是完全正確的:帶RANSACRegressor多項式限制允許值

enter image description here

但是,我知道在我的應用程序,二次曲線總會有這個圖片的右側最小值/最大值(但我不知道在哪個高度),並且曲率不能那麼強。換句話說:我已經知道我最適合應該像藍線,其他點是腐敗的異常值。

有沒有辦法通過(例如)提供一個損失函數來控制或限制RANSACRegressor的結果,該函數懲罰非常強的曲率,但仍然試圖在使用較低曲率時找到最佳擬合?

預先感謝任何提示或鏈接:-)

回答

0

好吧,我發現了一個簡單的(但很可能是:昂貴的)做它的方式:

def is_model_valid(estimator, X, y): 
    return abs(estimator.coef_[2]) < 0.001 

,利用此功能作爲輸入參數RANSACRegressor不允許模型,帶有高曲率..

或可替代地只允許最小/最大要對畫面的右側

(假設圖片爲700像素):

def is_model_valid2(estimator, X, y): 
    return ((-1.0 * estimator.coef_[1])/(2.0*estimator.coef_[2])) > 600