🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

関数

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

1回答

937閲覧

とある測定器で計測したデータ二乗誤差が最小になる補正係数を計算したい

Yukkunn0624

総合スコア2

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

関数

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2021/02/08 14:41

編集2021/02/09 07:08

###実現したいこと
とある測定器で計測したデータ二乗誤差が最小になる補正係数を計算したい

発生している問題

過去にある測定器(以下、Aとする)で測ったデータがあるのですが、測定器のメーカーも型式もわからず困っており、別の測定器(以下、Bとする)で計り直すことになりました。
BでAの測定結果を再現したいのですが、Bの補正係数をAのデータとBのデータの二乗誤差が最小になる係数にしたいです。
最小二乗法を使えば良いのだと思うのですが、線形代数の知識が無く、どのような式にすれば良いのかがわかりません

試したこと

Aのデータ
補正係数がわからない

AAABBBCCCDDD
0.1317430.0950740.0517530.162071

Bのデータ
補正係数を0.01ずつ加算して測定してみました

補正係数AAABBBCCCDDD
0.010.0204240.0204020.0203100.020221
0.020.0208490.0208040.0206200.020443
0.030.0212730.0212060.0209290.020664
0.040.0216980.0216080.0212390.020886
0.050.0221220.0220090.0215490.021107
0.060.0225470.0224110.0218590.021329
0.070.0229710.0228130.0221690.021550
0.080.0233960.0232150.0224790.021772
0.090.0238200.0236170.0227880.021993
0.100.0242450.0240190.0230980.022215

fana様

ご回答ありがとうございます。
補正係数を1~10で測定し直してみました

補正係数a_1a_2a_3a_4
10.0624454640.0601886650.0509827910.042145451
20.1048909290.1003773290.0819655810.064290903
30.1473363930.1405659940.1129483720.086436354
40.1897818570.1807546590.1439311630.108581805
50.2322273210.2209433230.1749139530.130727256
60.2746727860.2611319880.2058967440.152872708
70.317118250.3013206530.2368795350.175018159
80.3595637140.3415093170.2678623260.19716361
90.4020091780.3816979820.2988451160.219309062
100.4444546430.4218866470.3298279070.241454513

単純なy=ax+bの補正モデルのようです。

補足情報(FW/ツールのバージョンなど)

Win10
VSCode
Python3.9.1
pandas1.1.5

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

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

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

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

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

tiitoi

2021/02/09 01:46 編集

最小二乗法は関係ないのでは? ちなみに機器Aと機器Bで測っている項目の定義、算出方法は同じなのでしょうか? 名前がBBBと同じものであっても、2つの機器でその項目の定義、算出方法が異なるのであれば、そもそもBの機器でAの機器の値を再現するのが無理という話になるので、メーカーに問い合わせるなどして情報を集めたほうがいいと思います。
Yukkunn0624

2021/02/09 06:46

>>toast-uz様 ありがとうございます、参考にさせて頂きます。 >> tiitoi様 Aの機器については測定結果しか残っておらず、メーカー、型式すべて不明です。 申し訳ございませんが、あまり詳しい内容を書くことが出来ないのですが、計測自体は単純な物になるので算出方法等は間違っていないはずです 今回Aの測定結果で動いている工作機のキャリブレーションを行うに当り、新たに測定し直すことになったのですが、影響を最小限にしたいので最小二乗法で算出した補正係数を使うという結論に至りました。
fana

2021/02/09 07:41

コレ, AAA~DDDのそれぞれに異なる補正係数値を求めるという話でしょうか? それとも AAA~DDDの全てに単一の補正係数値を用いるという話でしょうか? (回答のコメントにも書きましたが,後者だとしたら,4つ全てをそこそこいい感じに合わせる単一の補正係数というのがなさそうに見えます.)
Yukkunn0624

2021/02/09 09:21

>> fana様 単一の補正係数です おっしゃる通りこの方法が妥当かどうかは別途検討する必要があると考えております
fana

2021/02/09 09:41

測定器Aによる測定値aと,測定器Bによる測定値bとの間の射像(変換する関数) b = f(a) が存在するのだとして,この関数fの形を前提知識から仮定できないと無理そう.
guest

回答1

0

ベストアンサー

どのような式にすれば良いのかがわかりません

"AAA"とかだと書くのがだるいので,以下,記号を変えて書く.

測定器Aによる測定データ(AAA~DDD)を { a_1, a_2, a_3, a_4 },
補正係数をkとするときの測定器Bによる測定値を,{ b_1(k), b_2(k), b_3(k), b_4(k) } と書くことにしよう.

単純に考えれば(4種のデータの重要性に差が無いなら),
E(k) = Σ{ ( a_i - b_i(k))^2 }
を最小化するkを求める話と見える.


4つの関数 b_i(k) をあらかじめ測定値から推定する必要があるだろう.

質問内の表に示された範囲だけ見ると線形に見えるが,
この表に示されている測定値は,測定器Aによる測定データa_iとは値が離れすぎているので,この表の値だけで b_i(k) を推定するべきではない.
もっと広い(a_i の値を含むような)範囲の測定データを収集すべきだろう.


追記されたデータを見るに,どうやら単純に補正係数kだけ調整すればいけるという話では無いように見える.
(データが本当に4個しかないのか,実際にはもっとあるのかはわからないけれども)測定器Aによるi番目の測定データa_iと,それに対応する測定器Bによる測定データb_i(k)との間に,ある関係式

f( a_i; p ) = b_i(k)
(ここで,p は関数fのパラメタ群.)

を仮定し,誤差評価関数

E(k, p) = Σ{ ( f(a_i, p) - b_i(k) )^2 }

を最小化する{k, p}を見つけるような話になるのかもしれない.

  • もしも前提知識から f() のもっともらしい形が仮定できるならば,それでやってみると良いかと.
  • f()が全く想像もつかないとかいう場合,とりあえずf()をa_iの1次関数としてやってみる→満足いく結果が得られないなら2次関数にしてやってみる→ダメなら3次… という感じでf()の次数を増やしていく という方法が考えられるかもしれない.

投稿2021/02/09 01:27

編集2021/02/09 09:59
fana

総合スコア11990

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

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

fana

2021/02/09 07:35

(こっちがデータを使うわけじゃないので,具体測定値までを示す必要はないかと思いますが) 線形だと分かったならば,あとは補正値を適切に決めればよいでしょう.
fana

2021/02/09 07:38 編集

でも,4つ全てがそこそこ合いそうな単一の補正係数値というのがなさそうにも見える… (→やろうとしていること自体が妥当かどうかは別途考える必要があるかも?)
Yukkunn0624

2021/02/15 02:11

fana様ありがとうございました。 検証中ではありますが、ご教示いただいた方法でうまくいきそうです。
fana

2021/02/15 02:32

背景事情はわかりませんが, > 工作機のキャリブレーション とのことですから,とにかく慎重に判断されると良いかと. 念のため,以下を述べておきます. この手の「あてはめ」は,データ数が少なすぎると有用な結果を生みにくいです. データの個数に対して自由度が高すぎるモデル式を当てはめてもオーバーフィッティングしただけの結果を得ることになりますので,注意が必要です. 本当にデータが数個とかしか存在しないならば,そもそも実用上無理な話となるかもしれません. また,当てはめ計算に用いたデータの存在範囲外に対して,あてはめ結果を用いること(補外的な使い方)は避けるべきです.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問