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