Коэффициент детерминации у библиотек scikit-learn и scipy различен. Зачем? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть набор данных из бумаги, и мне трудно проверить их сообщенный коэффициент детерминации, R-квадрат. Я использовал библиотеки sklearn и scipy, и я получаю разные ответы. Зачем? какой из них более надежный? постскриптум когда я использовал Excel в качестве другой альтернативы, я получил тот же ответ, что и от scipy.

Ниже приведен код, который я использовал для сравнения результатов SKlearn и Scipy:

import pandas as pd
from scipy import stats
from sklearn.metrics import r2_score

data = pd.read_csv("output.csv", header=None)

y_measured = data.iloc[0, :].values
y_predicted = data.iloc[1, :].values

print(r2_score(y_measured, y_predicted)) # prints 0.708717556205

slope, intercept, r_value, p_value, std_err = stats.linregress(y_measured, y_predicted)

print(r_value**2)  # prints 0.731889173485

1 Ответ

0 голосов
/ 01 мая 2018

r2_score вычисляет его значение из заданных значений y и значений y , прогнозируемых линией линейной регрессии, а не из заданных значения x и y .

Вот пример. Во-первых, импорт:

In [59]: import numpy as np

In [60]: from scipy import stats

In [61]: from sklearn.metrics import r2_score

Некоторые данные для работы:

In [62]: x = np.array([0, 1, 2, 3, 5, 8, 13])

In [63]: y = np.array([1.2, 1.4, 1.6, 1.7, 2.0, 4.1, 6.6])

Выполните линейную регрессию, используя scipy.stats.linregress, и проверьте r 2 :

In [64]: slope, intercept, rvalue, pvalue, stderr = stats.linregress(x, y)

In [65]: rvalue**2
Out[65]: 0.9485915175891462

Для заданных значений x вычислите значения y, предсказанные линией регрессии:

In [66]: ypred = slope*x + intercept

Вычислить r 2 снова, используя r2_score:

In [67]: r2_score(y, ypred)
Out[67]: 0.9485915175891464

Как и ожидалось, мы получаем то же значение.

Мы также можем вычислить это значение с помощью scipy.stats.pearsonr:

In [68]: pearson_r, pearson_p = stats.pearsonr(x, y)

In [69]: pearson_r**2
Out[69]: 0.9485915175891464
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...