Glassdoorに関する以下のインタビューの質問に遭遇しました。
ページ上のポイントの散布図。ページ全体に水平線を描き、全体のすべてのポイントからラインへの垂直y距離が最小になるようにします。このラインを最適に配置するためのアルゴリズムを説明してください
私のアプローチ:
Y距離の平均を計算して、そこに線を配置できると思います。
ただし、これが正しいのか、この問題を解決するためのより良いアプローチがあるのかはわかりません。
まず、Y距離のみを考慮し、水平線を描画するため、ポイントのY座標と線を定義するY座標のみを考慮する必要があります。ポイントとライン間の距離は、ポイントのy座標とラインを定義するy座標との絶対差になります。
したがって、問題を言い換えると、y_1からy_nまでの数値のセットがあり、zと点y_1からy_nまでの絶対差の合計を最小化する数値zが必要です。集計を最小化する代わりに、合計を最小化して正しい結果を得ることができます(aggregate = sum/number_of_points)。
これを行うのは中央値ではなく、平均値であることがわかります。
https://math.stackexchange.com/questions/113270/the-median-minimizes-the-sum-of-absolute-deviations
直感的には、y座標10、10、10、110にポイントがあります。中央値は10で、総距離は(0 + 0 + 0 + 100)/ 4 = 25です。平均は140/4 = 35、合計距離は(25 + 25 + 25 + 75)/ 4 = 37,5です。実際、ラインをy座標10から100に向かって任意の距離dに移動すると、距離が3ポイント(dの場合)に増加し、距離が1ポイント(dの場合)に減少しただけで、集計が増加しました。
(距離の2乗をとると、平均が正解になります)
線の計算に使用する方法は、最小化するコスト関数によって異なります。距離の合計(点が線より上にある場合は正、点が線より下にある場合は負として測定)をゼロに設定する平均y値を使用できます。
別の答えを提供する「距離の二乗の最小合計」コスト関数を使用できます。
どちらも簡単に計算できます。 「絶対距離の最小合計」を使用できます。これは計算が難しく、一般的に他の2つの方法とは異なる答えをもたらします。
最小化するために独自のコスト関数を考案することもできます。楽しんで!
あなたの目的のために、私は平均が賢明な選択だと思います。
ジョナサンが指摘しているように、最小化できるがthe perpendicular y distance to the line from all points in aggregate is minimized
「絶対距離の最小合計」を探していたと思います。
これが中央値と同じであることをたまたま知ったとしても、計算するのにそれほど悪くはありません proof (これは、一般的な開発の立場としては悪い質問であり、データサイエンス)
中央値を見つけるには、座標でポイントを並べ替え、リストから中点を取得するか、2つの中点を平均します。