问题描述
我有调查结果,我已对其进行了单热编码。我想计算每个参与者反应的敏感度。
以下是我的 DataFrame 的结构示例,其中:
- “巧克力”和“冰淇淋”是正确的
- “披萨”和“以上都不是”是不正确的
Question 1 | Chocolate | Pizza | Ice-Cream | None of the Above |
Participant ID | | | | |
1 | 1 | 1 | 1 | 0 |
2 | 0 | 0 | 1 | 0 |
3 | 1 | 0 | 1 | 0 |
我想附加一列,其中包含真阳性的总和,另一列包含假阴性的总和,然后创建另一个具有敏感度分数的列(针对每个参与者)。
下面是我正在尝试做的一个例子:
Question 1 | Chocolate | ... | True Positive | False Negative | ..
Participant ID | | | | |
1 | 1 | ... | 2 | 0 | ..
2 | 0 | ... | 1 | 1 | ..
3 | 1 | ... | 2 | 1 | ..
我不知道从哪里开始!谁能帮帮我?
非常感谢!
解决方法
您可以使用混淆矩阵(例如来自 Sklearn)来计算“真实位置”、“假否定”等。也许下面的代码对你有用:
import pandas as pd
import sklearn
from sklearn.metrics import confusion_matrix
a = [[1,1,0],[0,[1,0]]
correct = [[1,0]]
df = pd.DataFrame(data=a)
df.columns=['chocolate','pizza','icecream','none']
for i in range(len(df)):
pred = a[i]
true = correct[i]
tn,fp,fn,tp = confusion_matrix(true,pred).ravel()
print (f'Nr:{i} true neg:{tn} false pos:{fp} false neg:{fn} true pos:{tp}')
输出是(您可以将其放入数据帧中):
Nr:0 true neg:1 false pos:1 false neg:0 true pos:2
Nr:1 true neg:2 false pos:0 false neg:1 true pos:1
Nr:2 true neg:2 false pos:0 false neg:0 true pos:2