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

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

新規登録して質問してみよう
ただいま回答率
85.35%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

機械学習

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

Python

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

Q&A

解決済

3回答

5300閲覧

polyfitやcurve_fitでの多項式回帰分析の決定係数及び精度を上げる方法はありますでしょうか?

NS78

総合スコア11

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

機械学習

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

Python

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

0グッド

0クリップ

投稿2021/04/15 00:39

Pythonのpolyfit(numpy)やcurve_fit(scipy)などで多項式回帰を行っております。仕事で決定係数が0.9985以上になる近似式を使いたいのですが、2次式回帰で条件(決定係数0.9985以上)に満たなかったので3次式回帰でトライしてみました。

下記と同じ条件(a,b要素)でExcelのグラフで算出すると精度の高い3次近似式が出てきますが、polyfitだと
"Polyfit may be poorly conditioned"とコンディションが悪いとされてまい、近似式の精度が低い状態です。
curve_fitで算出された値もExcelで算出されものよりも決定係数が低く近似式がの精度が低い状態です。

質問と致しましては、

①決定係数を上げるために元データをコンディションの良いデータへ加工するなど、何かよい方法が何かあるものなのか?

②そもそも2次式回帰で決定係数が低いものを3次式回帰にしたところで決定係数が上がるものなのか、また3次曲線ではない曲線(ただの緩やかな曲線)に3次式回帰が適用できるものなのか?

です。機械学習の土台となる数学知識があまりなく、勉強したいのですが時間がなく、様々なサイトを見て見様見真似でやっておりまして、至らない部分もあるかとございますが、ご教授いただけると助かります。

皆様お忙しいところ申し訳ありませんが何卒宜しくお願い致します。

Python

1a = [132.90183, 132.90082, 132.899859, 132.898943, 132.898088, 132.897294, 132.896503, 132.895693] 2b = [33.794023, 33.793724, 33.793335, 33.792861, 33.792326, 33.791718, 33.791102, 33.790507] 3 4""" 5polyfitによる回帰分析 6""" 7p = np.polyfit(a, b, 3) 8print("3次関数式係数 : %s"%(p)) 9 10# 2次多項式計算 11yfit = np.polyval(p, a) 12r2_1 = r2_score(b, yfit) 13r2_1 = round(r2_1, 5) 14print("決定係数 : %s"%(r2_1)) 15 16""" 17curve_fitによる回帰分析 18""" 19 20# 3次近似式用の関数 21def func(x, a, b, c, d): 22 return a * pow(x, 3) + b * pow(x, 2) + c * x + d 23 24# 近似式の作成 25popt, pcov = optimize.curve_fit(func, a, b) 26 27print("popt : %s"%(popt)) 28print("pcov : %s"%(pcov)) 29 30df_a = pd.DataFrame(a) 31df_b = pd.DataFrame(b) 32 33# 決定係数 34r2_2 = r2_score(df_b[0], func(df_a[0], *popt)) 35r2_2 = round(r2_2, 5) 36print("決定係数 : %s"%(r2_2))

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

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

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

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

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

guest

回答3

0

ベストアンサー

「決定係数」は定義が色々あり、その時点で議論の余地があります。参考ページを一つ貼りますが、他もあたってみてください。乱暴にr2_scoreを使えば良いというものではありません。

決定係数 R2の違い: Excel, OpenOffice, LibreOffice および統計解析ソフト R を用いて

また、使う決定係数の定義を決めたとしても、「仕事で決定係数が0.9985以上になる近似式を使いたい」という要件は限りなく無意味に近く、そこから再検討すべきと思います。

投稿2021/04/19 21:11

hayataka2049

総合スコア30935

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

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

NS78

2021/04/20 04:35

ご返信遅れまして申し訳ございません。 使うソフトによって決定係数の導き方が違う(つまり定義が違う)とのこと、理解致しました。GPSで受信した緯度経度を近似式に当てはめた値と、目的の緯度経度と一定の誤差がなければ、そこに居る、と判断するような要件だったのですが、これには無理があるということですね!
hayataka2049

2021/04/20 06:32

その要件であれば、ユークリッド距離とか測った方が素直かと思います。
hayataka2049

2021/04/20 06:40

近似曲線で補完することが必要なら、線形補完かスプラインあたりで実用上良いというか、逆に統計的に凝ったやり方しても意味がないような。信頼区間を出したいとかなら考えてみても良いかもしれませんが……
NS78

2021/04/23 08:26

ユークリッド距離、補間あたり参考に考えてみます。色々とご丁寧にありがとうございました。
guest

0

回帰のパラメータを増やすと、たとえば多項式の次数を増やすと、決定係数は増えます
たとえば、データ数とパラメータ数を同じにすると、
線形回帰を最小二乗法で解く
の「M=9の結果」のグラフのように全てのデータ点を通るため、決定係数は1.0になります

それが妥当なやり方かというと、ノイズがあってもそれに追従してしまい、上記のグラフのように過学習になるので、一般的にはよろしくないわけです

それでは、パラメータをどれくらい増やしてもいいのか、多項式の次数をどれくらい増やしてもいいのかについては、たとえば
多項式フィッティングにおける次数選定:赤池情報量規準についてまとめてみる
に書かれているAICのような指標を用いて決めたりします
指標はAIC以外にもいくつかあり、どの指標を使うかで同じデータでも結果が変わる場合がありますけど

もちろん、理論的にこうなるはずだから、という事前知識から決める場合もあります
AICのような指標を用いる場合でも、可能であれば、その結果が理論的に妥当なのか吟味した方がいいでしょうね

投稿2021/04/15 03:44

jbpb0

総合スコア7653

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

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

NS78

2021/04/20 04:20

ご返信遅れまして申し訳ございません。 貴重なアドバイスありがとうございます。何でもかんでも次数を上げればよいということではない、ということですね。全てを理解することは私にはハードルが高いですが、何となくニュアンスがわかりました。 添付していただいたURIを参考に少し勉強してみます。 ありがとうございました。
guest

0

①決定係数を上げるために元データをコンディションの良いデータへ加工するなど、何かよい方法が何かあるものなのか?

極端に言えば、近似結果から適当に点を取ってデータとして入力してやれば、決定係数は1.0になりますが、それに意味があると思いますか?
指数関数上の点を取ってn次式回帰をしてもだめなことは指数関数のテーラー展開式をみればわかるでしょう。

②そもそも2次式回帰で決定係数が低いものを3次式回帰にしたところで決定係数が上がるものなのか、また3次曲線ではない曲線(ただの緩やかな曲線)に3次式回帰が適用できるものなのか?

n個の点を通る近似曲線を作りたければ(n-1)次式ですべての点を通すことができますので、(n-1)次式回帰で理論上は決定係数は1.0になります。(実際は浮動小数点計算の誤差で少しずれます)

ただの緩やかな曲線、は縮尺の問題にすぎません。

投稿2021/04/15 01:18

ppaul

総合スコア24670

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

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

NS78

2021/04/20 04:12

ご返信遅れまして申し訳ございません。 貴重なアドバイスありがとうございます。 緩やかな曲線は縮尺の問題とのこと。なるほどです、理解致しました。 近似曲線の概念が何となくですがわかりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問