Как я вычисляю r-squared использование Python и Numpy?

Я покажу вам два метода, с помощью которых вы можете динамически применять ng-class

Step-1

Используя трехмерный оператор

<div ng-class="condition?'class1':'class2'"></div>

Выход

Если ваше условие истинно, тогда класс 1 будет применен к вашему элементу, будет применен класс2.

Недостаток

Когда вы попытаетесь изменить условное значение во время выполнения класс каким-то образом не изменится. Поэтому я предлагаю вам перейти на этап 2, если у вас есть требование, подобное динамическому изменению класса.

Step-2

<div ng-class="{value1:'class1', value2:'class2'}[condition]"></div>

Выход

, если ваше условие соответствует с value1, тогда класс 1 будет применен к вашему элементу, если совпадения со значением2, тогда будет применен класс2 и так далее. И динамическое изменение класса будет отлично работать с ним.

Надеюсь, это вам поможет.

83
задан Travis Beale 22 May 2009 в 17:40
поделиться

5 ответов

From the numpy.polyfit documentation, it is fitting linear regression. Specifically, numpy.polyfit with degree 'd' fits a linear regression with the mean function

E(y|x) = p_d * x**d + p_{d-1} * x **(d-1) + ... + p_1 * x + p_0

So you just need to calculate the R-squared for that fit. The wikipedia page on linear regression gives full details. You are interested in R^2 which you can calculate in a couple of ways, the easisest probably being

SST = Sum(i=1..n) (y_i - y_bar)^2
SSReg = Sum(i=1..n) (y_ihat - y_bar)^2
Rsquared = SSReg/SST

Where I use 'y_bar' for the mean of the y's, and 'y_ihat' to be the fit value for each point.

I'm not terribly familiar with numpy (I usually work in R), so there is probably a tidier way to calculate your R-squared, but the following should be correct

import numpy

# Polynomial Regression
def polyfit(x, y, degree):
    results = {}

    coeffs = numpy.polyfit(x, y, degree)

     # Polynomial Coefficients
    results['polynomial'] = coeffs.tolist()

    # r-squared
    p = numpy.poly1d(coeffs)
    # fit values, and mean
    yhat = p(x)                         # or [p(z) for z in x]
    ybar = numpy.sum(y)/len(y)          # or sum(y)/len(y)
    ssreg = numpy.sum((yhat-ybar)**2)   # or sum([ (yihat - ybar)**2 for yihat in yhat])
    sstot = numpy.sum((y - ybar)**2)    # or sum([ (yi - ybar)**2 for yi in y])
    results['determination'] = ssreg / sstot

    return results
55
ответ дан 24 November 2019 в 08:41
поделиться

Из scipy.stats.linregress источника. Они используют средний метод суммы квадратов.

import numpy as np

x = np.array(x)
y = np.array(y)

# average sum of squares:
ssxm, ssxym, ssyxm, ssym = np.cov(x, y, bias=1).flat

r_num = ssxym
r_den = np.sqrt(ssxm * ssym)
r = r_num / r_den

if r_den == 0.0:
    r = 0.0
else:
    r = r_num / r_den

    if r > 1.0:
        r = 1.0
    elif r < -1.0:
        r = -1.0
0
ответ дан 24 November 2019 в 08:41
поделиться

R-квадрат - это статистика, которая применяется только к линейной регрессии.

По сути, она измеряет, насколько вариативность ваших данных может быть объяснена линейной регрессией.

Итак, вы вычислите «общую сумму квадратов», которая представляет собой общий квадрат отклонения каждой из ваших конечных переменных от их среднего значения. . .

\ sum_ {i} (y_ {i} - y_bar) ^ 2

где y_bar - это среднее значение y.

Затем вы вычисляете «сумму квадратов регрессии», то есть насколько ваши FITTED-значения отличаются от среднего

\ sum_ {i} (yHat_ {i} - y_bar) ^ 2

, и находите соотношение этих двух.

Теперь все, что вам нужно сделать для полиномиального подбора, - это вставить y_hat из этой модели, но называть это r-квадрат некорректно.

Вот ссылка, которую я нашел, которая немного говорит о нем.

4
ответ дан 24 November 2019 в 08:41
поделиться

В статье в Википедии о r-квадратах предполагается, что его можно использовать для подбора общей модели, а не только для линейной регрессии.

5
ответ дан 24 November 2019 в 08:41
поделиться

Очень поздний ответ, но на всякий случай кому-то понадобится готовая функция для этого:

scipy.stats.linregress

т.е.

slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(x, y)

, как в ответе @Adam Marples.

111
ответ дан 24 November 2019 в 08:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: