当特征和目标在两个不同的文件中时,如何划分数据集进行训练和测试?

数据挖掘 多标签分类 卡格尔
2022-02-10 10:16:54

我正在尝试将数据集划分为训练数据集和测试数据集以进行多标签分类。我正在处理的数据集就是这个它分为一个包含特征的文件和另一个包含目标的文件。它们如下所示。

在此处输入图像描述

这是关于特征的图像。

在此处输入图像描述

这是关于目标的图像。

我打算使用这个数据集进行多标签分类。我正在关注本教程这里的数据集看起来像这样。

在此处输入图像描述

我正在处理的数据集在目标文件中有 17203824 个样本和 58255 个不同且唯一的标签。因此,按照本教程,我打算创建一个新的 numpy 2d 数组,其中包含 17203824 行和 58255 列,其中适当的索引将标记为 1。我能够创建它。但是当我尝试在适当的索引中填充 1 时,我得到了一个错误。它说我没有足够的内存。我的代码如下。

questions = pd.read_csv("/kaggle/input/stacklite/questions.csv")
question_tags = pd.read_csv("/kaggle/input/stacklite/question_tags.csv")
d = {v: i[0] for i, v in np.ndenumerate(question_tags["Tag"].unique())}

y = np.zeros([questions.shape[0], len(question_tags["Tag"].unique())], dtype = int)

for k in question_tags["Tag"]:
    j = d[k]
    for i, l in enumerate(y):
        y[i][j] = 1

谁能帮我告诉我应该如何进行?

2个回答

我建议您查看一些将列值转换为标签的常见 python 库。其中许多功能已经存在了一段时间,并且经过优化以使用更少的内存和/或运行得更快。例如,您可以使用 pandas 中 get_dummies() 中所谓的“One Hot Encoding”或 sklearn 中的“LableEncoder”。

这是一个很好的参考,有很多方法可以尝试,具体取决于您的需要。

https://pbpython.com/categorical-encoding.html

这是词嵌入如何工作的示例。此示例中的每个单词都缩减为 2 个值(x 和 y)

在此处输入图像描述

您可以将特征加载到变量 (X) 中,并将第二列目标加载到另一个变量 (y) 中。然后使用 sklearn 库中可用的 train_test_split。

X_train,X_test,y_train,y_test = train_test_split(X,y, test_size=__)

顺便说一句,您需要先预处理数据。NAN 值很多,id 和 date 可能对预测目标没有任何价值。