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

Gui*_*Kaz 8 python statistics machine-learning scikit-learn

我正在使用 scikit 学习并解决预测电影评论评级的练习。我已经阅读了 Cohen 的 kappa(坦率地说,我并没有完全理解它),它作为比较观察到的和预期的准确性的度量很有用。我像往常一样继续在我的语料库上应用机器学习算法,使用词袋模型。我读过 Cohen's 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)
Run Code Online (Sandbox Code Playgroud)

Kappa 评分计算是否适用于此处?在我的语料库中注释评论的人中?怎么写?既然所有的影评都来自不同的注释者,那么在评估 Cohen 的 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  
'''
Run Code Online (Sandbox Code Playgroud)

我可能完全错误的想法,但我读到这个关于情感分析的页面“最终,工具的准确性只是人类判断与工具判断一致的次数的百分比。人类之间的这种一致性程度也称为人类一致性。各种人和公司进行了各种研究,他们得出的结论是,人类的一致性率在 70% 到 79% 之间。” 我希望这是足够的信息。:)

Viv*_*mar 10

文档中所述cohen_kappa_score

kappa 统计量是对称的,因此交换 y1 和 y2 不会改变值。

在这个指标中没有y_pred, y_true。您在帖子中提到的签名是

sklearn.metrics.cohen_kappa_score(y1, y2, labels=None, weights=None)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,没有像正确和预测值这样的东西。它只是两个不同人的标签。所以可能会因为他们对主题的看法和理解而有所不同。

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

编辑 1

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

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

编辑 2:假设您的 y 仅包含整数(可能是从 1 到 10 的评论),这将成为一个多类分类问题。它由cohen_kappa_score.

如果我正确理解您发布的情绪分析链接,那么您应该这样做:

Y_pred = new_model.predict(X_test_dtm)
cohen_score = cohen_kappa_score(Y_test, Y_pred)
Run Code Online (Sandbox Code Playgroud)