質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

Q&A

解決済

2回答

2199閲覧

最小二乗法による近似プログラムの誤りをご指摘いただきたいです

8c8

総合スコア3

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

0グッド

1クリップ

投稿2022/01/05 15:02

編集2022/01/06 07:17

3次元点群(7000個程度)に対して曲面近似を行いたく、最小二乗法のプログラムを作成しました。
25次まで元のサイズを維持したままプロットできるのですが、26次以上にすると正しくプロットできません。

複数のブログなどを参考に独自に作成したのですがつまづいてしまい、ご助力いただきたいです。

また、その他3次元点群の形状の近似方法があればご提案頂けますと幸いです。

#汎用次元フィッティング関数 def func(param,x,y,z): sum = np.zeros_like(y) for i,j in zip(range(0,Degree-1,2),reversed(range((Degree+1)//2))): if j == 0: break else: sum = sum + np.array(param[i] * z ** (j)) + np.array(param[i+1] * y ** (j)) residual = x - sum-param[Degree-1] return residual # 次数の指定とパラメータの作成 Degree = 25 #例 param = [0] * Degree # 最小二乗法を実装 optimised_param = optimize.least_squares(func, param, args=(x, y, z)) #導出したパラメータによる近似式の実装 f=np.zeros_like(y) for i,j in zip(range(0,Degree-1,2),reversed(range((Degree+1)//2))): f = f + optimised_param.x[i]*z**j + optimised_param.x[i+1]*y**j f= f+optimised_param.x[Degree-1]

生データ・25次の近似データ・26次の近似データをプロットしたグラフが以下です。
生データ・近似後データ

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

多分ですが、誤りではなくオーバーフィッティングが起きています。
近似させる目的にもよりますが、点群データの簡素化であればmeshlabでできます。滑らかにしたり補完したりいろいろな処理を、PythonでもGUIでも操作することもできるので、こういうのも検討してはいかがでしょうか?

投稿2022/01/05 21:56

編集2022/01/05 21:58
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2022/01/06 01:15 編集

> オーバーフィッティング どうなんでしょう? 生データ(青) と 26次(緑) を見比べると,そもそもうまく当てはまっていないようにも見えませんか? (緑の「プロット」のサンプリングが全然足りなくて関数形状をまともに見れていないという可能性もあるかもしれませんが) (「誤差」がどうなったかを確認すべきかな)
8c8

2022/01/06 06:39

回答いただきありがとうございます。 pymeshlabをその他の作業で用いていますので、簡素化等も検討致します。 3Dモデルのメッシュデータの座標値なので誤差はないものと考えています。
fana

2022/01/06 07:14

「誤差」というのは,データ点と当てはめ結果の関数との間の距離のこと. (要は,「当てはまってるの?」っていう.)
退会済みユーザー

退会済みユーザー

2022/01/06 10:02

> そもそもうまく当てはまっていない 赤色のはきれいにフィッティングできているようですが、緑の26次フィッティングはやりすぎかなぁとも思います。こういうのはせいぜい2~3次くらいのイメージでしたので…。 (私ならたぶんmeshlabで点群を間引いて満足するか、間引いた点群にそこそこのフィッティングをして満足しそうです)
fana

2022/01/06 10:27

【関数の形状は一見して変な感じに見えるけども,全データ点(に極めて近い位置)は通ってるんですよ】ならばオーバーフィッティングだろうけども, 【26次の緑の形状は青のデータ点位置を通っていない】ように見えるから「そもそもうまく当てはまっていない」んじゃないかと. でも上記は,単一のプロット結果を見た感じでの判断でしかないから, 実際にどうなのか(相応に当てはまってはいるのか)を確認するために「誤差」の値を見ることから始めれば? っていう. 目的関数(=誤差評価関数)を最小化する作業をしてるんだから,せめて最終的な目的関数値くらいは見るべき. 26次の値が「よく当てはまった結果である25次での値」と同等程度(またはそれより小さい)であればオーバーフィッティングだと判断でき, 26次側の値がよろしくない(でかい)ならフィッティングがうまく行ってないのだと判断できるのではあるまいか.
8c8

2022/01/06 11:24 編集

補足いただきありがとうございます。 パラメータを出力し比較したところ、プロットできなくなった次元の関数から切片が急激に小さく(ほぼ0)なっておりました。
fana

2022/01/07 01:47

Why don't check the residuals ?
fana

2022/01/07 02:01

まぁ,現状を調査しようがしまいがそれは自由ですけど,私が書いている話の 意図 を述べておく: 「プログラムの誤りをご指摘いただきたいです」という話に対して,この回答は「オーバーフィッティングだ」と述べている. これはすなわち「 **プログラムは誤っておらず**,得られた結果は正当な結果である」という意味だ. しかし,もしも「オーバーフィッティングでない」のであれば,**プログラムには誤りが含まれている可能性がある** ということになる(よね?). これは話の根幹に関わる事柄だから, どっちなのだろうか? という切り分けの調査結果を提示することで話が進み得る(その情報を鑑みての意見や回答を誰かから得られる可能性もあるだろうし,あるいはあなた自身が問題の原因を掴むことに繋がり得る)のではなかろうか? と.
guest

0

ベストアンサー

その他3次元点群の形状の近似方法があればご提案頂けますと幸いです

その点群データを見た感じだと,

第3主成分軸方向を「高さ」と見なした Height Field 的な形で扱えそうに見えるので,
例えば,第1,2主成分軸方向を2次元座標軸とした世界でグリッド的にサンプリング→パラメトリック曲面を作る

みたいな話が考えられるかな,と思います.

投稿2022/01/07 02:14

fana

総合スコア11658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

8c8

2022/01/08 15:52

何度も対応して頂き本当にありがとうございます。事情により方針を変更しなければならなくなりましたので、ベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問