[解決済み] scikit-learn`の `r2_score` とR^2計算の間に重大な不一致がある。
質問
質問
との間に大きな差があるのはなぜですか?
r2_score
の関数を使用します。
の計算式と
ウィキペディアの決定係数
? どちらが正しいのでしょうか?
コンテキスト
Python 3.5を使って線形モデルや二次モデルを予測しているのですが、適合度の測定の1つに.NET Frameworkがあります。 しかし、テストしているうちに、.NET Frameworkの間に著しい違いがあることがわかりました。
r2_score
のメトリックは
scikit-learn
とWikipediaに掲載されている計算方法を参考にしています。
コード
上記のリンク先のWikipediaのページにある例を計算した私のコードを参考としてここに提供します。
from sklearn.metrics import r2_score numpyをインポートする y = [1, 2, 3, 4, 5] f = [1.9, 3.7, 5.8, 8.0, 9.6] # 単精度エラーを避けるため、倍精度を保証する。 observed = numpy.array(y, dtype=numpy.float64) predicted = numpy.array(f, dtype=numpy.float64) scipy_value = r2_score(observed, predicted) >>> scipy_value。
明らかなように
scipy
の計算値は
-3.8699999999999992
であるのに対し、Wikipediaの参照値では
0.998
.
ありがとうございました。
UPDATE とは異なります。 scikit-learnでR^2がどのように計算されるかについての質問です。 私が理解しようとし、明らかにしたことは、両者の結果の不一致です。 この質問では、scikitで使用されている数式はWikipediaのものと同じであり、異なる値になることはないはずだと述べています。
UPDATE #2。 Wikipediaの記事の例題を読み間違えていたことが判明しました。回答や以下のコメントで、私が提供する例は、例の(x, y)の値の線形、最小二乗フィットのためのものであることに言及しています。それについては、Wikipediaの記事の回答が正しいです。それに対して、提供されたR^2 calueは0.998です。両ベクトル間のR^2については、scikitの答えも正しいです。ご協力ありがとうございました。
どのように解決するのですか?
参照した質問は正しいです。残差平方和と総和平方和の計算をやり通すと、sklearnと同じ値が得られます。
In [85]: import numpy as np
In [86]: y = [1,2,3,4,5]
In [87]: f = [1.9, 3.7, 5.8, 8.0, 9.6]
In [88]: SSres = sum(map(lambda x: (x[0]-x[1])**2, zip(y, f)))
In [89]: SStot = sum([(x-np.mean(y))**2 for x in y])
In [90]: SSres, SStot
Out[90]: (48.699999999999996, 10.0)
In [91]: 1-(SSres/SStot)
Out[91]: -3.8699999999999992
負の値の背後にある考え方は、毎回平均を予測するだけなら実際の値に近かっただろうということです(これは、r2 = 0に相当します)。
関連
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] 0から9までのランダムな整数を生成する
-
[解決済み] リストとタプルの違いは何ですか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenvなどの違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない