アプリ版:「スタンプのみでお礼する」機能のリリースについて

今、研究を行っていて、円の最小二乗法を使いたいと思い、このサイトの質問欄でこの回答を見ました。

http://oshiete1.goo.ne.jp/qa3712186.html

この回答No.2の中に「半径の2乗の差の総和をゼロとする方法」とありましたが、よく意味がわかりません。この意味がわかる方よろしくお願いします。

また、円の最小二乗法でほかによい方法があれば、お願いします。

A 回答 (4件)

「半径の2乗の差の総和をゼロとする方法」は、正しくは


「半径の差の2乗の総和をゼロとする方法」ではないでしょうか。

全体がほぼ円のように見えるデータの集合があったとします。
そこに、いちばんよく当てはまる円を引くための方法です。

円を1つ書いてみると、それぞれのデータ点は、この円周から離れています。この離れた距離をそれぞれ2乗して合計します。「この合計が最小になるように」円を引くことを「最小二乗法」と言います。

なぜこれが最善なの?という疑問を持たれたら、まず1次元のデータでじっくり勉強してください。
    • good
    • 0

過去質問のNo.2の回答者です。


「半径の2乗の差の総和」というのは確かに下手な文章でした。言い直すと
  最小二乗円の中心(x0, y0)からの距離の2乗と、最小二乗円の半径の2乗の差の総和
です。それが式(1)です。これがゼロとなるような、x0、y0、r を求めるということです。図で書くと
         Q
         ・ (xi, yi) データ点
     \ P
     /\ ← 最小二乗円の一部
   /
  ・O
 (x0,y0) ← 最小二乗円の中心

というふうに、最小二乗円の中心Oからデータ点Qまでの距離の2乗と、最小二乗円の中心Oから点Pまでの距離(最小二乗円の半径 r)の2乗の差がSになります。点Pは最小二乗円の円周上の点ですが、これは線分OP上にあります。

S を x0 で微分して0になるというのは、x0 の値を動かしたときに S の値の動きが止まる( S が最小になる)ということです。そうなるのが x0 = Σxi/n のときです( n はデータ数)。y0 についても同様に、y0 = Σyi/n としたときに S が最小となります。こうして求めた点(x0, y0)というのはデータ点の重心です。実は、x0, y0 を求めるのに、r は何でもいいのです。r が何であっても、x0 = Σxi/n、0 = Σyi/n のときに S は最小になります。これで、最小二乗円の中心 (x0, y0) が求まりました。

(x0, y0) が決まったので、これを式(1)に代入して、S がゼロとなるような r を求めればいいのです。 r を動かしたときの S の最小値を求めるのでなく、ゼロとなる点を求めるのが普通の最小二乗法と違うところです。S は
   S = Σ{ r^2 - ( xi - x0 )^2 - ( yi - y0 )^2 }
なので、データによっては Σ の中が正にも負にもなります(データ点が円の外側にあれば負、内側なら正)。したがってその総和は、r を 0 から大きくしていくと、正から負に変化していきます。S がちょうどゼロになるとき、データ点は、最小二乗円の内側と外側に均等に配置されていることになります。したがって S = 0 となる r が最小二乗円の半径となるというわけです。

これ以外にも
   S = Σ[ r - √{ ( xi - x0 )^2 - ( yi - y0 )^2 } ]^2
を最小にするという方法もあると思います(これは中心との距離の差の2乗和です)。この場合 Σ の中は常に正なので S が最小となるように r を決めます。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

inara1さんの方法で計算結果を出すことはできましたが、その円の中心座標と半径を用いて、エクセルで確認してみたのですが、うまく座標に近似してくれませんでした。何度も計算してみましたが中心点の座標の位置がかなり変な位置にあります。

原因等がわかればお願いします。

たびたびすみません。

お礼日時:2008/10/22 11:00

No1です。

訂正させて下さい。
∂(ρ-r0)/∂r0=0
は削除してください。半径r0は、
r0=ρ
となります。
罪滅ぼしに、最小二乗法の他の方法を紹介します。

S=Σ(xj^2 +yj^2 +axj +byj +c)^2
として、
∂S/∂a=0
∂S/∂b=0
∂S/∂c=0
より、a,b,cを求めます。
x^2 +y^2 +ax +by +c=0
が最小二乗法で得られた円の方程式です。
    • good
    • 0

質問者さんが掲げたサイトの方法は確かに意味が分かりにくいですね。



提案ですが、次のように考えたらどうでしょうか。以下の述べること
はあくまでも一つの提案ですので、多少の誤りを含んでいることをご
承知下さい。

まず、円の中心(x0,y0)を求めてみましょう。
S=Σ{(xj-x0)^2 +(yj-y0)^2}
として、
∂S/∂x0=0
∂S/∂y0=0
より、(x0,y0)が求まるはずです。次に半径r0を求めます。
ρ=(1/N)Σ√{(xj-x0)^2 +(yj-y0)^2}
として、
∂(ρ-r0)/∂r0=0
より、r0が求まるはずです。

これは一つの、最小二乗法のやり方であって、他の方法もあるでしょう。方法が違えば、最適値も違ってくるでしょう。仮定が違えば、値も違うことになりますが、
それはそれでいいんではないかと思います。そもそも、データー処理の数学は、厳密数学ではありません。統計数学と同様に、アバウトな数学なのです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

ojisan7さんの方法で計算結果を出すことはできましたが、その円の中心座標と半径を用いて、エクセルで確認してみたのですが、うまく座標に近似してくれませんでした。何度も計算してみましたが中心点の座標の位置がかなり変な位置にあります。

原因等がわかればお願いします。

たびたびすみません。

お礼日時:2008/10/22 11:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!