#python #pandas
#python #pandas
Вопрос:
предположим, у меня есть фрейм данных, я хочу вычислить квадрат r между двумя столбцами.
ps. не r2 (df [0], df [1]), мне нужен r2, который использует df [0], чтобы ols соответствовал r2 df [1].
например:
In [21]: df = pd.DataFrame(np.random.rand(10, 2))
In [22]: df
Out[22]:
0 1
0 0.776080 0.966668
1 0.922351 0.024381
2 0.859104 0.397823
3 0.607491 0.425335
4 0.732265 0.667846
5 0.336950 0.544515
6 0.236403 0.610943
7 0.811736 0.306425
8 0.110440 0.059754
9 0.469844 0.957298
как я могу вычислить r2 для столбца 1, соответствующего столбцу 0?
Комментарии:
1.
sklearn.metrics.r2_score(df[0], df[1])
shoud выполнит задание2. Что вы пробовали до сих пор?
Ответ №1:
Как уже говорилось в комментариях, у sklearn есть метод вычисления квадрата r.
from sklearn.metrics import r2_score
r2_score(df[0], df[1])
# -1.8462387938183031
Но чтобы ответить на ваш вопрос и вычислить его самостоятельно в pandas, мы можем использовать векторизованные методы:
res = df[0].sub(df[1]).pow(2).sum()
tot = df[0].sub(df[0].mean()).pow(2).sum()
r2 = 1 - res/tot
# -1.8462387938183031
Комментарии:
1. отлично, спасибо Эрфану, я думаю, что метод pandas быстрее?
2. Не уверен на 100%, вы можете протестировать его с большими наборами данных, разница не должна быть слишком большой, поскольку scikit-learn использует numpy под капотом.
3. Привет, извините за вторжение. Я мод на Ask Ubuntu. Если вы хотите восстановить свой вопрос , я буду рад отредактировать и снова открыть его. Хотя прокомментировавший пользователь был прав в том, что в целом решение для всех таких ошибок заключается в удалении или исправлении нарушающей строки, представляется важным объяснить, как это исправить в данном конкретном случае. Конечно, это ваш выбор 🙂