使用带有自定义相关函数的pdist是避免kappa评分差异的正确方法吗?

2024-04-30 10:15:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我读了这篇文章,但this并不能解决我的问题: 我有一个比较框架

id  GO1 GO10    GO11    GO12    GO2 GO3 GO4 GO5 GO6 GO7 GO8 GO9
GO1 1   0   0   0   0   0   1   1   1   1   1   1
GO2 0   0   1   0   1   0   1   1   1   1   1   1
GO3 1   0   0   1   0   1   0   1   1   1   1   1
GO4 1   0   0   0   0   0   1   0   1   1   0   0
GO5 0   0   0   0   0   0   0   1   0   0   0   0
GO6 1   0   0   0   0   1   0   1   1   1   0   1
GO7 0   1   1   1   1   0   0   1   1   1   1   0
GO8 0   0   0   0   1   1   1   1   1   1   1   1
GO9 0   0   0   0   0   0   0   0   0   0   0   1

可以这样生成:

initial_comparison_frame = pd.DataFrame([[1,0,0,0,0,0,1,1,1,1,1,1],[0,0,1,0,1,0,1,1,1,1,1,1],[1,0,0,1,0,1,0,1,1,1,1,1],[1,0,0,0,0,0,1,0,1,1,0,0],[0,0,0,0,0,0,0,1,0,0,0,0],[1,0,0,0,0,1,0,1,1,1,0,1],[0,1,1,1,1,0,0,1,1,1,1,0],[0,0,0,0,1,1,1,1,1,1,1,1],[0,0,0,0,0,0,0,0,0,0,0,1]], index =["GO1","GO2","GO3","GO4","GO5","GO6","GO7","GO8","GO9"],columns = ["GO1","GO10","GO11","GO12","GO2","GO3","GO4","GO5","GO6","GO7","GO8","GO9"])   

(我用另一种方法从get\ dummies生成,但这不会改变任何事情)

我想用cohen\u-kappa\u分数建立这些向量的成对距离矩阵

from sklearn.metrics import cohen_kappa_score
dist_matrix = pdist(initial_comparison_frame, cohen_kappa_score)
square_dist_matrix = squareform(dist_matrix) 
square_dist_frame = pd.DataFrame (square_dist_matrix, index = count_frame['id'], columns = count_frame['id'])

像这样:

    id  GO1 GO2 GO3 GO4 GO5 GO6 GO7 GO8 GO9
GO1 0.0 0.47058823529411764 0.47058823529411764 0.5263157894736843  0.12195121951219523 0.5 -0.23529411764705865    0.47058823529411764 0.12195121951219523
GO2 0.47058823529411764 0.0 -0.125  0.09999999999999987 0.08695652173913038 0.0 0.25    0.625   0.08695652173913038
GO3 0.47058823529411764 -0.125  0.0 0.09999999999999987 0.08695652173913038 0.6666666666666667  -0.125  0.25    0.08695652173913038
GO4 0.5263157894736843  0.09999999999999987 0.09999999999999987 0.0 -0.15384615384615397    0.33333333333333337 -0.20000000000000018    0.09999999999999987 -0.15384615384615397
GO5 0.12195121951219523 0.08695652173913038 0.08695652173913038 -0.15384615384615397    0.0 0.16666666666666663 0.08695652173913038 0.08695652173913038 -0.09090909090909105
GO6 0.5 0.0 0.6666666666666667  0.33333333333333337 0.16666666666666663 0.0 -0.33333333333333326    0.33333333333333337 0.16666666666666663
GO7 -0.23529411764705865    0.25    -0.125  -0.20000000000000018    0.08695652173913038 -0.33333333333333326    0.0 -0.125  -0.17391304347826098
GO8 0.47058823529411764 0.625   0.25    0.09999999999999987 0.08695652173913038 0.33333333333333337 -0.125  0.0 0.08695652173913038
GO9 0.12195121951219523 0.08695652173913038 0.08695652173913038 -0.15384615384615397    -0.09090909090909105    0.16666666666666663 -0.17391304347826098    0.08695652173913038 0.0

为了方便起见,可以这样生成:

 square_dist_frame = pd.DataFrame([[0.0 0.47058823529411764 0.47058823529411764 0.5263157894736843  0.12195121951219523 0.5 -0.23529411764705865    0.47058823529411764 0.12195121951219523],[0.47058823529411764   0.0 -0.125  0.09999999999999987 0.08695652173913038 0.0 0.25    0.625   0.08695652173913038],[0.47058823529411764   -0.125  0.0 0.09999999999999987 0.08695652173913038 0.6666666666666667  -0.125  0.25    0.08695652173913038],[0.5263157894736843    0.09999999999999987 0.09999999999999987 0.0 -0.15384615384615397    0.33333333333333337 -0.20000000000000018    0.09999999999999987 -0.15384615384615397],[0.12195121951219523  0.08695652173913038 0.08695652173913038 -0.15384615384615397    0.0 0.16666666666666663 0.08695652173913038 0.08695652173913038 -0.09090909090909105],[0.5  0.0 0.6666666666666667  0.33333333333333337 0.16666666666666663 0.0 -0.33333333333333326    0.33333333333333337 0.16666666666666663],[-0.23529411764705865  0.25    -0.125  -0.20000000000000018    0.08695652173913038 -0.33333333333333326    0.0 -0.125  -0.17391304347826098],[0.47058823529411764  0.625   0.25    0.09999999999999987 0.08695652173913038 0.33333333333333337 -0.125  0.0 0.08695652173913038],[0.12195121951219523   0.08695652173913038 0.08695652173913038 -0.15384615384615397    -0.09090909090909105    0.16666666666666663 -0.17391304347826098    0.08695652173913038 0.0]], index =["GO1","GO2","GO3","GO4","GO5","GO6","GO7","GO8","GO9"],columns = ["GO1","GO2","GO3","GO4","GO5","GO6","GO7","GO8","GO9"])

我的实际问题是,除了对角线以外,这些值与单个值的实际kappa\u分数相匹配。既然它是一个距离矩阵,那么一个人到自己的距离应该是0,但是,为什么矩阵中的分数不等于1——kappa分数呢?
否则,两个逻辑应用于同一个矩阵,我不明白。所以我相信我犯了个错误。你知道吗

谢谢你启发我。你知道吗


Tags: iddist矩阵frame分数kappago2go1
1条回答
网友
1楼 · 发布于 2024-04-30 10:15:39

实际上,我意识到问题在于scipy平方函数; https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.distance.squareform.html 哪个州 “给定一个d*d(-1)/2大小的v,用于一些整数d>;=2编码距离,如所述,X=squareform(v)返回一个d乘d距离矩阵X。X[i,j]和X[j,i]值被设置为v[{n choose 2}-{n-i choose 2}+(j-u-1)],所有对角线元素都为零。”

kappa得分为0表示完全去相关和1完全相关(-1反向相关)

因此,我想只需通过正确的操作修改squareform创建的帧(我将在稍后编辑,一旦我用正确的方法计算出了负值)

相关问题 更多 >