为我的任务组织数据集的最佳方式是什么?

数据挖掘 数据集
2022-02-25 22:40:40

我正在处理一项任务——仅使用推文来估计 Twitter 用户的地理位置。我在 Twitter 上收集了 6000 多人的推文(和用户)。每个用户都与一个城市相关联。

在数据集中,每个城市的样本(或用户)数量取决于城市规模。(即如果城市 A 的人口比城市 B 多,那么城市 A 在数据集中有更多的用户。)这看起来很公平,但它创建了一个不平衡的数据集。

现在,我正计划收集另一个数据集;一个更加平衡的数据集(即每个城市的用户数量几乎相同,尽管大城市的用户仍然会更多)。这样做是有道理的,还是我应该继续使用不平衡的数据集?什么方法对这项任务有好处?

1个回答

当你统一从一个社会中抽取样本时,从城市中选择的机会肯定与他们的人口直接相关。因此,更多的用户将从更多人口稠密的城市中选出,这是您试图解决的问题的最重要特征之一。我认为,如果您想平衡数据集,您会忽略数据的这一重要特征以及您的问题。

我强烈建议继续使用不平衡的数据集并通过选择适当的损失函数和评估方法来处理它。

免责声明:

如果您使用 python,PyCM模块可以帮助您找出这些指标。

这是一个从该模块获取推荐参数的简单代码:

>>> from pycm import *

>>> cm = ConfusionMatrix(matrix={"Class1": {"Class1": 1, "Class2":2}, "Class2": {"Class1": 0, "Class2": 5}})  

>>> print(cm.recommended_list)
["Kappa", "SOA1(Landis & Koch)", "SOA2(Fleiss)", "SOA3(Altman)", "SOA4(Cicchetti)", "CEN", "MCEN", "MCC", "J", "Overall J", "Overall MCC", "Overall CEN", "Overall MCEN", "AUC", "AUCI", "G", "DP", "DPI", "GI"]

之后,您想用作损失函数的每个参数都可以按如下方式使用:

>>> y_pred = model.predict      #the prediction of the implemented model

>>> y_actu = data.target        #data labels

>>> cm = ConfusionMatrix(y_actu, y_pred)

>>> loss = cm.Kappa             #or any other parameter (Example: cm.SOA1)