0

我读了这个,但这没有解决我的问题:我有这个 initial_comparison_frame

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_kappa_score

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_score 匹配,对角线除外。既然是距离矩阵,那么一个人到自己的距离确实应该是0,但是,为什么矩阵中的分数不等于1——kappa分数呢?
否则,两个逻辑应用于同一个矩阵,我不明白。所以我相信我犯了一个错误。

谢谢你启发我。

4

1 回答 1

1

实际上,我意识到问题出在 scipy squareform 函数上; https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.distance.squareform.html 其中指出“给定 ad*d(-1)/2 大小的 v 用于某些整数 d >=2 编码距离,如所述,X=squareform(v) 通过 d 距离矩阵 X 返回 ad。 X[i, j] 和 X[j, i] 值设置为 v[{n choose 2}-{ni选择 2} + (ju-1)] 并且所有对角线元素都为零。"

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

所以我想只是通过正确的操作修改由 squareform 创建的框架(一旦我认为这些是负值的正确方法,我将稍后进行编辑)

于 2017-09-04T10:13:47.963 回答