我的数据集如下所示:
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)
使用相同的tfidf
和OneVSRest linear svc
,我获得了68 percent
性能
我的问题是,哪种方法是正确的方法,为什么会有差异
我已经讨论了这个{a1}和{a2},这对我的问题没有帮助
目前没有回答
相关问题 更多 >
编程相关推荐