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:
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)
使用相同的tfidf
and OneVSRest linear svc
,我绕过了68 percent
性能。
我的问题是哪种方法是正确的方法,为什么会有这种差异?
解决方案
推荐阅读
- php - 如何在 AJAX 调用后 JSON 值后更新同一页面上的 SESSION 值而不刷新页面
- spring-boot - 我们如何将默认的 Swagger URL 更改为任何其他 URL
- tensorflow - 尝试使用 EarlyStopping 和 f1-metric 作为停止标准时出现 TypeError
- sql - 只打印列中的最大值
- javascript - 使用 Javascript 和 Flask 进行视频流时的 URL 重定向
- scheme - Guile 方案中的点列表
- python - Python Pandas Dataframe - 优化在另一个 Dataframe 中搜索 id
- ios - NSInvalidArgumentException FIRMessaging connectWithCompletion
- java - 在undertow中以编程方式配置的http端口运行随机端口的占位符值应该是多少
- macos - 使用 Spark AR 框架移动无人机 3d 对象