如何计算Cohen的kappa系数来衡量评分者之间的一致性?(影评)

2024-09-28 22:13:24 发布

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

我正在使用scikit学习和处理预测电影评论评分的练习。我读过科恩的kappa(坦率地说,我不完全理解它),它是衡量观察到的准确度和预期的准确度的有用指标。我像往常一样在我的语料库中应用机器学习算法,使用了一包单词模型。我读过Cohen的Kappa是衡量分类器性能的好方法。 如何使用sklearn使此概念适应我的预测问题?
Sklearn的文档并没有明确说明如何使用文档术语矩阵(如果这是正确的方法)来处理这个问题
sklearn.metrics.cohen_kappa_score(y1, y2, labels=None, weights=None)
这是sklearn网站上的示例:

from sklearn.metrics import cohen_kappa_score
y_true = [2, 0, 2, 2, 0, 1]
y_pred = [0, 0, 2, 2, 0, 2]
cohen_kappa_score(y_true, y_pred)

Kappa评分计算在这里适用吗?在我的语料库中注释评论的人中?怎么写? 既然所有的影评都来自不同的注释者,那么在评价科恩的《卡帕》时,他们还需要考虑两个注释者吗? 我该怎么办? 下面是我正在尝试的示例:

import pandas as pd
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import StratifiedShuffleSplit

xlsx1 = pd.ExcelFile('App-Music/reviews.xlsx') 
'''
review are stored in two columns, one for the review, one for the rating
'''


X = pd.read_excel(xlsx1,'Sheet1').Review
Y = pd.read_excel(xlsx1,'Sheet1').Rating

X_train, X_test, Y_train, Y_test = train_test_split(X_documents, Y, stratify=Y)
new_vect= TfidfVectorizer(ngram_range=(1, 2), stop_words='english')
X_train_dtm = new_vect.fit_transform(X_train.values.astype('U'))
X_test_dtm = new_vect.fit_transform(X_test.values.astype('U'))

new_model.fit(X_train_dtm,Y_train)
new_model.score(X_test_dtm,Y_test)

'''
this is the part where I want to calculate cohen kappa score for comparison  
'''

我可能完全错了,但我读了这篇关于情绪分析的文章 “归根结底,工具的准确性只是人类判断与工具判断一致的百分比。人类之间这种程度的一致也被称为人类和谐。各种各样的人和公司进行了各种各样的研究,他们得出的结论是,人类和谐的比率在70%到79%之间。” 我希望这是足够的信息。:)


Tags: fromtestimportnewmodeltrain人类sklearn
1条回答
网友
1楼 · 发布于 2024-09-28 22:13:24

documentation of ^{}所述:

The kappa statistic is symmetric, so swapping y1 and y2 doesn’t change the value.

此度量中没有y_predy_true。你在信中提到的签名是

sklearn.metrics.cohen_kappa_score(y1, y2, labels=None, weights=None)

在这种情况下,没有什么比正确的预测值更合适的了。只是两个不同的人贴的标签。因此,由于他们对这个话题的看法和理解,可能会有差异。

您只需要提供两个列表(或数组),其中的标签由不同的注释器注释。命令无关紧要。

编辑1

你说你有文字评论。在这种情况下,需要应用一些特征提取过程来标识标签。

This metric用于找到两个人之间标记数据的一致性。就像给一些数据样本分配一个类。这不能直接用于原始文本。

编辑2: 假设y只包含整数(可能从1到10进行审查),这将成为一个多类分类问题。它由cohen_kappa_score的scikit实现支持。

如果我正确理解你发布的情感分析链接,那么你应该:

Y_pred = new_model.predict(X_test_dtm)
cohen_score = cohen_kappa_score(Y_test, Y_pred)

相关问题 更多 >