3

我有一个如下所示的数据集:

                                         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:

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:

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

3.然后我在二值化目标上应用 LabelEncoding

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)

使用相同的tfidfand OneVSRest linear svc,我绕过了68 percent性能。

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

我已经浏览了这个链接这个,它对我的​​问题没有帮助。

4

0 回答 0