4

等間隔の角度で測定された一連の半径 (t + イプシロン + エラー) があります。モデルは、(r, Alpha) を中心とする半径 (R) の円で、小さなノイズと、ノイズよりもはるかに大きないくつかのランダム エラー値が追加されています。

問題は、円モデルの中心 (r,Alpha) と円の半径 (R) を見つけることです。ただし、ランダム エラーの影響をあまり受けないようにする必要があります (以下のデータ ポイント 7 と 14 を参照)。

一部の半径が欠落している可能性があるため、ここでは単純平均は機能しません。

最小二乗最適化を試みましたが、エラーに大きく反応します。

Pythonでデルタの最小二乗ではなく、最小デルタを最適化する方法はありますか?

Model:
n=36
R=100
r=10
Alpha=2*Pi/6

Data points:
[95.85, 92.66, 94.14, 90.56, 88.08, 87.63, 88.12, 152.92, 90.75, 90.73, 93.93, 92.66, 92.67, 97.24, 65.40, 97.67, 103.66, 104.43, 105.25, 106.17, 105.01, 108.52, 109.33, 108.17, 107.10, 106.93, 111.25, 109.99, 107.23, 107.18, 108.30, 101.81, 99.47, 97.97, 96.05, 95.29]

4

2 に答える 2

3

ここでの主な問題は、外れ値を取り除くことになるようです。これを行うにはいくつかの方法がありますが、あなたのアプリケーションでは、おそらく中央値からの距離に基づいて項目を削除するのが最善の策です (中央値は平均値よりも外れ値の影響を受けにくいためです)。

それを使用している場合はnumpy、次のようになります。

def remove_outliers(data_points, margin=1.5):
    nd = np.abs(data_points - np.median(data_points))
    s = nd/np.median(nd)
    return data_points[s<margin]

その後、最小二乗法を実行する必要があります。

使用していない場合はnumpy、ネイティブの python リストで同様のことができます。

def median(points):
    return sorted(points)[len(points)/2] # evaluates to an int in python2

def remove_outliers(data_points, margin=1.5):
    m = median(data_points)
    centered_points = [abs(point - m) for point in data_points]
    centered_median = median(centered_points)
    ratios = [datum/centered_median for datum in centered_points]
    return [point for i, point in enumerate(data_points) if ratios[i]>margin]

外れ値をあまり数えたくない場合は、データセットの平均を計算するだけで済みます。これは、最小二乗最適化と同等の線形です。

もう少し良いものを探している場合は、データをある種のローパスフィルターに通すことをお勧めしますが、ここではそれが本当に必要だとは思いません.

ローパス フィルターがおそらく最適です。これは次のように行うことができます。

def low_pass(data, alpha):
    new_data = [data[0]]
    for i in range(1, len(data)):
        new_data.append(alpha * data[i] + (1 - alpha) * new_data[i-1])
    return new_data

その時点で、最小二乗最適化が正常に機能するはずです。

于 2014-02-16T07:57:20.637 に答える
2

最後の質問への回答

Pythonでデルタの最小二乗ではなく、最小デルタを最適化する方法はありますか?

はい、最適化方法 (たとえば、 で実装されているダウンヒル シンプレックスscipy.optimize.fmin) を選択し、絶対偏差の合計をメリット関数として使用します。あなたのデータセットは小さいので、汎用の最適化手法はすぐに収束すると思います。(非線形最小二乗フィッティングの場合、汎用の最適化アルゴリズムを使用することも可能ですが、二乗和を最小化するレーベンバーグ・マルカート アルゴリズムを使用する方が一般的です。)

平方の代わりに絶対偏差を最小化することに理論的な正当性があることに興味がある場合は、「数値レシピ」の「ロバスト推定」の章を参照してください。

実際には、絶対偏差の合計には固有の最小値がない場合があります。2 つの点、たとえば (0,5) と (1,9) および定数関数y=aの自明なケースでは、5 と 9 の間のaの任意の値は同じ合計 (4) を返します。偏差が 2 乗の場合は、このような問題はありません。

絶対偏差を最小化してもうまくいかない場合は、外れ値を特定して削除するヒューリスティックな手順を検討できます。RANSACやROUTなど

于 2014-02-17T01:54:01.710 に答える