多标签分类和分层抽样在目标值不同的情况下会得到不同的结果

2024-09-27 22:40:02 发布

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

我的数据集如下所示:

                                         Clean_Tweet     cEXT  cNEU cAGR  cCON  cOPN
0      thanks questions watch season premiere tonight     0     1     1     1    0
1                            couple films coming book     0     0     0     1    1
2                                  naked afford price     0     1     0     1    1

我想在此数据集上应用多标签分类。由于我的数据集不平衡,我需要使用分层抽样

我对准备y值并将其传递给iterative_train_test_split的方式感到困惑

我用两种方法做了,得到了非常不同的结果。我想知道你是否能帮我理解哪条路是正确的

第一个场景:

1。我将数据集转换为以下形状:

0    thanks questions watch season premiere tonight     [cNeu, cAgr, cCon]
1    couple films coming book                           [cCON, cOPN]
2    naked afford price                                 [cNeu, cCON, cOPN]

2.然后使用多标签二值化器:

multilabel_binarizer = MultiLabelBinarizer()
multilabel_binarizer.fit(df.personality)
y = multilabel_binarizer.transform(df.personality)

3.然后调用采样:

X_train, y_train, X_test, y_test = iterative_train_test_split(np.array(df['Clean_Tweet']).reshape(-1,1), y, test_size = 0.33)

然后使用tfidf矢量器并传递到OneVSRest linear svc进行分类(如果知道代码可能也有帮助,请让我知道我将在这里发布)

这样,我的f1, precision, recall性能大约是95 percent

第二种情况

1。我将数据集转换为以下形状:

0    thanks questions watch season premiere tonight     [cNeu, cAgr, cCon]
1    couple films coming book                           [cCON, cOPN]
2    naked afford price                                 [cNeu, cCON, cOPN]

2.然后使用多标签二值化器:

multilabel_binarizer = MultiLabelBinarizer()
multilabel_binarizer.fit(df.personality)
y = multilabel_binarizer.transform(df.personality)

3.然后我在二值化目标上应用标签编码

def get_new_labels(y):
    y_new = LabelEncoder().fit_transform([''.join(str(l)) for l in y])
    return y_new

y_new = get_new_labels(y)
y_new = y_new.reshape(len(y_new), 1)

4.然后:

X_train, y_train, X_test, y_test = iterative_train_test_split(np.array(df['Clean_Tweet']).reshape(-1,1), y_new, test_size = 0.33)

使用相同的tfidfOneVSRest linear svc,我获得了68 percent性能

我的问题是,哪种方法是正确的方法,为什么会有差异

我已经讨论了这个{a1}和{a2},这对我的问题没有帮助


Tags: 数据testcleandfnewtrain标签tweet

热门问题