Расчет коэффициента определения в Python - PullRequest
2 голосов
/ 11 августа 2010

Я пытаюсь вычислить коэффициент определения (R ^ 2) в Python, но в некоторых случаях получаю отрицательное значение.Это признак того, что в моих расчетах есть ошибка?Я думал, что R ^ 2 должен быть ограничен между 0 и 1.

Вот мой код Python для выполнения расчетов, адаптированный прямо из статьи WP:

>>> yi_list = [1, 1, 63, 63, 5, 5, 124, 124]
>>> fi_list = [1.7438055421354988, 2.3153069186947639, 1002.7093097555808, 63.097699219524706, 6.2635465467410842, 7.2275532522971364, 17.55393551900103, 40.8570]
>>> y_mean = sum(yi_list)/float(len(yi_list))
>>> ss_tot = sum((yi-y_mean)**2 for yi in yi_list)
>>> ss_err = sum((yi-fi)**2 for yi,fi in zip(yi_list,fi_list))
>>> r2 = 1 - (ss_err/ss_tot)
>>> r2
-43.802085810924964

Ответы [ 4 ]

3 голосов
/ 11 августа 2010

Ваша реализация расчета, как показано в статье в Википедии, выглядит хорошо для меня.

Согласно статье в Википедии:

Значения R2 вне диапазона от 0 до 1 могут иметь место, когда он используется для измерения соответствия между наблюдаемыми и смоделированными значениями, и когда «смоделированные» значения не получены линейной регрессией и в зависимости от того, какая формулировка R2 используется.

Глядя на ваши данные, ожидаемая смоделированная пара 63 и 1002.7093097555808, вероятно, являются основным источником большой дисперсии.

1 голос
/ 11 августа 2010

Нет, в формуле нет ошибок. Ваша ценность не коррелируется вообще (посмотрите на y3 и f3: 63 и 1002).

Просто чтобы показать вам, что R2 не связан с 0,1, представьте, что один из f почти бесконечен. Serr также будет почти бесконечным, так что R2 почти бесконечным.

Не путаете ли вы значения X и Y?

(простите за "почти бесконечный" бит, но я не знаю, как лучше сказать это по-английски)

1 голос
/ 11 августа 2010

Глядя на статью, я думаю, что это ожидаемое поведение, учитывая входные данные. Во введении говорится:

Важные случаи, когда вычислительное определение R2 может давать отрицательные значения, в зависимости от используемого определения, возникают, когда прогнозы, которые сравниваются с соответствующим результатом, не были получены из процедуры подбора модели с использованием этих данных.

Я не вижу в формулах ничего, что означало бы, что оно всегда будет в диапазоне 0-1.

0 голосов
/ 25 декабря 2016

Вот функция, которая вычисляет коэффициент детерминации в python:

import numpy as np

def rSquare(estimations, measureds):
    """ Compute the coefficient of determination of random data. 
    This metric gives the level of confidence about the model used to model data"""
    SEE =  (( np.array(measureds) - np.array(estimations) )**2 ).sum()
    mMean = (np.array(measureds)).sum() / float(len(measureds))
    dErr = ((mMean - measureds)).sum()

    return 1 - (SEE / dErr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...