在 sklearn 中使用子任务和两个不同的数据集时,您将如何实现模型组合

How would you implement model combination when using sub tasks and two different datasets with sklearn

当使用两个不同的数据集时,如何将模型持久性用于子任务?我创建了原件的副本,并将目标列中的 3 个标签替换为另一个标签。

例如,我有一个 NLP 多 class 化问题,我需要将 x class 化为 4 个不同的标签,例如 1、2、3 或 4。1, 2、3个标签是相关的,它们的标签可以代入5,所以现在是一个二元class化问题。现在,我只需要区分 4 和 5,但我还剩下 1、2、3 之间的 class 化,我不太确定如何使用初始 class ification(4 和 5 二元 classification 模型)有助于第二个模型(classifying 1,2,3)。如果 sci-kit learn 像 Keras 那样允许这样做,我找不到任何信息。感谢您的任何建议。

目前,我正在使用 SGDClassifier 并在 class4 和 5 之间获得 90% 的准确率,但不确定如何将其用于 1、2 的多重 class 化, 和 3. 这个功能不在 sklearn 中吗?

我认为它类似于 Keras。


编辑: 经过进一步研究,我认为我会使用 'stacking models.' 但是,我在理解第二个模型将如何 'know' 哪些标签 (1,2,3) 被替换为 5 时遇到了概念性问题?

我 运行 关注的一个问题是,集成学习器要求他们在同一数据集上接受训练。我的是一样的,除了它不是因为我已经将标签 1、2、3 替换为 5,所以它只有 4、5 作为标签。这种方法会导致什么结果?


编辑2: 每个样本只能标记为一个class。 A. 原始目标列包含 (1,2,3, 和 4)。 B、调整后的目标列包含(4,和5),其中5代表1、2、3

A和B是两个不同的CSV文件,唯一的区别就是上面所说的,两者的特点是一样的。

每次折叠(10 次折叠)拟合 SGDClassifier()

X_Train = about (30000, 54) (垂直堆叠) -- y_train = ~30000

正在测试:

X_test = (2000 到 4000, 54) -- y_test = (2000 到 4000)

现在怎么样:

clf1 = SGDClassifier(max_iter=1000, tol=1e-3)
clf1.fit(X_train, y_train)
predicted = [labels[int(a)] for a in clf1.predict(X_test)]
actual = [labels[int(a)] for a in y_test]

这是我根据您上面的简单代码得出的答案。

我们有 X_train、Y_train。

训练模型1

#modifiying the labels for two classes. binary prediction.  1[1,2,3] & 2[4]   
y_train_copy = np.copy(y_train)
y_train_copy [y_train_copy <4] = 1
y_train_copy [y_train_copy >=4] = 2
clf1 = SGDClassifier(max_iter=1000, tol=1e-3)
clf1.fit(X_train, y_train_copy )

训练模型2

#training with classes 1 ,2, 3. filtering X based on Y
X_train = X_train[Y_train<4] 
Y_train = Y_train[Y_train<4]
clf2 = SGDClassifier(max_iter=1000, tol=1e-3)
clf2.fit(X_train, y_train)

现在我们有 2 个模型,clf1(将 2 类 (1,2,3) 分类为 1 或 (4) 分类为 2),clf2 将预测的个体 (1,2,3) 分类作为 clf1 中的 1 )

预测

predicted = clf1.predict(X_test)
#make sure you get 1 & 2 filled in predicted list

这将给出 1(1,2,3) 或 2 (4) 的结果

further_prediction_X_test = X_test[predicted == 1] #filtering all thats predicted as 1 by previous model
further_prediction = clf2.predict(further_repdiction_X_test)
predicted[predicted==2] = 4 #rolling back to original label
predicted[predicted==1] = further_prediction #replacing the predicted classes from second model for which first model predicted as 1. (replacing with 1, 2, 3) 

注:

  1. 我强烈建议对您的 类 进行整数编码,以便于过滤和使用它。

  2. 不要将 clf1 的 1 和 2 与我上面的答案中的 1,2,3,4 原始 类 混淆。