我知道numpy里有计算正常的相关系数的函数,请问如果是加权的相关系数怎么计算?
比如我在pandas的dataframe里有三列,一列x,一列y,还有一列是w,表示每行的权重,我怎么计算基于权重w的x和y的相关系数?
2个回答
可以使用statsmodels.stats.weightstats.DescrStatsW模块
from statsmodels.stats import weightstats
stats_summary = weightstats.DescrStatsW(df[['x', 'y']], weights=df['w'])
print(stats_summary.corrcoef[0, 1]
stats_summary.corrcoef是一个2乘2的对称矩阵,对角线是1,其他位置的元素就是加权的相关系数
SofaSofa数据科学社区DS面试题库 DS面经numpy的实现版本如下
import numpy as np
def cov(x, y, w):
"""Weighted Covariance"""
return np.average((x - m(x, w)) * (y - m(y, w)), weights=w)
def corr(x, y, w):
"""Weighted Correlation"""
return cov(x, y, w) / np.sqrt(cov(x, x, w) * cov(y, y, w))
SofaSofa数据科学社区DS面试题库 DS面经相关讨论
随便看看